Skip to content

Commit aa9a3e6

Browse files
milan-sedivyKeavon
andauthored
Fix cancellation of drag actions in all tools where it's missing (GraphiteEditor#1664)
* Change message sent from DocumentMessage::Undo to DocumentMessage::AbortTransaction while aborting select tool * Fix NavigationTool not aborting * Fix NavigationTool tilt * Make gradient tool abortable * Make PathTool drag actions abortable * Make FreeHand Tool abortable * Make BrushTool abortable * Fix filename typo * Make artboards also abortable * Rearrange key bindings for consistency --------- Co-authored-by: Keavon Chambers <keavon@keavon.com>
1 parent 218e967 commit aa9a3e6

11 files changed

Lines changed: 63 additions & 28 deletions

File tree

editor/src/messages/input_mapper/default_mapping.rs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@ pub fn default_mapping() -> Mapping {
6161
// TransformLayerMessage
6262
entry!(KeyDown(Enter); action_dispatch=TransformLayerMessage::ApplyTransformOperation),
6363
entry!(KeyDown(Lmb); action_dispatch=TransformLayerMessage::ApplyTransformOperation),
64-
entry!(KeyDown(Escape); action_dispatch=TransformLayerMessage::CancelTransformOperation),
6564
entry!(KeyDown(Rmb); action_dispatch=TransformLayerMessage::CancelTransformOperation),
65+
entry!(KeyDown(Escape); action_dispatch=TransformLayerMessage::CancelTransformOperation),
6666
entry!(KeyDown(KeyX); action_dispatch=TransformLayerMessage::ConstrainX),
6767
entry!(KeyDown(KeyY); action_dispatch=TransformLayerMessage::ConstrainY),
6868
entry!(KeyDown(Backspace); action_dispatch=TransformLayerMessage::TypeBackspace),
@@ -110,6 +110,8 @@ pub fn default_mapping() -> Mapping {
110110
entry!(KeyDown(ArrowRight); modifiers=[ArrowUp], action_dispatch=ArtboardToolMessage::NudgeSelected { delta_x: NUDGE_AMOUNT, delta_y: -NUDGE_AMOUNT }),
111111
entry!(KeyDown(ArrowRight); modifiers=[ArrowDown], action_dispatch=ArtboardToolMessage::NudgeSelected { delta_x: NUDGE_AMOUNT, delta_y: NUDGE_AMOUNT }),
112112
entry!(KeyDown(ArrowRight); action_dispatch=ArtboardToolMessage::NudgeSelected { delta_x: NUDGE_AMOUNT, delta_y: 0. }),
113+
entry!(KeyDown(Rmb); action_dispatch=ArtboardToolMessage::Abort),
114+
entry!(KeyDown(Escape); action_dispatch=ArtboardToolMessage::Abort),
113115
//
114116
// NavigateToolMessage
115117
entry!(KeyUp(Lmb); modifiers=[Shift], action_dispatch=NavigateToolMessage::ClickZoom { zoom_in: false }),
@@ -142,6 +144,8 @@ pub fn default_mapping() -> Mapping {
142144
entry!(DoubleClick(MouseButton::Left); action_dispatch=GradientToolMessage::InsertStop),
143145
entry!(KeyDown(Delete); action_dispatch=GradientToolMessage::DeleteStop),
144146
entry!(KeyDown(Backspace); action_dispatch=GradientToolMessage::DeleteStop),
147+
entry!(KeyDown(Rmb); action_dispatch=GradientToolMessage::Abort),
148+
entry!(KeyDown(Escape); action_dispatch=GradientToolMessage::Abort),
145149
//
146150
// RectangleToolMessage
147151
entry!(KeyDown(Lmb); action_dispatch=RectangleToolMessage::DragStart),
@@ -235,6 +239,8 @@ pub fn default_mapping() -> Mapping {
235239
entry!(PointerMove; action_dispatch=FreehandToolMessage::PointerMove),
236240
entry!(KeyDown(Lmb); action_dispatch=FreehandToolMessage::DragStart),
237241
entry!(KeyUp(Lmb); action_dispatch=FreehandToolMessage::DragStop),
242+
entry!(KeyDown(Rmb); action_dispatch=FreehandToolMessage::Abort),
243+
entry!(KeyDown(Escape); action_dispatch=FreehandToolMessage::Abort),
238244
//
239245
// SplineToolMessage
240246
entry!(PointerMove; action_dispatch=SplineToolMessage::PointerMove),
@@ -254,6 +260,8 @@ pub fn default_mapping() -> Mapping {
254260
entry!(KeyUp(Lmb); action_dispatch=BrushToolMessage::DragStop),
255261
entry!(KeyDown(BracketLeft); action_dispatch=BrushToolMessage::UpdateOptions(BrushToolMessageOptionsUpdate::ChangeDiameter(-BRUSH_SIZE_CHANGE_KEYBOARD))),
256262
entry!(KeyDown(BracketRight); action_dispatch=BrushToolMessage::UpdateOptions(BrushToolMessageOptionsUpdate::ChangeDiameter(BRUSH_SIZE_CHANGE_KEYBOARD))),
263+
entry!(KeyDown(Rmb); action_dispatch=BrushToolMessage::Abort),
264+
entry!(KeyDown(Escape); action_dispatch=BrushToolMessage::Abort),
257265
//
258266
// ToolMessage
259267
entry!(KeyDown(KeyV); action_dispatch=ToolMessage::ActivateToolSelect),
@@ -346,7 +354,8 @@ pub fn default_mapping() -> Mapping {
346354
entry!(KeyUp(Mmb); action_dispatch=NavigationMessage::TransformCanvasEnd { abort_transform: false }),
347355
entry!(KeyDown(Lmb); modifiers=[Space], action_dispatch=NavigationMessage::TranslateCanvasBegin),
348356
entry!(KeyUp(Lmb); action_dispatch=NavigationMessage::TransformCanvasEnd { abort_transform: false }),
349-
entry!(KeyUp(Rmb); action_dispatch=NavigationMessage::TransformCanvasEnd { abort_transform: true }),
357+
entry!(KeyDown(Rmb); action_dispatch=NavigationMessage::TransformCanvasEnd { abort_transform: true }),
358+
entry!(KeyDown(Escape); action_dispatch=NavigationMessage::TransformCanvasEnd { abort_transform: true }),
350359
entry!(KeyDown(NumpadAdd); modifiers=[Accel], action_dispatch=NavigationMessage::IncreaseCanvasZoom { center_on_mouse: false }),
351360
entry!(KeyDown(Equal); modifiers=[Accel], action_dispatch=NavigationMessage::IncreaseCanvasZoom { center_on_mouse: false }),
352361
entry!(KeyDown(Minus); modifiers=[Accel], action_dispatch=NavigationMessage::DecreaseCanvasZoom { center_on_mouse: false }),

editor/src/messages/portfolio/document/navigation/navigation_message_handler.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,7 @@ impl MessageHandler<NavigationMessage, (&DocumentMetadata, Option<[DVec2; 2]>, &
230230
match self.transform_operation {
231231
TransformOperation::None => {}
232232
TransformOperation::Rotate { pre_commit_tilt, .. } => {
233+
ptz.tilt = pre_commit_tilt;
233234
responses.add(SetCanvasTilt { angle_radians: pre_commit_tilt });
234235
}
235236
TransformOperation::Pan { pre_commit_pan, .. } => {

editor/src/messages/tool/common_functionality/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@ pub mod resize;
66
pub mod shape_editor;
77
pub mod snapping;
88
pub mod transformation_cage;
9-
pub mod utility_funcitons;
9+
pub mod utility_functions;

editor/src/messages/tool/common_functionality/utility_funcitons.rs renamed to editor/src/messages/tool/common_functionality/utility_functions.rs

File renamed without changes.

editor/src/messages/tool/tool_messages/artboard_tool.rs

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,23 @@ impl<'a> MessageHandler<ToolMessage, &mut ToolActionHandlerData<'a>> for Artboar
4949
self.fsm_state.process_event(message, &mut self.data, tool_data, &(), responses, false);
5050
}
5151

52-
advertise_actions!(ArtboardToolMessageDiscriminant;
53-
PointerDown,
54-
PointerUp,
55-
PointerMove,
56-
DeleteSelected,
57-
NudgeSelected,
58-
Abort,
59-
);
52+
fn actions(&self) -> ActionList {
53+
use ArtboardToolFsmState::*;
54+
55+
let mut common = actions!(ArtboardToolMessageDiscriminant;
56+
DeleteSelected,
57+
NudgeSelected,
58+
PointerMove,
59+
);
60+
61+
let additional = match self.fsm_state {
62+
Ready => actions!(ArtboardToolMessageDiscriminant; PointerDown),
63+
_ => actions!(ArtboardToolMessageDiscriminant; PointerUp, Abort),
64+
};
65+
common.extend(additional);
66+
67+
common
68+
}
6069
}
6170

6271
impl LayoutHolder for ArtboardTool {
@@ -396,8 +405,13 @@ impl Fsm for ArtboardToolFsmState {
396405
ArtboardToolFsmState::Ready
397406
}
398407
(_, ArtboardToolMessage::Abort) => {
399-
tool_data.snap_manager.cleanup(responses);
408+
responses.add(DocumentMessage::AbortTransaction);
409+
410+
// ArtboardTool currently doesn't implement snapping
411+
// tool_data.snap_manager.cleanup(responses);
412+
400413
responses.add(OverlaysMessage::Draw);
414+
401415
ArtboardToolFsmState::Ready
402416
}
403417
_ => self,

editor/src/messages/tool/tool_messages/brush_tool.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,6 @@ impl<'a> MessageHandler<ToolMessage, &mut ToolActionHandlerData<'a>> for BrushTo
228228
Ready => actions!(BrushToolMessageDiscriminant;
229229
DragStart,
230230
DragStop,
231-
Abort,
232231
UpdateOptions,
233232
),
234233
Drawing => actions!(BrushToolMessageDiscriminant;
@@ -370,18 +369,20 @@ impl Fsm for BrushToolFsmState {
370369
BrushToolFsmState::Drawing
371370
}
372371

373-
(BrushToolFsmState::Drawing, BrushToolMessage::DragStop) | (BrushToolFsmState::Drawing, BrushToolMessage::Abort) => {
372+
(BrushToolFsmState::Drawing, BrushToolMessage::DragStop) => {
374373
if !tool_data.strokes.is_empty() {
375374
responses.add(DocumentMessage::CommitTransaction);
376-
} else {
377-
responses.add(DocumentMessage::AbortTransaction);
378375
}
379-
380376
tool_data.strokes.clear();
381377

382378
BrushToolFsmState::Ready
383379
}
380+
(BrushToolFsmState::Drawing, BrushToolMessage::Abort) => {
381+
responses.add(DocumentMessage::AbortTransaction);
382+
tool_data.strokes.clear();
384383

384+
BrushToolFsmState::Ready
385+
}
385386
(_, BrushToolMessage::WorkingColorChanged) => {
386387
responses.add(BrushToolMessage::UpdateOptions(BrushToolMessageOptionsUpdate::WorkingColors(
387388
Some(global_tool_data.primary_color),

editor/src/messages/tool/tool_messages/freehand_tool.rs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use crate::messages::portfolio::document::overlays::utility_types::OverlayContex
55
use crate::messages::portfolio::document::utility_types::document_metadata::LayerNodeIdentifier;
66
use crate::messages::tool::common_functionality::color_selector::{ToolColorOptions, ToolColorType};
77
use crate::messages::tool::common_functionality::graph_modification_utils;
8-
use crate::messages::tool::common_functionality::utility_funcitons::should_extend;
8+
use crate::messages::tool::common_functionality::utility_functions::should_extend;
99

1010
use graph_craft::document::NodeId;
1111
use graphene_core::uuid::generate_uuid;
@@ -155,7 +155,6 @@ impl<'a> MessageHandler<ToolMessage, &mut ToolActionHandlerData<'a>> for Freehan
155155
Ready => actions!(FreehandToolMessageDiscriminant;
156156
DragStart,
157157
DragStop,
158-
Abort,
159158
),
160159
Drawing => actions!(FreehandToolMessageDiscriminant;
161160
DragStop,
@@ -277,17 +276,21 @@ impl Fsm for FreehandToolFsmState {
277276

278277
FreehandToolFsmState::Drawing
279278
}
280-
(FreehandToolFsmState::Drawing, FreehandToolMessage::DragStop | FreehandToolMessage::Abort) => {
279+
(FreehandToolFsmState::Drawing, FreehandToolMessage::DragStop) => {
281280
if tool_data.dragged {
282281
responses.add(DocumentMessage::CommitTransaction);
283-
} else {
284-
responses.add(DocumentMessage::AbortTransaction);
285282
}
286283

287284
tool_data.layer = None;
288285

289286
FreehandToolFsmState::Ready
290287
}
288+
(FreehandToolFsmState::Drawing, FreehandToolMessage::Abort) => {
289+
responses.add(DocumentMessage::AbortTransaction);
290+
tool_data.layer = None;
291+
292+
FreehandToolFsmState::Ready
293+
}
291294
(_, FreehandToolMessage::WorkingColorChanged) => {
292295
responses.add(FreehandToolMessage::UpdateOptions(FreehandOptionsUpdate::WorkingColors(
293296
Some(global_tool_data.primary_color),

editor/src/messages/tool/tool_messages/gradient_tool.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -441,12 +441,14 @@ impl Fsm for GradientToolFsmState {
441441
GradientToolFsmState::Ready
442442
}
443443

444-
(_, GradientToolMessage::Abort) => {
444+
(GradientToolFsmState::Drawing, GradientToolMessage::Abort) => {
445+
responses.add(DocumentMessage::AbortTransaction);
445446
tool_data.snap_manager.cleanup(responses);
446447
responses.add(OverlaysMessage::Draw);
447448

448449
GradientToolFsmState::Ready
449450
}
451+
(_, GradientToolMessage::Abort) => GradientToolFsmState::Ready,
450452
_ => self,
451453
}
452454
}

editor/src/messages/tool/tool_messages/path_tool.rs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,8 @@ impl<'a> MessageHandler<ToolMessage, &mut ToolActionHandlerData<'a>> for PathToo
168168
DeleteAndBreakPath,
169169
),
170170
Dragging => actions!(PathToolMessageDiscriminant;
171+
Escape,
172+
RightClick,
171173
FlipSharp,
172174
DragStop,
173175
PointerMove,
@@ -459,7 +461,6 @@ impl Fsm for PathToolFsmState {
459461
}
460462
tool_data.end_insertion(shape_editor, responses, InsertEndKind::Abort)
461463
}
462-
463464
// Mouse down
464465
(_, PathToolMessage::MouseDown { ctrl, shift }) => {
465466
let add_to_selection = input.keyboard.get(shift as usize);
@@ -492,7 +493,12 @@ impl Fsm for PathToolFsmState {
492493

493494
PathToolFsmState::Ready
494495
}
495-
496+
(PathToolFsmState::Dragging, PathToolMessage::Escape | PathToolMessage::RightClick) => {
497+
responses.add(DocumentMessage::AbortTransaction);
498+
shape_editor.deselect_all();
499+
tool_data.snap_manager.cleanup(responses);
500+
PathToolFsmState::Ready
501+
}
496502
// Mouse up
497503
(PathToolFsmState::DrawingBox, PathToolMessage::DragStop { shift_mirror_distance }) => {
498504
let shift_pressed = input.keyboard.get(shift_mirror_distance as usize);
@@ -507,7 +513,6 @@ impl Fsm for PathToolFsmState {
507513

508514
PathToolFsmState::Ready
509515
}
510-
511516
(_, PathToolMessage::DragStop { shift_mirror_distance }) => {
512517
let shift_pressed = input.keyboard.get(shift_mirror_distance as usize);
513518

editor/src/messages/tool/tool_messages/pen_tool.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use crate::messages::tool::common_functionality::color_selector::{ToolColorOptio
88
use crate::messages::tool::common_functionality::graph_modification_utils;
99
use crate::messages::tool::common_functionality::graph_modification_utils::get_subpaths;
1010
use crate::messages::tool::common_functionality::snapping::{SnapCandidatePoint, SnapConstraint, SnapData, SnapManager};
11-
use crate::messages::tool::common_functionality::utility_funcitons::should_extend;
11+
use crate::messages::tool::common_functionality::utility_functions::should_extend;
1212

1313
use graph_craft::document::NodeId;
1414
use graphene_core::uuid::{generate_uuid, ManipulatorGroupId};

0 commit comments

Comments
 (0)