10 KiB
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.0is 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.0makes tabs feel cramped. fill_tab_bar = truemeans 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 customPlainSlider. - 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::Buttondefault 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_spacingis(4, 4)globally but panel content overrides it locally to(1, 1),(2, 2),(3, 3),(4, 4)at different places.inner_marginvaries: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_elevatedtoken for popups/tooltips:(55,55,60). - Add a
bg_recessedtoken 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_buttonto 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
fxtext 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::PointingHandfor buttons.
- Reduce
spacing.slider_widthfrom 180 to 140. - Reduce
spacing.button_paddingfrom(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 = falseso tabs don't stretch to fill width. - Increase tab bar height from
28.0to30.0. - Tab text size: 11.5px (consistent).
Task 6: Improve Layer Panel Layout
Files: panels.rs (show_layers)
- Increase layer row height:
item_spacing.yfrom 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_buttoncalls with styled icon buttons. - Add 1px separator between layer groups.
Task 7: Improve Status Bar
Files: panels.rs (show_status_bar)
- Replace egui default
SliderwithPlainSliderfor 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_lowcolor). - 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_spacingwhere possible.
Task 11: Improve Brushes Panel
Files: brushes_panel.rs
- Replace
🔍emoji with SVG search icon. - Replace
✏ Edit Brushwith SVG edit icon + text. - Category pills: increase rounding to 14px, add 1px border on hover.
Execution Order
- Task 1 (theme colors) — foundation, everything else depends on it
- Task 4 (egui visuals) — global widget styling
- Task 5 (tab styling) — immediate visual impact
- Task 2 + 3 (SVG icons) — replace emoji everywhere
- Task 8 (toolbar layout) — biggest visible change
- Task 6 (layer panel) — second biggest visible area
- Task 7 (status bar)
- Task 9 (color swatches)
- Task 10 (spacing grid)
- Task 11 (brushes panel)
Validation
After each task:
cargo build -p hcie-gui-egui— must compile clean.- Launch app, press F12 for full viewport screenshot.
- Compare against previous screenshot.
- 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.