Plan canvas toolbar bindings

This commit is contained in:
2026-06-05 07:52:58 +02:00
parent 062fdaa982
commit 5def47cdcc
8 changed files with 241 additions and 97 deletions

View File

@@ -611,6 +611,12 @@ camera, grid, copy, cut, fill, mask, flood-fill, pick, and touch-lock toolbar
commands. Canvas tool execution now dispatches through `CanvasToolServices`
in `src/legacy_canvas_tool_services.*` before legacy toolbar selection, `Canvas`
mode, pen picking, touch-lock, and transform state adapters continue.
`pano_cli plan-canvas-tool-toolbar` now exposes the full draw-toolbar binding
set, including button ids, select/toggle actions, button-class expectation, and
the default draw-mode initialization. Live `App::init_toolbar_draw` consumes the
same app-core toolbar plan to install handlers and apply the initial draw tool
while retained `NodeButton`/`NodeButtonCustom` lookup and legacy canvas-tool
execution remain under `DEBT-0027`.
`pano_cli plan-canvas-tool-state` exposes the matching toolbar active-state
refresh used by `App::update` before legacy `Canvas` mode state remains the
source of truth. `NodeCanvas` stylus eraser mode switching consumes the same
@@ -1911,8 +1917,9 @@ Results:
grid/heightmap/lightmap planning as JSON automation.
- `pp_app_core_canvas_tool_ui_tests` passed, covering toolbar mode selection,
copy/cut transform action planning, pick no-op outside draw mode, and
touch-lock toggling, plus toolbar active-state derivation for draw, copy, and
bucket modes, service dispatch ordering, pick no-op execution, and malformed
touch-lock toggling, full draw-toolbar binding projection, binding-to-action
conversion, plus toolbar active-state derivation for draw, copy, and bucket
modes, service dispatch ordering, pick no-op execution, and malformed
execution payload rejection.
- `pp_app_core_canvas_hotkey_tests` passed, covering E draw/erase toggles,
Ctrl+Z/Ctrl+Shift+Z history planning, Ctrl+S/Ctrl+Shift+S document save
@@ -1931,10 +1938,20 @@ Results:
`pano_cli_plan_canvas_tool_touch_lock_smoke`, and
`pano_cli_plan_canvas_tool_rejects_unknown` passed and expose live draw
toolbar planning as JSON automation.
- `pano_cli_plan_canvas_tool_toolbar_smoke` and
`pano_cli_plan_canvas_tool_toolbar_rejects_unknown` passed and expose the
full live draw-toolbar binding set as JSON automation.
- `pano_cli_plan_canvas_tool_state_draw_smoke`,
`pano_cli_plan_canvas_tool_state_copy_smoke`, and
`pano_cli_plan_canvas_tool_state_rejects_unknown` passed and expose draw
toolbar active-state refresh as JSON automation.
- `PanoPainter`, `pano_cli`, and `pp_app_core_canvas_tool_ui_tests` built on
Windows after `App::init_toolbar_draw()` moved to the app-core toolbar
binding plan; the build required the documented clean after a stale
debug-info `LNK1103`.
- Android arm64 headless `pp_app_core`, `pano_cli`, and
`pp_app_core_canvas_tool_ui_tests` built after the same toolbar binding
planner change.
- `pp_app_core_document_canvas_tests` passed, covering clear-current-layer
undo/dirty intent, no-canvas no-op behavior, and invalid clear color
rejection, service dispatch color forwarding, no-op execution preservation,