diff --git a/editor/src/messages/input_mapper/input_mappings.rs b/editor/src/messages/input_mapper/input_mappings.rs index 34d6ed0b3b..ae9d86c154 100644 --- a/editor/src/messages/input_mapper/input_mappings.rs +++ b/editor/src/messages/input_mapper/input_mappings.rs @@ -231,30 +231,70 @@ pub fn input_mappings() -> Mapping { entry!(KeyUp(MouseLeft); action_dispatch=PathToolMessage::DragStop { extend_selection: Shift, shrink_selection: Alt }), entry!(KeyDown(Enter); action_dispatch=PathToolMessage::Enter { extend_selection: Shift, shrink_selection: Alt }), entry!(DoubleClick(MouseButton::Left); action_dispatch=PathToolMessage::DoubleClick { extend_selection: Shift, shrink_selection: Alt }), - entry!(KeyDown(ArrowRight); action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: NUDGE_AMOUNT, delta_y: 0. }), - entry!(KeyDown(ArrowRight); modifiers=[Shift], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: BIG_NUDGE_AMOUNT, delta_y: 0. }), - entry!(KeyDown(ArrowRight); modifiers=[ArrowUp], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: NUDGE_AMOUNT, delta_y: -NUDGE_AMOUNT }), - entry!(KeyDown(ArrowRight); modifiers=[ArrowDown], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: NUDGE_AMOUNT, delta_y: NUDGE_AMOUNT }), - entry!(KeyDown(ArrowRight); modifiers=[Shift, ArrowUp], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: BIG_NUDGE_AMOUNT, delta_y: -BIG_NUDGE_AMOUNT }), - entry!(KeyDown(ArrowRight); modifiers=[Shift, ArrowDown], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: BIG_NUDGE_AMOUNT, delta_y: BIG_NUDGE_AMOUNT }), - entry!(KeyDown(ArrowUp); action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: 0., delta_y: -NUDGE_AMOUNT }), - entry!(KeyDown(ArrowUp); modifiers=[Shift], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: 0., delta_y: -BIG_NUDGE_AMOUNT }), - entry!(KeyDown(ArrowUp); modifiers=[ArrowLeft], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: -NUDGE_AMOUNT, delta_y: -NUDGE_AMOUNT }), - entry!(KeyDown(ArrowUp); modifiers=[ArrowRight], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: NUDGE_AMOUNT, delta_y: -NUDGE_AMOUNT }), - entry!(KeyDown(ArrowUp); modifiers=[Shift, ArrowLeft], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: -BIG_NUDGE_AMOUNT, delta_y: -BIG_NUDGE_AMOUNT }), - entry!(KeyDown(ArrowUp); modifiers=[Shift, ArrowRight], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: BIG_NUDGE_AMOUNT, delta_y: -BIG_NUDGE_AMOUNT }), - entry!(KeyDown(ArrowLeft); action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: -NUDGE_AMOUNT, delta_y: 0. }), - entry!(KeyDown(ArrowLeft); modifiers=[Shift], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: -BIG_NUDGE_AMOUNT, delta_y: 0. }), - entry!(KeyDown(ArrowLeft); modifiers=[ArrowUp], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: -NUDGE_AMOUNT, delta_y: -NUDGE_AMOUNT }), - entry!(KeyDown(ArrowLeft); modifiers=[ArrowDown], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: -NUDGE_AMOUNT, delta_y: NUDGE_AMOUNT }), - entry!(KeyDown(ArrowLeft); modifiers=[Shift, ArrowUp], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: -BIG_NUDGE_AMOUNT, delta_y: -BIG_NUDGE_AMOUNT }), - entry!(KeyDown(ArrowLeft); modifiers=[Shift, ArrowDown], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: -BIG_NUDGE_AMOUNT, delta_y: BIG_NUDGE_AMOUNT }), - entry!(KeyDown(ArrowDown); action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: 0., delta_y: NUDGE_AMOUNT }), - entry!(KeyDown(ArrowDown); modifiers=[Shift], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: 0., delta_y: BIG_NUDGE_AMOUNT }), - entry!(KeyDown(ArrowDown); modifiers=[ArrowLeft], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: -NUDGE_AMOUNT, delta_y: NUDGE_AMOUNT }), - entry!(KeyDown(ArrowDown); modifiers=[ArrowRight], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: NUDGE_AMOUNT, delta_y: NUDGE_AMOUNT }), - entry!(KeyDown(ArrowDown); modifiers=[Shift, ArrowLeft], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: -BIG_NUDGE_AMOUNT, delta_y: BIG_NUDGE_AMOUNT }), - entry!(KeyDown(ArrowDown); modifiers=[Shift, ArrowRight], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: BIG_NUDGE_AMOUNT, delta_y: BIG_NUDGE_AMOUNT }), + entry!(KeyDown(ArrowRight); action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: NUDGE_AMOUNT, delta_y: 0., nudge_alt: false, nudge_ctrl: false }), + entry!(KeyDown(ArrowRight); modifiers=[Control, Alt], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: NUDGE_AMOUNT, delta_y: 0., nudge_alt: false, nudge_ctrl: true }), + entry!(KeyDown(ArrowRight); modifiers=[Alt], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: NUDGE_AMOUNT, delta_y: 0., nudge_alt: true, nudge_ctrl: false }), + entry!(KeyDown(ArrowRight); modifiers=[Shift], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: BIG_NUDGE_AMOUNT, delta_y: 0., nudge_alt: false, nudge_ctrl: false }), + entry!(KeyDown(ArrowRight); modifiers=[ArrowUp], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: NUDGE_AMOUNT, delta_y: -NUDGE_AMOUNT, nudge_alt: false, nudge_ctrl: false }), + entry!(KeyDown(ArrowRight); modifiers=[ArrowDown], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: NUDGE_AMOUNT, delta_y: NUDGE_AMOUNT, nudge_alt: false, nudge_ctrl: false }), + entry!(KeyDown(ArrowRight); modifiers=[Shift, ArrowUp], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: BIG_NUDGE_AMOUNT, delta_y: -BIG_NUDGE_AMOUNT, nudge_alt: false, nudge_ctrl: false }), + entry!(KeyDown(ArrowRight); modifiers=[Shift, ArrowDown], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: BIG_NUDGE_AMOUNT, delta_y: BIG_NUDGE_AMOUNT, nudge_alt: false, nudge_ctrl: false }), + entry!(KeyDown(ArrowRight); modifiers=[ArrowUp, Alt], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: NUDGE_AMOUNT, delta_y: -NUDGE_AMOUNT, nudge_alt: true, nudge_ctrl: false }), + entry!(KeyDown(ArrowRight); modifiers=[ArrowDown, Alt], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: NUDGE_AMOUNT, delta_y: NUDGE_AMOUNT, nudge_alt: true, nudge_ctrl: false }), + entry!(KeyDown(ArrowRight); modifiers=[ArrowUp, Alt, Control], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: NUDGE_AMOUNT, delta_y: -NUDGE_AMOUNT, nudge_alt: false, nudge_ctrl: true }), + entry!(KeyDown(ArrowRight); modifiers=[ArrowDown, Alt, Control], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: NUDGE_AMOUNT, delta_y: NUDGE_AMOUNT, nudge_alt: false, nudge_ctrl: true }), + entry!(KeyDown(ArrowRight); modifiers=[Shift, ArrowUp, Alt], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: BIG_NUDGE_AMOUNT, delta_y: -BIG_NUDGE_AMOUNT, nudge_alt: true, nudge_ctrl: false }), + entry!(KeyDown(ArrowRight); modifiers=[Shift, ArrowDown, Alt], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: BIG_NUDGE_AMOUNT, delta_y: BIG_NUDGE_AMOUNT, nudge_alt: true, nudge_ctrl: false }), + entry!(KeyDown(ArrowRight); modifiers=[Shift, ArrowUp, Alt, Control], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: BIG_NUDGE_AMOUNT, delta_y: -BIG_NUDGE_AMOUNT, nudge_alt: false, nudge_ctrl: true }), + entry!(KeyDown(ArrowRight); modifiers=[Shift, ArrowDown, Alt, Control], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: BIG_NUDGE_AMOUNT, delta_y: BIG_NUDGE_AMOUNT, nudge_alt: false, nudge_ctrl: true }), + entry!(KeyDown(ArrowUp); action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: 0., delta_y: -NUDGE_AMOUNT, nudge_alt: false, nudge_ctrl: false }), + entry!(KeyDown(ArrowUp); modifiers=[Control, Alt], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: 0., delta_y: -NUDGE_AMOUNT, nudge_alt: false, nudge_ctrl: true }), + entry!(KeyDown(ArrowUp); modifiers=[Alt], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: 0., delta_y: -NUDGE_AMOUNT, nudge_alt: true, nudge_ctrl: false }), + entry!(KeyDown(ArrowUp); modifiers=[Shift], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: 0., delta_y: -BIG_NUDGE_AMOUNT, nudge_alt: false, nudge_ctrl: false }), + entry!(KeyDown(ArrowUp); modifiers=[ArrowLeft], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: -NUDGE_AMOUNT, delta_y: -NUDGE_AMOUNT, nudge_alt: false, nudge_ctrl: false }), + entry!(KeyDown(ArrowUp); modifiers=[ArrowRight], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: NUDGE_AMOUNT, delta_y: -NUDGE_AMOUNT, nudge_alt: false, nudge_ctrl: false }), + entry!(KeyDown(ArrowUp); modifiers=[Shift, ArrowLeft], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: -BIG_NUDGE_AMOUNT, delta_y: -BIG_NUDGE_AMOUNT, nudge_alt: false, nudge_ctrl: false }), + entry!(KeyDown(ArrowUp); modifiers=[Shift, ArrowRight], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: BIG_NUDGE_AMOUNT, delta_y: -BIG_NUDGE_AMOUNT, nudge_alt: false, nudge_ctrl: false }), + entry!(KeyDown(ArrowUp); modifiers=[ArrowLeft, Alt], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: -NUDGE_AMOUNT, delta_y: -NUDGE_AMOUNT, nudge_alt: true, nudge_ctrl: false }), + entry!(KeyDown(ArrowUp); modifiers=[ArrowRight, Alt], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: NUDGE_AMOUNT, delta_y: -NUDGE_AMOUNT, nudge_alt: true, nudge_ctrl: false }), + entry!(KeyDown(ArrowUp); modifiers=[ArrowLeft, Alt, Control], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: -NUDGE_AMOUNT, delta_y: -NUDGE_AMOUNT, nudge_alt: false, nudge_ctrl: true }), + entry!(KeyDown(ArrowUp); modifiers=[ArrowRight, Alt, Control], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: NUDGE_AMOUNT, delta_y: -NUDGE_AMOUNT, nudge_alt: false, nudge_ctrl: true }), + entry!(KeyDown(ArrowUp); modifiers=[Shift, ArrowLeft, Alt], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: -BIG_NUDGE_AMOUNT, delta_y: -BIG_NUDGE_AMOUNT, nudge_alt: true, nudge_ctrl: false }), + entry!(KeyDown(ArrowUp); modifiers=[Shift, ArrowRight, Alt], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: BIG_NUDGE_AMOUNT, delta_y: -BIG_NUDGE_AMOUNT, nudge_alt: true, nudge_ctrl: false }), + entry!(KeyDown(ArrowUp); modifiers=[Shift, ArrowLeft, Alt, Control], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: -BIG_NUDGE_AMOUNT, delta_y: -BIG_NUDGE_AMOUNT, nudge_alt: false, nudge_ctrl: true }), + entry!(KeyDown(ArrowUp); modifiers=[Shift, ArrowRight, Alt, Control], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: BIG_NUDGE_AMOUNT, delta_y: -BIG_NUDGE_AMOUNT, nudge_alt: false, nudge_ctrl: true }), + entry!(KeyDown(ArrowLeft); action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: -NUDGE_AMOUNT, delta_y: 0., nudge_alt: false, nudge_ctrl: false }), + entry!(KeyDown(ArrowLeft); modifiers=[Control, Alt], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: -NUDGE_AMOUNT, delta_y: 0., nudge_alt: false, nudge_ctrl: true }), + entry!(KeyDown(ArrowLeft); modifiers=[Alt], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: -NUDGE_AMOUNT, delta_y: 0., nudge_alt: true, nudge_ctrl: false }), + entry!(KeyDown(ArrowLeft); modifiers=[Shift], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: -BIG_NUDGE_AMOUNT, delta_y: 0., nudge_alt: false, nudge_ctrl: false }), + entry!(KeyDown(ArrowLeft); modifiers=[ArrowUp], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: -NUDGE_AMOUNT, delta_y: -NUDGE_AMOUNT, nudge_alt: false, nudge_ctrl: false }), + entry!(KeyDown(ArrowLeft); modifiers=[ArrowDown], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: -NUDGE_AMOUNT, delta_y: NUDGE_AMOUNT, nudge_alt: false, nudge_ctrl: false }), + entry!(KeyDown(ArrowLeft); modifiers=[Shift, ArrowUp], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: -BIG_NUDGE_AMOUNT, delta_y: -BIG_NUDGE_AMOUNT, nudge_alt: false, nudge_ctrl: false }), + entry!(KeyDown(ArrowLeft); modifiers=[Shift, ArrowDown], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: -BIG_NUDGE_AMOUNT, delta_y: BIG_NUDGE_AMOUNT, nudge_alt: false, nudge_ctrl: false }), + entry!(KeyDown(ArrowLeft); modifiers=[ArrowUp, Alt], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: -NUDGE_AMOUNT, delta_y: -NUDGE_AMOUNT, nudge_alt: true, nudge_ctrl: false }), + entry!(KeyDown(ArrowLeft); modifiers=[ArrowDown, Alt], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: -NUDGE_AMOUNT, delta_y: NUDGE_AMOUNT, nudge_alt: true, nudge_ctrl: false }), + entry!(KeyDown(ArrowLeft); modifiers=[ArrowUp, Alt, Control], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: -NUDGE_AMOUNT, delta_y: -NUDGE_AMOUNT, nudge_alt: false, nudge_ctrl: true }), + entry!(KeyDown(ArrowLeft); modifiers=[ArrowDown, Alt, Control], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: -NUDGE_AMOUNT, delta_y: NUDGE_AMOUNT, nudge_alt: false, nudge_ctrl: true }), + entry!(KeyDown(ArrowLeft); modifiers=[Shift, ArrowUp, Alt], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: -BIG_NUDGE_AMOUNT, delta_y: -BIG_NUDGE_AMOUNT, nudge_alt: true, nudge_ctrl: false }), + entry!(KeyDown(ArrowLeft); modifiers=[Shift, ArrowDown, Alt], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: -BIG_NUDGE_AMOUNT, delta_y: BIG_NUDGE_AMOUNT, nudge_alt: true, nudge_ctrl: false }), + entry!(KeyDown(ArrowLeft); modifiers=[Shift, ArrowUp, Alt, Control], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: -BIG_NUDGE_AMOUNT, delta_y: -BIG_NUDGE_AMOUNT, nudge_alt: false, nudge_ctrl: true }), + entry!(KeyDown(ArrowLeft); modifiers=[Shift, ArrowDown, Alt, Control], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: -BIG_NUDGE_AMOUNT, delta_y: BIG_NUDGE_AMOUNT, nudge_alt: false, nudge_ctrl: true }), + entry!(KeyDown(ArrowDown); action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: 0., delta_y: NUDGE_AMOUNT, nudge_alt: false, nudge_ctrl: false }), + entry!(KeyDown(ArrowDown); modifiers=[Control, Alt], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: 0., delta_y: NUDGE_AMOUNT, nudge_alt: false, nudge_ctrl: true }), + entry!(KeyDown(ArrowDown); modifiers=[Alt], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: 0., delta_y: NUDGE_AMOUNT, nudge_alt: true, nudge_ctrl: false }), + entry!(KeyDown(ArrowDown); modifiers=[Shift], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: 0., delta_y: BIG_NUDGE_AMOUNT, nudge_alt: false, nudge_ctrl: false }), + entry!(KeyDown(ArrowDown); modifiers=[ArrowLeft], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: -NUDGE_AMOUNT, delta_y: NUDGE_AMOUNT, nudge_alt: false, nudge_ctrl: false }), + entry!(KeyDown(ArrowDown); modifiers=[ArrowRight], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: NUDGE_AMOUNT, delta_y: NUDGE_AMOUNT, nudge_alt: false, nudge_ctrl: false }), + entry!(KeyDown(ArrowDown); modifiers=[Shift, ArrowLeft], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: -BIG_NUDGE_AMOUNT, delta_y: BIG_NUDGE_AMOUNT, nudge_alt: false, nudge_ctrl: false }), + entry!(KeyDown(ArrowDown); modifiers=[Shift, ArrowRight], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: BIG_NUDGE_AMOUNT, delta_y: BIG_NUDGE_AMOUNT, nudge_alt: false, nudge_ctrl: false }), + entry!(KeyDown(ArrowDown); modifiers=[ArrowLeft, Alt], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: -NUDGE_AMOUNT, delta_y: NUDGE_AMOUNT, nudge_alt: true, nudge_ctrl: false }), + entry!(KeyDown(ArrowDown); modifiers=[ArrowRight, Alt], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: NUDGE_AMOUNT, delta_y: NUDGE_AMOUNT, nudge_alt: true, nudge_ctrl: false }), + entry!(KeyDown(ArrowDown); modifiers=[ArrowLeft, Alt, Control], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: -NUDGE_AMOUNT, delta_y: NUDGE_AMOUNT, nudge_alt: false, nudge_ctrl: true }), + entry!(KeyDown(ArrowDown); modifiers=[ArrowRight, Alt, Control], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: NUDGE_AMOUNT, delta_y: NUDGE_AMOUNT, nudge_alt: false, nudge_ctrl: true }), + entry!(KeyDown(ArrowDown); modifiers=[Shift, ArrowLeft, Alt], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: -BIG_NUDGE_AMOUNT, delta_y: BIG_NUDGE_AMOUNT, nudge_alt: true, nudge_ctrl: false }), + entry!(KeyDown(ArrowDown); modifiers=[Shift, ArrowRight, Alt], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: BIG_NUDGE_AMOUNT, delta_y: BIG_NUDGE_AMOUNT, nudge_alt: true, nudge_ctrl: false }), + entry!(KeyDown(ArrowDown); modifiers=[Shift, ArrowLeft, Alt, Control], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: -BIG_NUDGE_AMOUNT, delta_y: BIG_NUDGE_AMOUNT, nudge_alt: false, nudge_ctrl: true }), + entry!(KeyDown(ArrowDown); modifiers=[Shift, ArrowRight, Alt, Control], action_dispatch=PathToolMessage::NudgeSelectedPoints { delta_x: BIG_NUDGE_AMOUNT, delta_y: BIG_NUDGE_AMOUNT, nudge_alt: false, nudge_ctrl: true }), entry!(KeyDown(KeyJ); modifiers=[Accel], action_dispatch=ToolMessage::Path(PathToolMessage::ClosePath)), // // PenToolMessage diff --git a/editor/src/messages/tool/common_functionality/shape_editor.rs b/editor/src/messages/tool/common_functionality/shape_editor.rs index 5f00d97111..fb022a7f75 100644 --- a/editor/src/messages/tool/common_functionality/shape_editor.rs +++ b/editor/src/messages/tool/common_functionality/shape_editor.rs @@ -1206,6 +1206,8 @@ impl ShapeState { opposite_handle_position: Option, skip_opposite_handle: bool, responses: &mut VecDeque, + bot_right: bool, + top_left: bool, ) { for (&layer, state) in &self.selected_shape_state { let Some(vector) = document.network_interface.compute_modified_vector(layer) else { continue }; @@ -1221,6 +1223,17 @@ impl ShapeState { }; let delta = delta_transform.inverse().transform_vector2(delta); + let center = if bot_right || top_left { + let points: Vec = state.selected_points().filter_map(|point| point.get_position(&vector)).collect(); + if points.is_empty() { + continue; + } + let sum = points.iter().fold(DVec2::ZERO, |acc, &p| acc + p); + Some(sum / points.len() as f64) + } else { + None + }; + // Make a new collection of anchor points which needs to be moved let mut affected_points = state.selected_points.clone(); @@ -1236,6 +1249,21 @@ impl ShapeState { continue; } + if let Some(center) = center { + let Some(point_position) = point.get_position(&vector) else { continue }; + if bot_right { + // Only move points on/below-right of center for bottom-right scaling + if !(point_position.x >= center.x && point_position.y >= center.y) { + continue; + } + } else if top_left { + // only move points on/above-left of center for top-left scaling + if !(point_position.x <= center.x && point_position.y <= center.y) { + continue; + } + } + } + let handle = match point { ManipulatorPointId::Anchor(point) => { self.move_anchor(point, &vector, delta, layer, Some(state), responses); diff --git a/editor/src/messages/tool/tool_messages/path_tool.rs b/editor/src/messages/tool/tool_messages/path_tool.rs index be300ebe5c..bcd97f687f 100644 --- a/editor/src/messages/tool/tool_messages/path_tool.rs +++ b/editor/src/messages/tool/tool_messages/path_tool.rs @@ -92,6 +92,8 @@ pub enum PathToolMessage { NudgeSelectedPoints { delta_x: f64, delta_y: f64, + nudge_alt: bool, + nudge_ctrl: bool, }, PointerMove { equidistant: Key, @@ -1148,7 +1150,7 @@ impl PathToolData { let drag_start = self.drag_start_pos; let opposite_delta = drag_start - current_mouse; - shape_editor.move_selected_points_and_segments(None, document, opposite_delta, false, true, false, None, false, responses); + shape_editor.move_selected_points_and_segments(None, document, opposite_delta, false, true, false, None, false, responses, false, false); // Calculate the projected delta and shift the points along that delta let delta = current_mouse - drag_start; @@ -1160,7 +1162,7 @@ impl PathToolData { _ => DVec2::new(delta.x, 0.), }; - shape_editor.move_selected_points_and_segments(None, document, projected_delta, false, true, false, None, false, responses); + shape_editor.move_selected_points_and_segments(None, document, projected_delta, false, true, false, None, false, responses, false, false); } fn stop_snap_along_axis(&mut self, shape_editor: &mut ShapeState, document: &DocumentMessageHandler, input: &InputPreprocessorMessageHandler, responses: &mut VecDeque) { @@ -1176,12 +1178,12 @@ impl PathToolData { _ => DVec2::new(opposite_delta.x, 0.), }; - shape_editor.move_selected_points_and_segments(None, document, opposite_projected_delta, false, true, false, None, false, responses); + shape_editor.move_selected_points_and_segments(None, document, opposite_projected_delta, false, true, false, None, false, responses, false, false); // Calculate what actually would have been the original delta for the point, and apply that let delta = current_mouse - drag_start; - shape_editor.move_selected_points_and_segments(None, document, delta, false, true, false, None, false, responses); + shape_editor.move_selected_points_and_segments(None, document, delta, false, true, false, None, false, responses, false, false); self.snapping_axis = None; } @@ -1504,7 +1506,7 @@ impl PathToolData { self.temporary_colinear_handles = false; skip_opposite = true; } - shape_editor.move_selected_points_and_segments(handle_lengths, document, snapped_delta, equidistant, true, was_alt_dragging, opposite, skip_opposite, responses); + shape_editor.move_selected_points_and_segments(handle_lengths, document, snapped_delta, equidistant, true, was_alt_dragging, opposite, skip_opposite, responses, false, false); self.previous_mouse_position += document_to_viewport.inverse().transform_vector2(snapped_delta); } else { let Some(axis) = self.snapping_axis else { return }; @@ -1513,7 +1515,7 @@ impl PathToolData { Axis::Y => DVec2::new(0., unsnapped_delta.y), _ => DVec2::new(unsnapped_delta.x, 0.), }; - shape_editor.move_selected_points_and_segments(handle_lengths, document, projected_delta, equidistant, true, false, opposite, false, responses); + shape_editor.move_selected_points_and_segments(handle_lengths, document, projected_delta, equidistant, true, false, opposite, false, responses, false, false); self.previous_mouse_position += document_to_viewport.inverse().transform_vector2(unsnapped_delta); } @@ -3063,7 +3065,15 @@ impl Fsm for PathToolFsmState { responses.add(OverlaysMessage::Draw); PathToolFsmState::Ready } - (_, PathToolMessage::NudgeSelectedPoints { delta_x, delta_y }) => { + ( + _, + PathToolMessage::NudgeSelectedPoints { + delta_x, + delta_y, + nudge_alt, + nudge_ctrl, + }, + ) => { shape_editor.move_selected_points_and_segments( tool_data.opposing_handle_lengths.take(), document, @@ -3074,6 +3084,8 @@ impl Fsm for PathToolFsmState { tool_data.opposite_handle_position, false, responses, + nudge_alt, + nudge_ctrl, ); PathToolFsmState::Ready