Extract canvas projection helpers and thin preview and node loading

This commit is contained in:
2026-06-16 18:16:04 +02:00
parent 1442c13dd7
commit 8906756d12
11 changed files with 565 additions and 341 deletions

View File

@@ -79,16 +79,16 @@ What is still carrying too much live ownership:
Current hotspot files:
- `src/canvas.cpp`: 2645 lines
- `src/canvas.cpp`: 2728 lines
- `src/app_layout.cpp`: 125 lines
- `src/canvas_modes.cpp`: 1798 lines
- `src/node.cpp`: 1594 lines
- `src/node.cpp`: 1465 lines
- `src/main.cpp`: 271 lines
- `src/node_panel_brush.cpp`: 1197 lines
- `src/node_stroke_preview.cpp`: 890 lines
- `src/node_panel_brush.cpp`: 1207 lines
- `src/node_stroke_preview.cpp`: 910 lines
- `src/node_canvas.cpp`: 852 lines
- `src/app.cpp`: 502 lines
- `src/app_dialogs.cpp`: 142 lines
- `src/app.cpp`: 575 lines
- `src/app_dialogs.cpp`: 168 lines
Current architecture mismatches that must be treated as real blockers:
@@ -240,10 +240,17 @@ Current architecture mismatches that must be treated as real blockers:
`src/node_stroke_preview.cpp`, while the immediate preview pass-sequencing
family inside `draw_stroke_immediate()` now also routes through
`NodeStrokePreview::execute_stroke_draw_immediate_pass_sequence(...)`, while
`Node` child attach/detach/reorder operations now route through named local
helpers in `src/node.cpp`, which makes the scene-graph mutation paths easier
to reason about without yet reducing the file or moving ownership into
`pp_ui_core`.
preview stroke preparation, dual-brush setup, and live pass-orchestration
request assembly now also route through retained preview execution helpers,
while `Node` child attach/detach/reorder operations now route through named
local helpers in `src/node.cpp`, and `Node::load_internal(...)` child XML
loading now also routes through `src/legacy_ui_node_loader.*`, which makes
the scene-graph mutation and child-instantiation paths easier to reason
about without yet reducing the file or moving ownership into `pp_ui_core`,
while `Canvas` point-trace/unproject/project/camera push-pop-get-set and
face-to-shape helpers now also route through
`src/legacy_canvas_projection_services.*` instead of staying inline in
`src/canvas.cpp`.
- Modern C++23 usage exists in extracted components, especially `std::span`,
explicit result/status objects, and a few concepts, but the live app still
does not consistently express ownership, thread affinity, or renderer

View File

@@ -91,7 +91,7 @@ Status: In Progress
Why now:
`src/canvas.cpp` is still the biggest single architectural blocker at about
2645 lines.
2728 lines.
Current slice:
- Canvas state-management helpers for picking, clear/clear-all, layer
@@ -103,6 +103,11 @@ Current slice:
`src/legacy_canvas_document_io_services.cpp` instead of staying inline in
`src/canvas.cpp`, which materially reduces document IO ownership in the live
render shell.
- Canvas point-trace, unproject, project2D, face-to-shape, and camera
push/pop/get/set helpers now also live in
`src/legacy_canvas_projection_services.*` instead of staying inline in
`src/canvas.cpp`, which trims another coherent non-UI state/query pocket
from the live canvas shell.
Write scope:
- `src/canvas.cpp`
@@ -158,6 +163,11 @@ Current slice:
`execute_stroke_draw_immediate_pass_sequence(...)` helper, which removes
another live orchestration block from the node even though worker/readback
flow still remains in the file.
- `NodeStrokePreview` stroke preparation, dual-brush setup, and live-pass
request assembly now also route through retained preview execution helpers,
which trims another coherent setup pocket from
`src/node_stroke_preview.cpp` even though worker/readback ownership and
broader preview flow still remain inline.
- `NodeCanvas` merged-path per-plane merged-texture draw execution now also
routes through `execute_legacy_canvas_draw_merge_layer_texture(...)`.
- `NodeCanvas` merged-path and non-blend checkerboard background setup now also
@@ -390,7 +400,7 @@ Status: In Progress
Why now:
`src/app_dialogs.cpp` still mixes document workflow decisions, export routing,
dialog construction, and overlay ownership.
dialog construction, and overlay ownership in one 168-line shell.
Current slice:
- Informational overlay opener paths for user manual, changelog, about,
@@ -439,7 +449,7 @@ Status: In Progress
Why now:
`src/app.cpp` still carries startup, frame flow, queue draining, recording,
and composition logic in one 502-line file.
and composition logic in one 575-line file.
Current slice:
- UI observer math now routes through `src/legacy_app_frame_services.cpp`
@@ -651,12 +661,19 @@ attached to it.
#### ARC-UI-001 - Move Generic Node And Control Code Out Of `pp_legacy_ui_core`
Status: Ready
Status: In Progress
Why now:
`pp_ui_core` has layout, color, node lifetime, and overlay lifetime, but the
generic widget layer still sits in `pp_legacy_ui_core`.
Current slice:
- `Node::load_internal(...)` child XML loading now routes through
`src/legacy_ui_node_loader.*` instead of staying inline in `src/node.cpp`.
That trims another coherent generic node-instantiation pocket and makes the
remaining scene-graph load path easier to isolate, even though ownership has
not yet moved into `pp_ui_core`.
Write scope:
- `src/node.cpp`
- `src/layout.cpp`