Skip to content

Complete UI/UX & performance overhaul — cocoa brown theme (v2.1.0)#45

Merged
Daolyap merged 3 commits into
mainfrom
Fable/Overhaul
Jun 11, 2026
Merged

Complete UI/UX & performance overhaul — cocoa brown theme (v2.1.0)#45
Daolyap merged 3 commits into
mainfrom
Fable/Overhaul

Conversation

@Daolyap

@Daolyap Daolyap commented Jun 11, 2026

Copy link
Copy Markdown
Owner

Summary

Full visual and performance overhaul of every window, as requested.

UI/UX

  • New Themes/CocoaTheme.xaml — single source of truth: cocoa-brown palette (espresso surfaces + caramel accent), all control styles, and hand-drawn vector icon geometries. Replaces four copies of the per-window "glassmorphism" styles.
  • All windows (Main, Editor, Settings, History) share consistent professional chrome: custom title bar, proper caption buttons (minimize/maximize/close with vector glyphs, red close hover per Windows convention).
  • Every emoji glyph replaced with vector Path icons — emoji rendered inconsistently via font fallback and read as unpolished.
  • Region selector now behaves like a proper snipping tool: dimmed surround with the selection cut out, caramel outline, live W × H size badge, and an instruction hint.
  • Editor: zoom % indicator, keyboard tool shortcuts now move the active-tool highlight, themed text dialog with Enter/Esc support, caramel selection chrome.
  • Settings: capture-history controls (toggle, retention 0–500, clear with confirmation, open folder) and a View Logs button — closes Opus-Speaks sections C & D. Also fixed the default-file-format combo, which silently never saved (read SelectedItem as string when items are ComboBoxItems).
  • About dialog reads the assembly version instead of a hard-coded "2.0.0", and drops the "Incredible AI Slop" tagline.

Performance

  • Migrated all windows off AllowsTransparency to WindowChrome (Opus-Speaks section B). Layered windows are composed in software for the entire surface — this was the single biggest source of editor lag, and the region selector paid it across every monitor on every capture.
  • Removed every DropShadowEffect/BlurEffect (incl. a stray BlurEffect Radius=0) — WPF bitmap effects force per-element software rendering.
  • Pixelate tool rewrite: previously rendered the entire screenshot into a RenderTargetBitmap (~33 MB at 4K) and allocated a CroppedBitmap per 10-px block. Now copies only the covered region once and block-averages in a single buffer. Faster and a large RAM saving.
  • Frozen shared brushes; HighQuality bitmap scaling on the editor image to remove zoom-out shimmer artifacts.

Verification

  • dotnet build clean, dotnet test 95/95 passing.
  • Editor, Settings, and History windows rendered through an off-screen harness and visually inspected (cocoa theme, icons, layout all correct). MainWindow uses only theme keys proven by those windows (it can''t be harness-loaded because its constructor wires the tray icon + global hotkeys).
  • Manual on-Windows checklist still recommended before release for: region capture drag, pixelate visual parity, maximize behaviour of WindowChrome windows.

Notes

  • Version bumped to 2.1.0.
  • CLAUDE.md updated with the theme/rendering rules so the slow patterns don''t come back.
  • Known pre-existing issue (not addressed here, flagged for the audit branch): RegionSelector maps mouse DIPs to bitmap pixels 1:1, which is only correct at 100 % display scaling — the app manifest declares PerMonitorV2.

🤖 Generated with Claude Code

Daolyap and others added 2 commits June 11, 2026 20:20
UI/UX:
- New Themes/CocoaTheme.xaml: single source of truth for the palette,
  control styles, and vector icon geometries. All four windows
  (Main, Editor, Settings, History) now share consistent, professional
  chrome with a custom title bar and proper caption buttons.
- Emoji glyphs replaced with hand-drawn vector Path icons everywhere.
- Region selector gains snipping-tool UX: dimmed surround, caramel
  selection outline, live W x H size badge, and an instruction hint.
- Editor: zoom percentage indicator, keyboard tool shortcuts now move
  the active-tool highlight, themed text-label dialog with Enter/Esc.
- Settings: capture-history controls (toggle, retention, clear, open
  folder) and a View Logs button (Opus-Speaks C & D). Fixed the default
  file format combo silently never saving.
- About dialog reads the real assembly version instead of a hard-coded
  string.

Performance:
- All windows migrated off AllowsTransparency to WindowChrome
  (Opus-Speaks B). Layered windows forced software composition of the
  entire surface - the region selector paid this across every monitor
  on each capture.
- Removed every DropShadowEffect/BlurEffect (per-element software
  rendering).
- Pixelate tool no longer renders the full screenshot into a
  RenderTargetBitmap (~33 MB at 4K) with a CroppedBitmap per block;
  it now copies just the covered region once and block-averages in a
  single buffer.
- Frozen shared brushes for selection chrome; HighQuality bitmap
  scaling on the editor image to kill zoom-out shimmer artifacts.

Verified by rendering Editor/Settings/History windows through an
offscreen harness; service tests still pass (95/95).

Version bumped to 2.1.0.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Security:
- Auto-updater now targets the repository current name (Daolyap/Money-Shot).
  The old name only redirects until someone re-registers it, at which point
  they would own the update channel (repojacking).
- Optional GitHub token properly wired to MONEYSHOT_GITHUB_TOKEN (the 401
  guidance already referenced it; the read was a disabled empty-string stub).
- SaveService system-directory check compares with a trailing separator so
  C:\Windows blocks C:\Windows\... but not C:\WindowsBackup siblings.
- HistoryRetentionCount clamped to 0-500 during settings sanitization.

Bugs:
- Second app instance crashed on exit: OnExit called ReleaseMutex on the
  single-instance mutex it never owned (ApplicationException).
- Hotkey actions that throw no longer propagate out of the WndProc hook
  (process-fatal); they are caught and logged. Registration failures
  (combination owned by another app) are now logged instead of silent.
- Editor Save dialog now honours the configured default save folder and
  file format; previously both settings were ignored.
- IsPointInElement used hand-rolled NaN guards instead of CanvasPosition
  (forbidden by the resize/drag design rules).

Improvements:
- MemoryTrimmer service shared by both editor-close paths; opening a
  capture from History now gets the same working-set trim as the capture
  flow (previously left ~hundreds of MB resident).
- JPEG saves use QualityLevel 90 (default 75 smears screenshot text).
- Logger includes full exception + stack trace at Error level.
- Dead SetupToolbar() removed; App.xaml.cs unused usings dropped.
- 14 new regression tests (SaveService path validation, retention clamp);
  109/109 passing.

Audit follow-ups recorded in Opus-Speaks.md: region-selector DPI accuracy
at >100% scaling (E2), auto-update vs per-machine installs (E3).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Security & code audit — repojacking fix, crash fix, hardening
@Daolyap Daolyap merged commit 5246fa0 into main Jun 11, 2026
2 checks passed
@Daolyap Daolyap deleted the Fable/Overhaul branch June 11, 2026 22:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant