Files
hcie-rust-v3.05/.kilo/plans/1783261806870-gui-photoshop-aesthetic-overhaul.md
T

246 lines
10 KiB
Markdown
Raw Normal View History

2026-07-09 02:59:53 +03:00
# Photoshop-Grade GUI Aesthetic Overhaul
## Problem
The current GUI uses emoji icons, inconsistent spacing, flat color tokens with poor contrast
hierarchy, and egui's default widget styling in many places. The result looks like a
prototype, not a professional image editor. The goal is Photoshop-level polish:
refined warm-dark palette, consistent SVG iconography, subtle depth cues, proper typography,
and disciplined spacing.
## Root Causes Identified
### 1. Emoji Icons Everywhere (HIGH IMPACT)
| Location | File:Line | Emoji Used | Problem |
|---|---|---|---|
| Toolbar buttons | `panels.rs:413-470` | `📄 📂 💾 ↩ ↪ 🔍+ 🔍- ☀ 🌙` | Looks amateurish on desktop |
| Layer visibility | `panels.rs:879-882` | `👁` | Cross-platform rendering inconsistency |
| Layer lock | `panels.rs:799` | `🔒` | Same |
| Layer group folder | `panels.rs:914` | `📁` | Same |
| Layer link/chain | `panels.rs:47` | `🔗 🔓` | Same |
| Toolbox toggle | `toolbox.rs:211` | `<<` `>>` text | Not a real icon |
| Layer move/delete | `panels.rs:933-946` | `× ▲ ▼ M↓` text | Plain text buttons |
| Layer FX badge | `panels.rs:951-952` | `fx` / `fx*` text | Text badge, not icon |
| Toolbox swap icon | `toolbox.rs:286` | `⇄` | Unicode character, not icon |
| Panel list toggle | `panels.rs:212` | `◧ ☰` | Unicode characters |
| Search box icon | `brushes_panel.rs:818` | `🔍` | Emoji |
### 2. Theme Color Palette — Flat Grays, No Warmth (HIGH IMPACT)
File: `egui-panel-adapter/src/theme.rs:79-91`
The Photoshop preset uses pure neutral grays `(30,30,30)`, `(45,45,45)`, `(60,60,60)`. Real
Photoshop's dark theme uses slightly warm-tinted grays with more contrast depth between
workspace, panels, and elevated surfaces. The current palette has:
- **bg_app to bg_panel delta is only 15** (30→45). Real Photoshop has ~20-25 step.
- **No surface elevation system** — everything is the same flat gray. Missing:
elevated panels, recessed tracks, inset controls.
- **accent blue is generic** `(59,130,246)` — Photoshop uses a more muted steel-blue.
### 3. Toolbar Styling (MEDIUM IMPACT)
File: `panels.rs:337-390` (`draw_modern_toolbar_button`)
- Uses emoji+text labels (`"📄 New"`) instead of icon-only buttons.
- 34px toolbar height is cramped.
- No icon-only compact mode; every button has text.
- Separators between groups are just `ui.separator()` — no visual grouping.
### 4. Layer Panel Visual Noise (MEDIUM IMPACT)
File: `panels.rs:728-960`
- Row height is too tight (`3px item_spacing.y`).
- Emoji icons for visibility/lock create inconsistent rendering.
- `small_button("×")`, `small_button("▲")` etc. use egui's default styling.
- Active layer highlight uses `accent.gamma_multiply(0.2)` which is too subtle.
- Thumbnail is only 22×16px — too small.
- Blend mode ComboBox uses egui default styling.
### 5. egui Default Widget Styling Leaks (MEDIUM IMPACT)
File: `mod.rs:166-223` (`apply_theme`)
- `Visuals::dark()` is called first, then overridden. This leaves many
sub-properties at dark() defaults that clash with the custom palette.
- Scrollbar styling, popup shadows, and tooltip styling are inherited defaults.
- ComboBox, DragValue, Checkbox all use egui's built-in rendering which
looks generic.
- `spacing.slider_width = 180.0` is too wide for panel toolbars.
### 6. Tab & Header Styling (MEDIUM IMPACT)
File: `mod.rs:3008-3040` (egui_dock style)
- Tab corner radius `{ nw: 3, ne: 3, sw: 0, se: 0 }` is correct but the
active tab has no bottom accent line indicator.
- Tab spacing `0.0` makes tabs feel cramped.
- `fill_tab_bar = true` means inactive tabs fill the entire bar width,
looking blocky.
### 7. Status Bar Styling (LOW-MEDIUM IMPACT)
File: `panels.rs:502-653`
- Minimized-panel icon buttons use accent-colored 28×28 squares.
- Zoom slider uses egui default `Slider` — not the custom `PlainSlider`.
- Mixed font sizes (10px, 11px, 12px) create visual noise.
- Canvas size label and zoom percentage compete for attention.
### 8. Brushes Panel (LOW IMPACT)
File: `brushes_panel.rs:790-890`
- Category pills are fine but use `egui::Button` default frame.
- "✏ Edit Brush" button uses emoji.
- Search box uses emoji `🔍`.
### 9. Color Swatch Widget (LOW IMPACT)
File: `toolbox.rs:239-331`
- Overlapping foreground/background swatches are custom-painted with
zero rounding and basic 1px borders — looks flat.
- Swap icon is Unicode `⇄`, default icon is plain black/white squares.
### 10. Spacing Inconsistencies (LOW IMPACT)
- `item_spacing` is `(4, 4)` globally but panel content overrides it locally
to `(1, 1)`, `(2, 2)`, `(3, 3)`, `(4, 4)` at different places.
- `inner_margin` varies: `Margin::symmetric(4, 4)` toolbar, `Margin::symmetric(0, 0)` menubar,
`Margin::symmetric(2, 3)` layer rows, `Margin::symmetric(8, 6)` brush search.
- No consistent 4px or 8px grid.
## Fix Plan
### Task 1: Refine Photoshop Theme Colors
**Files:** `egui-panel-adapter/src/theme.rs`
- Warm the grays slightly: add +2 red, +1 green to each dark step to get
Photoshop's characteristic warm-dark look.
- Increase bg_app→bg_panel contrast: `bg_app: (28,28,30)``bg_panel: (50,50,54)`.
- Add a `bg_elevated` token for popups/tooltips: `(55,55,60)`.
- Add a `bg_recessed` token for slider tracks/insets: `(18,18,20)`.
- Mute the accent: `(59,130,246)``(56,120,220)` (slightly less saturated).
- Tighten `border_high`: `(70,70,70)``(62,62,66)` for subtler borders.
### Task 2: Replace Emoji with SVG Icons in Toolbar
**Files:** `panels.rs`, `assets/icons/`
- Create or reuse SVG icons for: New, Open, Save, Undo, Redo, ZoomIn, ZoomOut, Light/Dark.
- Modify `draw_modern_toolbar_button` to accept an optional icon source.
- Change button style to icon-only (24×24) with tooltip on hover.
- Keep text label in tooltip only.
### Task 3: Replace Emoji with SVG Icons in Layer Panel
**Files:** `panels.rs`, toolbox/assets
- Replace `👁` with an SVG eye icon.
- Replace `🔒` with an SVG lock icon.
- Replace `📁` with an SVG folder icon.
- Replace `🔗 🔓` with SVG chain/unlink icons.
- Replace `× ▲ ▼` with SVG close/up/down icons.
- Replace `fx` text badge with an SVG FX icon (or styled text with proper font).
### Task 4: Improve egui Visuals Configuration
**Files:** `mod.rs` (`apply_theme`)
- After `Visuals::dark()`, explicitly set:
- `visuals.popup_shadow` — subtle shadow for depth.
- `visuals.window_rounding``CornerRadius::same(6)`.
- `visuals.menu_rounding``CornerRadius::same(6)`.
- `visuals.scrollbar` — narrower (8px), recessed track.
- `visuals.slider_trailing_fill` — true.
- `visuals.handle_shape``HandleShape::Rect { aspect_ratio: 0.5 }`.
- `visuals.interact_cursor``CursorIcon::PointingHand` for buttons.
- Reduce `spacing.slider_width` from 180 to 140.
- Reduce `spacing.button_padding` from `(8, 4)` to `(6, 3)` for compactness.
### Task 5: Improve Tab & Header Styling
**Files:** `mod.rs` (egui_dock style section)
- Add 2px bottom accent line on active tab.
- Increase tab spacing to `2.0`.
- Set `fill_tab_bar = false` so tabs don't stretch to fill width.
- Increase tab bar height from `28.0` to `30.0`.
- Tab text size: 11.5px (consistent).
### Task 6: Improve Layer Panel Layout
**Files:** `panels.rs` (`show_layers`)
- Increase layer row height: `item_spacing.y` from 3 to 4.
- Increase thumbnail size from 22×16 to 32×24.
- Use 6px rounded corners on layer row frames.
- Stronger active layer accent: `gamma_multiply(0.2)``gamma_multiply(0.3)`.
- Replace `small_button` calls with styled icon buttons.
- Add 1px separator between layer groups.
### Task 7: Improve Status Bar
**Files:** `panels.rs` (`show_status_bar`)
- Replace egui default `Slider` with `PlainSlider` for zoom.
- Standardize font size to 11px.
- Make minimized-panel icon buttons 24×24 (from 28×28).
- Remove redundant "Active Tool:" prefix — just show the tool name.
### Task 8: Improve Toolbar Layout
**Files:** `panels.rs` (`show_unified_toolbar`)
- Increase toolbar height from 34 to 36.
- Replace emoji toolbar buttons with icon-only SVG buttons (24×24).
- Add subtle group separators (2px vertical line, `border_low` color).
- Right-align theme toggle and AI status.
### Task 9: Improve Color Swatch Widget
**Files:** `toolbox.rs` (`render_overlapping_swatches`)
- Add 3px rounding to foreground/background swatch rects.
- Use SVG swap icon instead of `⇄` text.
- Use SVG default-color icon instead of plain black/white squares.
- Add 1px shadow on foreground swatch for depth.
### Task 10: Standardize Spacing Grid
**Files:** Multiple (panels.rs, toolbox.rs, brushes_panel.rs, mod.rs)
- Adopt an 8px base grid: all margins and padding are multiples of 4px.
- Panel content `inner_margin`: 8px horizontal, 6px vertical.
- Panel header: 4px padding.
- Widget gaps: 4px.
- Remove local overrides of `item_spacing` where possible.
### Task 11: Improve Brushes Panel
**Files:** `brushes_panel.rs`
- Replace `🔍` emoji with SVG search icon.
- Replace `✏ Edit Brush` with SVG edit icon + text.
- Category pills: increase rounding to 14px, add 1px border on hover.
## Execution Order
1. **Task 1** (theme colors) — foundation, everything else depends on it
2. **Task 4** (egui visuals) — global widget styling
3. **Task 5** (tab styling) — immediate visual impact
4. **Task 2 + 3** (SVG icons) — replace emoji everywhere
5. **Task 8** (toolbar layout) — biggest visible change
6. **Task 6** (layer panel) — second biggest visible area
7. **Task 7** (status bar)
8. **Task 9** (color swatches)
9. **Task 10** (spacing grid)
10. **Task 11** (brushes panel)
## Validation
After each task:
1. `cargo build -p hcie-gui-egui` — must compile clean.
2. Launch app, press F12 for full viewport screenshot.
3. Compare against previous screenshot.
4. Check all 5 themes (Photoshop, ProDark, Amoled, PhotoshopLight, ProLight).
Final validation:
- `cargo run -p hcie-gui-egui -- --screenshot-panel "Tools"` — verify toolbox.
- `cargo run -p hcie-gui-egui -- --screenshot-panel "Layers"` — verify layers.
- `cargo run -p hcie-gui-egui -- --screenshot-panel "Color Palette"` — verify colors.
- Visual inspection: no emoji visible in any panel, consistent icon style.