From 65100b3bc212c7c51bf4e1d92bad94cdac7649f6 Mon Sep 17 00:00:00 2001 From: devviktoria <74530862+devviktoria@users.noreply.github.com> Date: Thu, 23 Apr 2026 17:40:11 +0200 Subject: [PATCH] Add Grab shortcut functionality to Artboard tool --- .../messages/input_mapper/input_mappings.rs | 2 ++ .../tool/tool_messages/artboard_tool.rs | 24 ++++++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/editor/src/messages/input_mapper/input_mappings.rs b/editor/src/messages/input_mapper/input_mappings.rs index 2d9669a355..357b67a5c2 100644 --- a/editor/src/messages/input_mapper/input_mappings.rs +++ b/editor/src/messages/input_mapper/input_mappings.rs @@ -149,6 +149,8 @@ pub fn input_mappings(zoom_with_scroll: bool) -> Mapping { entry!(KeyDown(ArrowRight); action_dispatch=ArtboardToolMessage::NudgeSelected { delta_x: NUDGE_AMOUNT, delta_y: 0., resize: Alt, resize_opposite_corner: Control }), entry!(KeyDown(MouseRight); action_dispatch=ArtboardToolMessage::Abort), entry!(KeyDown(Escape); action_dispatch=ArtboardToolMessage::Abort), + entry!(KeyDown(KeyG); action_dispatch=ArtboardToolMessage::GS { grab: KeyG, scale: KeyS }), + entry!(KeyDown(KeyS); action_dispatch=ArtboardToolMessage::GS { grab: KeyG, scale: KeyS }), // // NavigateToolMessage entry!(KeyDown(MouseLeft); action_dispatch=NavigateToolMessage::ZoomCanvasBegin), diff --git a/editor/src/messages/tool/tool_messages/artboard_tool.rs b/editor/src/messages/tool/tool_messages/artboard_tool.rs index fa06962f00..e01d308a5e 100644 --- a/editor/src/messages/tool/tool_messages/artboard_tool.rs +++ b/editor/src/messages/tool/tool_messages/artboard_tool.rs @@ -37,6 +37,7 @@ pub enum ArtboardToolMessage { PointerMove { constrain_axis_or_aspect: Key, center: Key }, PointerOutsideViewport { constrain_axis_or_aspect: Key, center: Key }, PointerUp, + GS { grab: Key, scale: Key }, } impl ToolMetadata for ArtboardTool { @@ -65,7 +66,7 @@ impl<'a> MessageHandler> for Artb ); let additional = match self.fsm_state { - ArtboardToolFsmState::Ready { .. } => actions!(ArtboardToolMessageDiscriminant; PointerDown), + ArtboardToolFsmState::Ready { .. } => actions!(ArtboardToolMessageDiscriminant; PointerDown, GS), _ => actions!(ArtboardToolMessageDiscriminant; PointerUp, Abort), }; common.extend(additional); @@ -294,6 +295,26 @@ impl Fsm for ArtboardToolFsmState { self } + (ArtboardToolFsmState::Ready { .. }, ArtboardToolMessage::GS { grab, scale }) => { + let to_viewport = document.metadata().document_to_viewport; + let to_document = to_viewport.inverse(); + tool_data.drag_start = to_document.transform_point2(input.mouse.position); + tool_data.drag_current = to_document.transform_point2(input.mouse.position); + + if input.keyboard.key(grab) && tool_data.selected_artboard.is_some() { + tool_data.get_snap_candidates(document, input); + + responses.add(DocumentMessage::StartTransaction); + + ArtboardToolFsmState::Dragging + } else if input.keyboard.key(scale) && tool_data.selected_artboard.is_some() { + //tool_data.start_resizing(selected_edges, document, input); + tool_data.get_snap_candidates(document, input); + ArtboardToolFsmState::ResizingBounds + } else { + ArtboardToolFsmState::Ready { hovered } + } + } (ArtboardToolFsmState::Ready { .. }, ArtboardToolMessage::PointerDown) => { let to_viewport = document.metadata().document_to_viewport; let to_document = to_viewport.inverse(); @@ -586,6 +607,7 @@ impl Fsm for ArtboardToolFsmState { ArtboardToolFsmState::Ready { .. } => HintData(vec![ HintGroup(vec![HintInfo::mouse(MouseMotion::LmbDrag, "Draw Artboard")]), HintGroup(vec![HintInfo::mouse(MouseMotion::LmbDrag, "Move Artboard")]), + HintGroup(vec![HintInfo::multi_keys([[Key::KeyG], [Key::KeyS]], "Grab/Scale Selected")]), HintGroup(vec![HintInfo::keys([Key::Backspace], "Delete Artboard")]), ]), ArtboardToolFsmState::Dragging => HintData(vec![