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

@@ -1894,6 +1894,19 @@ if(TARGET pano_cli)
LABELS "app;ui;integration;desktop-fast;fuzz"
WILL_FAIL TRUE)
add_test(NAME pano_cli_plan_canvas_tool_toolbar_smoke
COMMAND pano_cli plan-canvas-tool-toolbar)
set_tests_properties(pano_cli_plan_canvas_tool_toolbar_smoke PROPERTIES
LABELS "app;ui;integration;desktop-fast"
PASS_REGULAR_EXPRESSION "\"command\":\"plan-canvas-tool-toolbar\".*\"defaultMode\":\"draw\".*\"bindingCount\":13.*\"id\":\"btn-pen\".*\"defaultOnInit\":true.*\"id\":\"btn-pick\".*\"action\":\"toggle-picking\".*\"id\":\"btn-bucket\".*\"mode\":\"bucket\"")
add_test(NAME pano_cli_plan_canvas_tool_toolbar_rejects_unknown
COMMAND pano_cli plan-canvas-tool-toolbar --unexpected)
set_tests_properties(pano_cli_plan_canvas_tool_toolbar_rejects_unknown PROPERTIES
LABELS "app;ui;integration;desktop-fast;fuzz"
WILL_FAIL TRUE
PASS_REGULAR_EXPRESSION "\"command\":\"plan-canvas-tool-toolbar\".*\"message\":\"unknown option\"")
add_test(NAME pano_cli_plan_canvas_tool_state_draw_smoke
COMMAND pano_cli plan-canvas-tool-state --mode draw --picking --touch-lock)
set_tests_properties(pano_cli_plan_canvas_tool_state_draw_smoke PROPERTIES

View File

@@ -98,6 +98,47 @@ void pick_and_touch_lock_toggle_state(pp::tests::Harness& harness)
PP_EXPECT(harness, !touch_lock.no_op);
}
void toolbar_plan_exposes_full_legacy_button_set(pp::tests::Harness& harness)
{
const auto toolbar = pp::app::plan_canvas_tool_toolbar();
PP_EXPECT(harness, toolbar.bindings.size() == 13);
PP_EXPECT(harness, toolbar.default_mode == pp::app::CanvasToolMode::draw);
PP_EXPECT(harness, toolbar.bindings[0].button_id == "btn-pen");
PP_EXPECT(harness, toolbar.bindings[0].mode == pp::app::CanvasToolMode::draw);
PP_EXPECT(harness, toolbar.bindings[0].applies_default_on_init);
PP_EXPECT(harness, toolbar.bindings[1].button_id == "btn-pick");
PP_EXPECT(harness, toolbar.bindings[1].action == pp::app::CanvasToolToolbarAction::toggle_picking);
PP_EXPECT(harness, toolbar.bindings[2].button_id == "btn-touchlock");
PP_EXPECT(harness, toolbar.bindings[2].action == pp::app::CanvasToolToolbarAction::toggle_touch_lock);
PP_EXPECT(harness, toolbar.bindings[5].button_id == "btn-cam");
PP_EXPECT(harness, !toolbar.bindings[5].custom_button);
PP_EXPECT(harness, toolbar.bindings[12].button_id == "btn-bucket");
PP_EXPECT(harness, toolbar.bindings[12].mode == pp::app::CanvasToolMode::flood_fill);
}
void toolbar_binding_actions_match_canvas_tool_plans(pp::tests::Harness& harness)
{
const auto toolbar = pp::app::plan_canvas_tool_toolbar();
const auto draw = pp::app::plan_canvas_tool_toolbar_binding_action(toolbar.bindings[0], true);
const auto pick_from_draw = pp::app::plan_canvas_tool_toolbar_binding_action(toolbar.bindings[1], true);
const auto pick_from_camera = pp::app::plan_canvas_tool_toolbar_binding_action(toolbar.bindings[1], false);
const auto touch_lock = pp::app::plan_canvas_tool_toolbar_binding_action(toolbar.bindings[2], false);
const auto copy = pp::app::plan_canvas_tool_toolbar_binding_action(toolbar.bindings[7], false);
const auto cut = pp::app::plan_canvas_tool_toolbar_binding_action(toolbar.bindings[8], false);
PP_EXPECT(harness, draw.operation == pp::app::CanvasToolOperation::select_mode);
PP_EXPECT(harness, draw.mode == pp::app::CanvasToolMode::draw);
PP_EXPECT(harness, pick_from_draw.operation == pp::app::CanvasToolOperation::toggle_picking);
PP_EXPECT(harness, pick_from_draw.toggles_picking);
PP_EXPECT(harness, !pick_from_draw.no_op);
PP_EXPECT(harness, pick_from_camera.no_op);
PP_EXPECT(harness, !pick_from_camera.toggles_picking);
PP_EXPECT(harness, touch_lock.operation == pp::app::CanvasToolOperation::toggle_touch_lock);
PP_EXPECT(harness, touch_lock.toggles_touch_lock);
PP_EXPECT(harness, copy.transform_action == pp::app::CanvasToolTransformAction::copy);
PP_EXPECT(harness, cut.transform_action == pp::app::CanvasToolTransformAction::cut);
}
void button_state_tracks_active_mode_and_toggles(pp::tests::Harness& harness)
{
const auto draw = pp::app::plan_canvas_tool_button_state(
@@ -295,6 +336,8 @@ int main()
harness.run("selection plans canvas modes", selection_plans_canvas_modes);
harness.run("transform tools plan copy and cut actions", transform_tools_plan_copy_and_cut_actions);
harness.run("pick and touch lock toggle state", pick_and_touch_lock_toggle_state);
harness.run("toolbar plan exposes full legacy button set", toolbar_plan_exposes_full_legacy_button_set);
harness.run("toolbar binding actions match canvas tool plans", toolbar_binding_actions_match_canvas_tool_plans);
harness.run("button state tracks active mode and toggles", button_state_tracks_active_mode_and_toggles);
harness.run("cursor visibility projects canvas state", cursor_visibility_projects_canvas_state);
harness.run("cursor visibility forces visible for modifier or tool", cursor_visibility_forces_visible_for_modifier_or_tool);