# Plan: Full egui → Iced Feature Port ## Scope Port ALL egui GUI features to Iced. The egui GUI has: - 11 dockable panels + document tabs - 4 external panel crates (filters, AI chat, script, AI script) - 14 modal dialogs - 10 top-level menus - 20 toolbox slots (30+ tools) - Brush panel (30+ styles, 3 view modes) - Color panel (HSL wheel, HSV square, palettes) - Brush editor (4 tabs, live preview) - Shell infrastructure (viewer, tablet, clipboard, themes) - ~60 unique features total --- ## Phase 1: Fix Critical Bugs + Working Canvas (MUST DO FIRST) **Files:** `app.rs`, `canvas/mod.rs` ### 1.1 Fix `ButtonPressed` → dispatch `CanvasPointerPressed` - Add `last_cursor_pos: Option<(f32, f32)>` to `HcieIcedApp` - Track cursor position in `CursorMoved` handler - `ButtonPressed` dispatches `CanvasPointerPressed` using tracked position ### 1.2 Call `refresh_composite()` after every stroke - After `CanvasPointerMoved` and `CanvasPointerReleased`, call `canvas::render::refresh_composite()` ### 1.3 Fix coordinate mapping with `mouse_area` - Wrap canvas with `iced::widget::mouse_area` - `on_press`, `on_move`, `on_scroll` provide widget-relative coords - Simplify `screen_to_canvas` to just divide by zoom ### 1.4 Request repaint after state changes - Return `iced::Task::perform(async {}, |_| Message::CompositeRefresh)` from drawing messages ### 1.5 Remove global subscription - Remove `iced::event::listen_with` - All events come from `mouse_area` on canvas --- ## Phase 2: Core Panels ### 2.1 Layers Panel **File:** New `panels/layers.rs` - Layer list with visibility toggle, opacity slider, blend mode selector - Active layer highlighting - Lock toggle - Add/delete/merge down/flatten buttons - Hierarchical group fold/collapse - Reorder (move up/down buttons) - Uses `engine.layer_infos()`, `engine.set_layer_visible()`, `engine.set_layer_opacity()`, `engine.set_layer_blend_mode()`, etc. ### 2.2 History Panel **File:** New `panels/history.rs` - Undo/redo timeline list - Jump-to-history-index on click - Shows `engine.history_description(idx)` for each entry - Current position highlighting ### 2.3 Properties Panel **File:** New `panels/properties.rs` - Dynamic properties based on active tool - Text tool: font, size, color, alignment - Vector shapes: position, size, rotation, fill/stroke - Brush: size, opacity, hardness ### 2.4 Brushes & Tips Panel **File:** New `panels/brushes.rs` - Brush preset browser with categories - Grid/list/card view modes - Brush style selection (30+ styles) - Size/opacity/hardness sliders - Rendered stroke preview - Custom preset save/load - Uses `engine.set_brush_tip()`, `engine.set_color()`, etc. ### 2.5 Color Palette Panel **File:** New `panels/color_panel.rs` - HSV saturation/value square - Hue slider - RGB sliders with numeric inputs - Hex input - Palette grid (saved swatches) - Recent colors ### 2.6 Toolbar (Top) **File:** New `panels/toolbar.rs` - New/Open/Save buttons - Undo/Redo buttons - Zoom in/out/reset - Active tool mode + size/opacity sliders - Theme toggle ### 2.7 Status Bar (Bottom) **File:** New `panels/status_bar.rs` - Active tool name - Canvas coordinates - Zoom slider (logarithmic) - Canvas dimensions --- ## Phase 3: Tool-Specific Panels ### 3.1 Text Editor Panel **File:** New `panels/text_editor.rs` - Font selector, size, color - Alignment (left/center/right/justify) - Orientation (horizontal/vertical) - Text effects (rotation, warp, extrude) - Accept/Cancel buttons ### 3.2 Vector Geometry Panel **File:** New `panels/geometry.rs` - List vector shapes on active layer - Per-shape: position, size, rotation, fill, stroke, line cap - Boolean operations between shapes ### 3.3 Layer Styles Panel **File:** New `panels/layer_styles.rs` - 10 style types with toggles - Drop shadow, inner shadow, outer/inner glow - Bevel/emboss, satin, color/gradient/pattern overlay, stroke - Per-style parameter sliders and color pickers ### 3.4 Layer Details Panel **File:** New `panels/layer_details.rs` - Layer ID, name, fill opacity - Clipping mask toggle - Adjustment type display - Effects list --- ## Phase 4: Filter System ### 4.1 Filters Panel (ported from `egui-panel-filters`) **File:** New `panels/filters.rs` - Category tree (Blur, Sharpen, Pixelate, Distort, Stylize, Color & Light, Restore, Noise & Pattern, Procedural Textures) - Filter selection with bullet indicators - Dynamic parameter panel via `iced-panel-adapter` - Apply/Reset buttons - Instant preview for applicable filters ### 4.2 Filter Dialogs **File:** New `dialogs/filters.rs` - Parameter dialogs for each filter category - Uses `ModulePanel` + `render_module_panel()` from iced-panel-adapter --- ## Phase 5: Menus ### 5.1 Menu Bar **File:** New `panels/menus.rs` - File: New, Open, Save, Save As, Import, Export, Close, Exit - Edit: Undo, Redo, Cut, Copy, Paste, Fill, Free Transform, Preferences - Tools: All tool shortcuts - Image: Adjustments, Image Size, Canvas Size, Rotation, Flip - Layer: New, Delete, Merge Down, Flatten, Styles, Align - Filter: All filter categories with submenus - Select: All, Deselect, Invert, Grow, Shrink, Feather - View: Zoom, Reset Pan, Panels submenu, Theme submenu - Window: Documents list, Dock Layout - Help: About --- ## Phase 6: Dialogs ### 6.1 New Image Dialog ### 6.2 Adjustments Dialog (Brightness/Contrast, HSL) ### 6.3 Close Confirm Dialog ### 6.4 Selection Operation Dialog ### 6.5 Settings/Preferences Dialog ### 6.6 Expand Canvas Dialog --- ## Phase 7: External Panel Crates ### 7.1 iced-panel-filters (port from egui-panel-filters) - All 35+ filter definitions - Parameter panels via iced-panel-adapter - Instant preview integration ### 7.2 iced-panel-ai-chat (port from egui-panel-ai-chat) - Streaming chat UI - LLM connectivity (Ollama, OpenAI) - Tool calling (execute on canvas) - DSL script execution ### 7.3 iced-panel-script (port from egui-panel-script) - Script editor with line numbers - DSL parser and executor - Command reference ### 7.4 iced-panel-ai-script (port from egui-panel-ai-script) - AI-assisted script generation - Multiple LLM providers --- ## Phase 8: Infrastructure ### 8.1 Tablet/Stylus Input - Pen pressure via evdev or winit events - Map pressure to stroke_to() ### 8.2 Clipboard - Copy/paste images via arboard - PNG clipboard support ### 8.3 File I/O - Open/Save/Import/Export - Recent files list - Format support (PNG, JPG, WebP, PSD, KRA, HCIE native) ### 8.4 Themes - 5 theme presets - Theme switching at runtime ### 8.5 Multi-Document Tabs - Tab bar for multiple open documents - Tab switching --- ## Phase 9: Dock Layout ### 9.1 Pane Grid Layout - Use iced's `PaneGrid` for dockable panels - Panel drag-and-drop - Panel resize - Layout save/load --- ## Verification After each phase: 1. `cargo build -p hcie-iced-gui` — compiles 2. `cargo run -p hcie-iced-gui` — visual verification 3. `cargo build -p hcie-gui-egui` — no regression