# Vector Tool Migration — Scoring & Implementation Plan ## All Vector Tool Features — Current ICED Score (0-10) | # | Feature | egui | ICED | Gap | |---|---------|------|------|-----| | 1 | Shape creation (15 types) via drag | 10 | 8 | Previews for 11 shapes are bounding-box fallback | | 2 | Auto-vector-layer creation | 10 | 10 | None | | 3 | VectorSelect click-to-select | 10 | 0 | **MISSING** | | 4 | VectorEditHandle hit-testing | 10 | 0 | **MISSING** | | 5 | Shape drag-move via handles | 10 | 0 | **MISSING** | | 6 | Shape resize via handles | 10 | 0 | **MISSING** | | 7 | Shape rotation via handle | 10 | 0 | **MISSING** | | 8 | Shape cycling (overlapping) | 10 | 0 | **MISSING** | | 9 | Geometry panel: shape list | 10 | 2 | Hardcoded `&[]`, no selection | | 10 | Geometry panel: shape selection | 10 | 0 | **MISSING** | | 11 | Geometry panel: X1/Y1/X2/Y2 bounds | 10 | 0 | **MISSING** | | 12 | Geometry panel: fill toggle | 10 | 0 | **MISSING** | | 13 | Geometry panel: fill color picker | 10 | 0 | **MISSING** | | 14 | Geometry panel: stroke color picker | 10 | 0 | **MISSING** | | 15 | Geometry panel: opacity slider | 10 | 0 | **MISSING** | | 16 | Geometry panel: hardness slider | 10 | 0 | **MISSING** | | 17 | Geometry panel: line cap controls | 10 | 0 | **MISSING** | | 18 | Geometry panel: boolean operations | 10 | 0 | **MISSING** | | 19 | Shape Apply/Cancel overlay | 10 | 0 | **MISSING** | | 20 | Shape Flip H/V | 10 | 0 | **MISSING** | | 21 | shape_sync bidirectional sync | 10 | 0 | **MISSING** | | 22 | Shape deletion | 10 | 0 | **MISSING** | | 23 | Accurate previews (Arrow, etc.) | 10 | 3 | 11 shapes use bounding-box fallback | | 24 | Tool settings panel (stroke, fill, etc.) | 10 | 7 | Missing hardness, line cap | | 25 | Shape-specific preview (Star, Polygon) | 10 | 6 | Only 4 shapes have accurate preview | **Overall ICED Score: ~2.5/10** — Shape creation works but selection/editing is completely missing. --- ## Implementation Phases ### Phase A: VectorSelect Core (Features 3-8, 21-22) — Score Target: 8/10 **Sub-goal A1: VectorSelect state and click-to-select** - Add `selected_vector_shape: Option` to app state - Add `vector_shapes_snapshot: Option>` for undo - Add `vector_edit_handle: VectorEditHandle` state - Add `vector_drag_last: Option<(f32, f32)>` tracking - Implement `VectorSelect` click handling in canvas - Call `engine.find_vector_shape_at()` for hit-testing - Support overlapping shape cycling **Sub-goal A2: VectorEditHandle rendering on canvas** - Render 8 resize handles (white squares with black stroke) - Render rotation handle (blue circle above top-center) - Render selection outline (blue stroke around shape) - Hit-test handles on click **Sub-goal A3: Shape drag/resize/rotate via handles** - Move: drag shape body → `engine.modify_vector_shape()` - Resize: drag corner/edge handles → `engine.modify_vector_shape()` - Rotate: drag rotation handle → `engine.set_vector_shape_angle()` **Sub-goal A4: Apply/Cancel overlay** - Show Apply (checkmark) and Cancel (X) buttons when shape is selected - Apply: commit changes, clear snapshot, deselect - Cancel: restore snapshot, deselect - Flip H/V buttons for applicable shapes **Sub-goal A5: Shape deletion** - Delete key or X button in geometry panel - `engine.delete_vector_shape()` or equivalent --- ### Phase B: Geometry Panel (Features 9-18) — Score Target: 8/10 **Sub-goal B1: Shape list with selection** - Render all shapes in active vector layer - Click to select/deselect - Delete button per shape **Sub-goal B2: Bounds editing (X1/Y1/X2/Y2)** - 4 sliders for shape bounds - `engine.set_vector_shape_bounds()` on change **Sub-goal B3: Fill toggle + fill color** - Checkbox for fill on/off - Color picker for fill color - `engine.set_vector_shape_fill()` and `set_vector_shape_fill_color()` **Sub-goal B4: Stroke color picker** - Color picker for stroke color - `engine.set_vector_shape_color()` **Sub-goal B5: Opacity and Hardness sliders** - Slider for opacity (0-1) - Slider for hardness (0-1) - `engine.set_vector_shape_opacity()` and `set_vector_shape_hardness()` **Sub-goal B6: Line cap controls** - Start/End cap combo boxes (for Line shapes) - `engine.set_vector_shape_line_caps()` **Sub-goal B7: Boolean operations** - Shape A/B selectors - Union/Intersect/Subtract/Xor buttons - `engine.boolean_vector_shapes()` --- ### Phase C: Shape Sync & Polish (Features 21, 23-25) — Score Target: 9/10 **Sub-goal C1: shape_sync bidirectional sync** - `sync_shape_from_tool()`: push tool state to selected shape - `sync_tool_from_shape()`: pull shape properties to tool state **Sub-goal C2: Accurate previews for all 15 shapes** - Arrow, Rhombus, Cylinder, Heart, Bubble, Gear, Cross, Crescent, Bolt, Arrow4 - FreePath preview **Sub-goal C3: Tool settings panel completion** - Add hardness slider - Add line cap controls --- ## Execution Order 1. **A1** → A2 → A3 → A4 → A5 (VectorSelect core) 2. **B1** → B2 → B3 → B4 → B5 → B6 → B7 (Geometry panel) 3. **C1** → C2 → C3 (Sync & polish) ## Recheck Points After each phase, recheck scores: - After Phase A: VectorSelect features should be 8/10 - After Phase B: Geometry panel features should be 8/10 - After Phase C: All vector features should be 9/10