Skip to content

Commit 4fe3462

Browse files
4adexKeavon
andauthored
Fixed minor issues related to frontier selection visibility in the Pen/Path tools (#2291)
* Fixed issues * Get back selection when abort --------- Co-authored-by: Keavon Chambers <keavon@keavon.com>
1 parent 419a95e commit 4fe3462

2 files changed

Lines changed: 30 additions & 2 deletions

File tree

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -779,6 +779,10 @@ impl Fsm for PathToolFsmState {
779779
}
780780
PathOverlayMode::FrontierHandles => {
781781
let selected_segments = selected_segments(document, shape_editor);
782+
let selected_points = shape_editor.selected_points();
783+
let selected_anchors = selected_points
784+
.filter_map(|point_id| if let ManipulatorPointId::Anchor(p) = point_id { Some(*p) } else { None })
785+
.collect::<Vec<_>>();
782786

783787
// Match the behavior of `PathOverlayMode::SelectedPointHandles` when only one point is selected
784788
if shape_editor.selected_points().count() == 1 {
@@ -802,6 +806,9 @@ impl Fsm for PathToolFsmState {
802806
for (point, attached_segments) in selected_segments_by_point {
803807
if attached_segments.len() == 1 {
804808
segment_endpoints.entry(attached_segments[0]).or_default().push(point);
809+
} else if !selected_anchors.contains(&point) {
810+
segment_endpoints.entry(attached_segments[0]).or_default().push(point);
811+
segment_endpoints.entry(attached_segments[1]).or_default().push(point);
805812
}
806813
}
807814
}
@@ -1110,6 +1117,13 @@ impl Fsm for PathToolFsmState {
11101117
PathToolFsmState::Ready
11111118
}
11121119
(PathToolFsmState::Dragging { .. }, PathToolMessage::Escape | PathToolMessage::RightClick) => {
1120+
if tool_data.handle_drag_toggle && tool_data.drag_start_pos.distance(input.mouse.position) > DRAG_THRESHOLD {
1121+
shape_editor.deselect_all_points();
1122+
shape_editor.select_points_by_manipulator_id(&tool_data.saved_points_before_handle_drag);
1123+
1124+
tool_data.saved_points_before_handle_drag.clear();
1125+
tool_data.handle_drag_toggle = false;
1126+
}
11131127
responses.add(DocumentMessage::AbortTransaction);
11141128
tool_data.snap_manager.cleanup(responses);
11151129
PathToolFsmState::Ready

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

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -827,7 +827,14 @@ impl Fsm for PenToolFsmState {
827827
self
828828
}
829829
(PenToolFsmState::Ready, PenToolMessage::Overlays(mut overlay_context)) => {
830-
path_overlays(document, DrawHandles::All, shape_editor, &mut overlay_context);
830+
match tool_options.pen_overlay_mode {
831+
PenOverlayMode::AllHandles => {
832+
path_overlays(document, DrawHandles::All, shape_editor, &mut overlay_context);
833+
}
834+
PenOverlayMode::FrontierHandles => {
835+
path_overlays(document, DrawHandles::None, shape_editor, &mut overlay_context);
836+
}
837+
}
831838
tool_data.snap_manager.draw_overlays(SnapData::new(document, input), &mut overlay_context);
832839
self
833840
}
@@ -896,7 +903,14 @@ impl Fsm for PenToolFsmState {
896903
}
897904
} else {
898905
// Draw the whole path and its manipulators when the user is clicking-and-dragging out from the most recently placed anchor to set its outgoing handle, during which it would otherwise not have its overlays drawn
899-
path_overlays(document, DrawHandles::All, shape_editor, &mut overlay_context);
906+
match tool_options.pen_overlay_mode {
907+
PenOverlayMode::AllHandles => {
908+
path_overlays(document, DrawHandles::All, shape_editor, &mut overlay_context);
909+
}
910+
PenOverlayMode::FrontierHandles => {
911+
path_overlays(document, DrawHandles::None, shape_editor, &mut overlay_context);
912+
}
913+
}
900914
}
901915

902916
if self == PenToolFsmState::DraggingHandle(tool_data.handle_mode) && valid(next_anchor, next_handle_start) {

0 commit comments

Comments
 (0)