Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 64 additions & 24 deletions editor/src/messages/input_mapper/input_mappings.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
28 changes: 28 additions & 0 deletions editor/src/messages/tool/common_functionality/shape_editor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1206,6 +1206,8 @@ impl ShapeState {
opposite_handle_position: Option<DVec2>,
skip_opposite_handle: bool,
responses: &mut VecDeque<Message>,
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 };
Expand All @@ -1221,6 +1223,17 @@ impl ShapeState {
};
let delta = delta_transform.inverse().transform_vector2(delta);

let center = if bot_right || top_left {
let points: Vec<DVec2> = 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();

Expand All @@ -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);
Expand Down
Loading