Skip to content

Commit bfa7fb0

Browse files
committed
Fixed Guide Movement
1 parent a224c1d commit bfa7fb0

File tree

1 file changed

+24
-16
lines changed

1 file changed

+24
-16
lines changed

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

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -407,6 +407,7 @@ struct SelectToolData {
407407
auto_panning: AutoPanning,
408408
dragging_guide_id: Option<GuideId>,
409409
dragging_guide_direction: Option<GuideDirection>,
410+
guide_drag_start_position: Option<f64>,
410411
drag_start_center: ViewportPosition,
411412
}
412413

@@ -1093,11 +1094,15 @@ impl Fsm for SelectToolFsmState {
10931094
// tool_data.snap_manager.add_all_document_handles(document, input, &[], &[], &[]);
10941095

10951096
state
1096-
}
1097-
// Check if clicking on a guide line - handle before transform cage interactions
1098-
else if let Some((guide_id, direction)) = hit_test_guide(document, input.mouse.position) {
1097+
} else if let Some((guide_id, direction)) = hit_test_guide(document, input.mouse.position) {
10991098
tool_data.dragging_guide_id = Some(guide_id);
11001099
tool_data.dragging_guide_direction = Some(direction);
1100+
1101+
let original_position = match direction {
1102+
GuideDirection::Horizontal => document.horizontal_guides.iter().find(|g| g.id == guide_id).map(|g| g.position),
1103+
GuideDirection::Vertical => document.vertical_guides.iter().find(|g| g.id == guide_id).map(|g| g.position),
1104+
};
1105+
tool_data.guide_drag_start_position = original_position;
11011106
SelectToolFsmState::DraggingGuide { guide_id, direction }
11021107
}
11031108
// Dragging one (or two, forming a corner) of the transform cage bounding box edges
@@ -1194,48 +1199,51 @@ impl Fsm for SelectToolFsmState {
11941199
(SelectToolFsmState::DraggingGuide { .. }, SelectToolMessage::Abort) => {
11951200
tool_data.dragging_guide_id = None;
11961201
tool_data.dragging_guide_direction = None;
1202+
tool_data.guide_drag_start_position = None;
11971203
let selection = tool_data.nested_selection_behavior;
11981204
SelectToolFsmState::Ready { selection }
11991205
}
12001206
// Guide dragging - pointer move
12011207
(SelectToolFsmState::DraggingGuide { guide_id, direction }, SelectToolMessage::PointerMove { .. }) => {
12021208
tool_data.drag_current = input.mouse.position;
12031209

1204-
let transform = document.metadata().document_to_viewport;
1205-
// Converts viewport to document
1206-
let new_position = match direction {
1207-
GuideDirection::Horizontal => (input.mouse.position.y - transform.translation.y) / transform.matrix2.y_axis.y,
1208-
GuideDirection::Vertical => (input.mouse.position.x - transform.translation.x) / transform.matrix2.x_axis.x,
1210+
// MoveGuide expects viewport coordinates and does the conversion internally
1211+
let viewport_position = match direction {
1212+
GuideDirection::Horizontal => input.mouse.position.y,
1213+
GuideDirection::Vertical => input.mouse.position.x,
12091214
};
12101215

1211-
responses.add(DocumentMessage::MoveGuide { id: guide_id, position: new_position });
1216+
responses.add(DocumentMessage::MoveGuide {
1217+
id: guide_id,
1218+
position: viewport_position,
1219+
});
12121220

12131221
SelectToolFsmState::DraggingGuide { guide_id, direction }
12141222
}
12151223
(SelectToolFsmState::DraggingGuide { guide_id, direction }, SelectToolMessage::DragStop { .. }) => {
12161224
tool_data.drag_current = input.mouse.position;
12171225

1218-
let transform = document.metadata().document_to_viewport;
1219-
let final_position = match direction {
1220-
GuideDirection::Horizontal => (input.mouse.position.y - transform.translation.y) / transform.matrix2.y_axis.y,
1221-
GuideDirection::Vertical => (input.mouse.position.x - transform.translation.x) / transform.matrix2.x_axis.x,
1222-
};
1223-
12241226
// Checks if dragged outside viewport - deletes the guide
12251227
let viewport_size = viewport.size().into_dvec2();
12261228
let outside_viewport = input.mouse.position.x < 0.0 || input.mouse.position.y < 0.0 || input.mouse.position.x > viewport_size.x || input.mouse.position.y > viewport_size.y;
12271229

12281230
if outside_viewport {
12291231
responses.add(DocumentMessage::DeleteGuide { id: guide_id });
12301232
} else {
1233+
// MoveGuide expects viewport coordinates and does the conversion internally
1234+
let viewport_position = match direction {
1235+
GuideDirection::Horizontal => input.mouse.position.y,
1236+
GuideDirection::Vertical => input.mouse.position.x,
1237+
};
12311238
responses.add(DocumentMessage::MoveGuide {
12321239
id: guide_id,
1233-
position: final_position,
1240+
position: viewport_position,
12341241
});
12351242
}
12361243

12371244
tool_data.dragging_guide_id = None;
12381245
tool_data.dragging_guide_direction = None;
1246+
tool_data.guide_drag_start_position = None;
12391247
let selection = tool_data.nested_selection_behavior;
12401248
SelectToolFsmState::Ready { selection }
12411249
}

0 commit comments

Comments
 (0)