Window shadow control and adaptive window sizing - #240
Conversation
Window shadow: - New WindowShadow setting (show / hide while picking / hide) applied to the primary window, suppressed around picks for the "while picking" mode - Lives in a new "Window Settings" section in Preferences Adaptive sizing: - Lower the window min size (≈200pt tall, 360 wide) and shed UI as the window shrinks — palettes, contrast footer, preview pill, colour names, type labels — via height/width breakpoints, suppress-but-remember - Value text auto-fits two lines within its column - Floating "expand to fit" affordance (hover-gated) that grows the window to reveal hidden-but-enabled elements Footer / drawer polish: - Shorten footer labels (Contrast, Contrast (Lc), Body) so footer and palette drawer share one hide width - Standard window background in light mode; AdaptiveDivider for consistent section seams; nearly-matched drawer tint - Remove the divider between the two colour swatches Fix header shader vanishing when a Picker menu closes by scoping the window notifications to the view's own host window. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Shadow options read "Show shadow" / "Hide shadow while picking" /
"Hide shadow"
- Move shadow control into a "Window Settings" section (unlabeled dropdown)
- Lower the shared footer/palette hide width to 410; compliance badge
titles truncate ("Bo…") rather than clip when space is tight
- Footer slides without an opacity fade (always full opacity)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Draw a hairline outline via a borderless, click-through companion window laid over the main window whenever it has no shadow, so a shadowless window keeps a defined edge. Sized past the frame to sit on the visible glass edge; tuned stroke inset and corner radius. - Move the windowShadow observation into WindowCoordinator so the border tracks the setting (and the while-picking suppression). - Replace the value text's minimumScaleFactor with AdaptiveValueText, which scales the font proportionally to the measured column width. The wrap point stays fixed as the window resizes (no bistable line-jump flicker) and long values shrink to two lines instead of truncating. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
@claude Review please. |
|
Claude finished @superhighfives's task in 3m 52s —— View job ReviewI read through the full diff against Overall this is a well-structured, carefully-commented PR. The shadow-suppression handoff logic for chained foreground→background picks ( 1. Border window's window.level = pikaWindow.level( But Defaults.observe(.appFloating) { change in
window.level = change.newValue == true ? .floating : .normal
}.tieToLifetime(of: self)Since 2. Stale comment vs. actual stroke math in if let borderView = border.contentView as? ShadowBorderView {
// Push the stroke ~1.5pt beyond the main frame edge so it lands on the visible
// glass edge, and match the window's rounded-corner radius.
borderView.strokeInset = borderPad
borderView.cornerRadius = 20
}
3. Minor: Notes
|
- Keep the companion border window's level in sync with the main window so toggling "float on top" while shadowless doesn't strand it on a stale level - Correct the stale stroke-inset comment (stroke sits on the frame edge) - Drop the unreachable typeLabels height threshold; type labels hide via the preview-pill overlap only Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
Thanks @claude — worked through all three findings (fixed in b1d3940):
|
|
Claude finished @superhighfives's task in 39s —— View job Verified fixes in b1d3940
All three findings are correctly addressed:
Nothing further to flag — this looks good to merge from a correctness standpoint (still no ability to build/run the app in this sandbox, so the on-screen stroke/corner-radius appearance is worth a final visual glance, but the logic and comments are now consistent). |
|
@claude Re-review the fixes. |
|
Claude finished @superhighfives's task in 1m 13s —— View job Re-reviewing the fixes from b1d3940
All three findings from the previous review are correctly and cleanly addressed in 1. Border window level staleness — 2. Stroke-inset comment — now reads "Sit the stroke on the main window's frame edge (which lines up with the visible glass edge)," which matches the actual 3. Unreachable No new issues found in this pass. As before, I don't have permission to run |
Closes #238.
Addresses both parts of the issue — the window shadow influencing colour readings, and the minimum window size being larger than necessary — plus a fair bit of related polish.
Window shadow
Adaptive sizing
AdaptiveValueText) — smooth on resize, no flicker, no truncation.Polish
AdaptiveDividerfor consistent section seams; near-matched drawer tint; removed the divider between the two swatches.Notes
🤖 Generated with Claude Code