From 976d249b74e41ff7c94f28ecf44105af869f551b Mon Sep 17 00:00:00 2001 From: Adesh Gupta Date: Mon, 18 Aug 2025 18:56:49 +0000 Subject: [PATCH] Init message structure --- .../messages/tool/tool_messages/path_tool.rs | 41 ++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/editor/src/messages/tool/tool_messages/path_tool.rs b/editor/src/messages/tool/tool_messages/path_tool.rs index 00c99bd975..cdf453f997 100644 --- a/editor/src/messages/tool/tool_messages/path_tool.rs +++ b/editor/src/messages/tool/tool_messages/path_tool.rs @@ -138,6 +138,8 @@ pub enum PathToolMessage { Duplicate, TogglePointEditing, ToggleSegmentEditing, + SeparateSegment, + PeelSegment, } #[derive(PartialEq, Eq, Hash, Copy, Clone, Debug, Default, serde::Serialize, serde::Deserialize, specta::Type)] @@ -293,6 +295,18 @@ impl LayoutHolder for PathTool { .disabled(!self.tool_data.make_path_editable_is_allowed) .widget_holder(); + let separate_segment_button = IconButton::new("Folder", 24) + .tooltip("Separate selected segment") + .on_update(|_| PathToolMessage::SeparateSegment.into()) + .disabled(!self.tool_data.segment_separation_enabled) + .widget_holder(); + + let peel_segment_button = IconButton::new("Folder", 24) + .tooltip("Peel selected segment") + .on_update(|_| PathToolMessage::PeelSegment.into()) + .disabled(!self.tool_data.segment_separation_enabled) + .widget_holder(); + let [_checkbox, _dropdown] = { let pivot_gizmo_type_widget = pivot_gizmo_type_widget(self.tool_data.pivot_gizmo.state, PivotToolSource::Path); [pivot_gizmo_type_widget[0].clone(), pivot_gizmo_type_widget[2].clone()] @@ -324,6 +338,10 @@ impl LayoutHolder for PathTool { path_overlay_mode_widget, unrelated_seperator.clone(), path_node_button, + separate_segment_button, + unrelated_seperator.clone(), + peel_segment_button, + unrelated_seperator.clone(), // checkbox.clone(), // related_seperator.clone(), // dropdown.clone(), @@ -424,7 +442,9 @@ impl<'a> MessageHandler> for Path Paste, Duplicate, TogglePointEditing, - ToggleSegmentEditing + ToggleSegmentEditing, + SeparateSegment, + PeelSegment ), PathToolFsmState::Dragging(_) => actions!(PathToolMessageDiscriminant; Escape, @@ -571,6 +591,7 @@ struct PathToolData { hovered_layers: Vec, ghost_outline: Vec<(Vec, LayerNodeIdentifier)>, make_path_editable_is_allowed: bool, + segment_separation_enabled: bool, } impl PathToolData { @@ -632,6 +653,10 @@ impl PathToolData { self.selection_status = selection_status; } + fn update_separate_segment_toggle(&mut self, shape_editor: &mut ShapeState, document: &DocumentMessageHandler) { + //TODO: Implement this + } + fn remove_saved_points(&mut self) { self.saved_points_before_anchor_select_toggle.clear(); } @@ -3036,6 +3061,20 @@ impl Fsm for PathToolFsmState { self } + (_, PathToolMessage::SeparateSegment) => { + // TODO: Implement this + + // It only makes sense to use this if we have more than two segments connected + // Basically we will have a segment selected and we need to first remove the segment, add two segments with same bezier on both of them + // Collect the segments that will be connected to start from + + self + } + (_, PathToolMessage::PeelSegment) => { + //TODO: Implement this + + self + } (_, _) => PathToolFsmState::Ready, } }