From 86df233fd6befa1d47cf07300b7e799f5c811600 Mon Sep 17 00:00:00 2001 From: Daragh Downes Date: Sun, 20 Oct 2024 17:44:37 +0100 Subject: [PATCH 1/8] in progress: --- .../messages/input_mapper/input_mappings.rs | 2 + .../tool/common_functionality/shape_editor.rs | 61 +++++++++++++++++++ .../messages/tool/tool_messages/path_tool.rs | 31 ++++++++++ 3 files changed, 94 insertions(+) diff --git a/editor/src/messages/input_mapper/input_mappings.rs b/editor/src/messages/input_mapper/input_mappings.rs index bccaadef53..a946b70748 100644 --- a/editor/src/messages/input_mapper/input_mappings.rs +++ b/editor/src/messages/input_mapper/input_mappings.rs @@ -204,6 +204,8 @@ pub fn input_mappings() -> Mapping { entry!(KeyDown(Backspace); modifiers=[Accel], action_dispatch=PathToolMessage::DeleteAndBreakPath), entry!(KeyDown(Delete); modifiers=[Accel, Shift], action_dispatch=PathToolMessage::BreakPath), entry!(KeyDown(Backspace); modifiers=[Accel, Shift], action_dispatch=PathToolMessage::BreakPath), + entry!(KeyDown(Space); action_dispatch=PathToolMessage::Space), + entry!(KeyUp(Space); action_dispatch=PathToolMessage::SpaceStop), entry!(KeyDown(MouseLeft); action_dispatch=PathToolMessage::MouseDown { ctrl: Control, shift: Shift }), entry!(KeyDown(MouseRight); action_dispatch=PathToolMessage::RightClick), entry!(KeyDown(Escape); action_dispatch=PathToolMessage::Escape), diff --git a/editor/src/messages/tool/common_functionality/shape_editor.rs b/editor/src/messages/tool/common_functionality/shape_editor.rs index dd521f14ea..e7b4df2bfa 100644 --- a/editor/src/messages/tool/common_functionality/shape_editor.rs +++ b/editor/src/messages/tool/common_functionality/shape_editor.rs @@ -1061,6 +1061,67 @@ impl ShapeState { } } +<<<<<<< HEAD +======= + /// Selects handles and anchor connected to current handle + pub fn select_handles_and_anchor(&mut self, network_interface: &NodeNetworkInterface) { + let mut anchor_and_handles_to_select = Vec::new(); + // if selected is anchor + // if selected is handle with no pair + // if selected is handle with pair + // ^^^ cover all these in the same way, + + for (&layer, _) in &self.selected_shape_state { + let Some(vector_data) = network_interface.compute_modified_vector(layer) else { + continue; + }; + + for point in self.selected_points() { + if let Some(handles) = point.get_handle_pair(&vector_data) { + let anchor = handles[0].to_manipulator_point().get_anchor(&vector_data); + //handle[0] is selected, handle[1] is other + anchor_and_handles_to_select.push((layer, handles[1].to_manipulator_point(), anchor)); + } + } + } + + for (layer, handle, anchor) in anchor_and_handles_to_select { + if let Some(state) = self.selected_shape_state.get_mut(&layer) { + state.select_point(handle); + match anchor { + Some(anchor) => state.select_point(ManipulatorPointId::Anchor(anchor)), + None => continue, + } + } + } + } + /// Alternates selected handles between mirror and original + pub fn alternate_selected_handles(&mut self, network_interface: &NodeNetworkInterface) { + let mut handles_to_update = Vec::new(); + + for (&layer, _) in &self.selected_shape_state { + //opt: if selected points in layer == 0, continue benchmark this? + let Some(vector_data) = network_interface.compute_modified_vector(layer) else { + continue; + }; + + for point in self.selected_points() { + if let Some(handles) = point.get_handle_pair(&vector_data) { + //handle[0] is selected, handle[1] is other + handles_to_update.push((layer, handles[0].to_manipulator_point(), handles[1].to_manipulator_point())); + } + } + } + + for (layer, handle_to_deselect, handle_to_select) in handles_to_update { + if let Some(state) = self.selected_shape_state.get_mut(&layer) { + state.deselect_point(handle_to_deselect); + state.select_point(handle_to_select); + } + } + } + +>>>>>>> 36dfb9d9 (in progress:) /// Converts a nearby clicked anchor point's handles between sharp (zero-length handles) and smooth (pulled-apart handle(s)). /// If both handles aren't zero-length, they are set that. If both are zero-length, they are stretched apart by a reasonable amount. /// This can can be activated by double clicking on an anchor with the Path tool. diff --git a/editor/src/messages/tool/tool_messages/path_tool.rs b/editor/src/messages/tool/tool_messages/path_tool.rs index c27114307b..c49fbd38d7 100644 --- a/editor/src/messages/tool/tool_messages/path_tool.rs +++ b/editor/src/messages/tool/tool_messages/path_tool.rs @@ -72,6 +72,12 @@ pub enum PathToolMessage { SelectedPointYChanged { new_y: f64, }, +<<<<<<< HEAD +======= + Tab, + Space, + SpaceStop, +>>>>>>> 36dfb9d9 (in progress:) } impl ToolMetadata for PathTool { @@ -188,6 +194,11 @@ impl<'a> MessageHandler> for PathToo DeselectAllPoints, BreakPath, DeleteAndBreakPath, +<<<<<<< HEAD +======= + Tab, //TODO: maybe remove tab space from ready ? need to test it + Space, +>>>>>>> 36dfb9d9 (in progress:) ), PathToolFsmState::Dragging => actions!(PathToolMessageDiscriminant; Escape, @@ -198,6 +209,11 @@ impl<'a> MessageHandler> for PathToo Delete, BreakPath, DeleteAndBreakPath, +<<<<<<< HEAD +======= + Tab, + Space, +>>>>>>> 36dfb9d9 (in progress:) ), PathToolFsmState::DrawingBox => actions!(PathToolMessageDiscriminant; FlipSmoothSharp, @@ -604,6 +620,21 @@ impl Fsm for PathToolFsmState { PathToolFsmState::Ready } + (PathToolFsmState::Dragging, PathToolMessage::Space) => { + tool_action_data.shape_editor.select_handles_and_anchor(&tool_action_data.document.network_interface); + responses.add(PathToolMessage::SelectedPointUpdated); + self + // PathToolFsmState::Dragging + // save the originally selected points, so can revert back to it up spaceup + } + (_, PathToolMessage::SpaceStop) => { + // try revert back to where it was without holding space? + // tool_action_data.shape_editor.select + tool_action_data.shape_editor.deselect_all_points(); + responses.add(PathToolMessage::SelectedPointUpdated); + self + // PathToolFsmState::Dragging + } (_, PathToolMessage::DragStop { equidistant }) => { let equidistant = input.keyboard.get(equidistant as usize); From c5653bb3877405222aeba77adc0f1f916fd43f4a Mon Sep 17 00:00:00 2001 From: Daragh Downes Date: Mon, 21 Oct 2024 20:23:58 +0100 Subject: [PATCH 2/8] cherry-pick --- .../tool/common_functionality/shape_editor.rs | 33 ------------------- .../messages/tool/tool_messages/path_tool.rs | 12 ------- 2 files changed, 45 deletions(-) diff --git a/editor/src/messages/tool/common_functionality/shape_editor.rs b/editor/src/messages/tool/common_functionality/shape_editor.rs index e7b4df2bfa..7a684e8491 100644 --- a/editor/src/messages/tool/common_functionality/shape_editor.rs +++ b/editor/src/messages/tool/common_functionality/shape_editor.rs @@ -1061,16 +1061,9 @@ impl ShapeState { } } -<<<<<<< HEAD -======= /// Selects handles and anchor connected to current handle pub fn select_handles_and_anchor(&mut self, network_interface: &NodeNetworkInterface) { let mut anchor_and_handles_to_select = Vec::new(); - // if selected is anchor - // if selected is handle with no pair - // if selected is handle with pair - // ^^^ cover all these in the same way, - for (&layer, _) in &self.selected_shape_state { let Some(vector_data) = network_interface.compute_modified_vector(layer) else { continue; @@ -1095,33 +1088,7 @@ impl ShapeState { } } } - /// Alternates selected handles between mirror and original - pub fn alternate_selected_handles(&mut self, network_interface: &NodeNetworkInterface) { - let mut handles_to_update = Vec::new(); - - for (&layer, _) in &self.selected_shape_state { - //opt: if selected points in layer == 0, continue benchmark this? - let Some(vector_data) = network_interface.compute_modified_vector(layer) else { - continue; - }; - - for point in self.selected_points() { - if let Some(handles) = point.get_handle_pair(&vector_data) { - //handle[0] is selected, handle[1] is other - handles_to_update.push((layer, handles[0].to_manipulator_point(), handles[1].to_manipulator_point())); - } - } - } - - for (layer, handle_to_deselect, handle_to_select) in handles_to_update { - if let Some(state) = self.selected_shape_state.get_mut(&layer) { - state.deselect_point(handle_to_deselect); - state.select_point(handle_to_select); - } - } - } ->>>>>>> 36dfb9d9 (in progress:) /// Converts a nearby clicked anchor point's handles between sharp (zero-length handles) and smooth (pulled-apart handle(s)). /// If both handles aren't zero-length, they are set that. If both are zero-length, they are stretched apart by a reasonable amount. /// This can can be activated by double clicking on an anchor with the Path tool. diff --git a/editor/src/messages/tool/tool_messages/path_tool.rs b/editor/src/messages/tool/tool_messages/path_tool.rs index c49fbd38d7..e9d3e13d87 100644 --- a/editor/src/messages/tool/tool_messages/path_tool.rs +++ b/editor/src/messages/tool/tool_messages/path_tool.rs @@ -72,12 +72,8 @@ pub enum PathToolMessage { SelectedPointYChanged { new_y: f64, }, -<<<<<<< HEAD -======= - Tab, Space, SpaceStop, ->>>>>>> 36dfb9d9 (in progress:) } impl ToolMetadata for PathTool { @@ -194,11 +190,7 @@ impl<'a> MessageHandler> for PathToo DeselectAllPoints, BreakPath, DeleteAndBreakPath, -<<<<<<< HEAD -======= - Tab, //TODO: maybe remove tab space from ready ? need to test it Space, ->>>>>>> 36dfb9d9 (in progress:) ), PathToolFsmState::Dragging => actions!(PathToolMessageDiscriminant; Escape, @@ -209,11 +201,7 @@ impl<'a> MessageHandler> for PathToo Delete, BreakPath, DeleteAndBreakPath, -<<<<<<< HEAD -======= - Tab, Space, ->>>>>>> 36dfb9d9 (in progress:) ), PathToolFsmState::DrawingBox => actions!(PathToolMessageDiscriminant; FlipSmoothSharp, From 6a5e05b25b9088e55311a0063a7046e389816680 Mon Sep 17 00:00:00 2001 From: Daragh Downes Date: Sun, 20 Oct 2024 22:02:43 +0100 Subject: [PATCH 3/8] works kinda, fails when holding down space --- .../tool/common_functionality/shape_editor.rs | 15 +++++++++++- .../messages/tool/tool_messages/path_tool.rs | 23 ++++++++++++------- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/editor/src/messages/tool/common_functionality/shape_editor.rs b/editor/src/messages/tool/common_functionality/shape_editor.rs index 7a684e8491..8822662910 100644 --- a/editor/src/messages/tool/common_functionality/shape_editor.rs +++ b/editor/src/messages/tool/common_functionality/shape_editor.rs @@ -2,7 +2,7 @@ use super::graph_modification_utils; use super::snapping::{SnapCache, SnapCandidatePoint, SnapData, SnapManager, SnappedPoint}; use crate::messages::portfolio::document::utility_types::document_metadata::{DocumentMetadata, LayerNodeIdentifier}; use crate::messages::portfolio::document::utility_types::misc::{GeometrySnapSource, SnapSource}; -use crate::messages::portfolio::document::utility_types::network_interface::NodeNetworkInterface; +use crate::messages::portfolio::document::utility_types::network_interface::{self, NodeNetworkInterface}; use crate::messages::prelude::*; use bezier_rs::{Bezier, BezierHandles, TValue}; @@ -1089,6 +1089,19 @@ impl ShapeState { } } + pub fn select_points_by_manipulator_id(&mut self, points: &Vec) { + // Collect layers to modify first + let layers_to_modify: Vec<_> = self.selected_shape_state.keys().cloned().collect(); + + // Now perform the mutations on collected layers + for layer in layers_to_modify { + if let Some(state) = self.selected_shape_state.get_mut(&layer) { + for point in points { + state.select_point(*point); + } + } + } + } /// Converts a nearby clicked anchor point's handles between sharp (zero-length handles) and smooth (pulled-apart handle(s)). /// If both handles aren't zero-length, they are set that. If both are zero-length, they are stretched apart by a reasonable amount. /// This can can be activated by double clicking on an anchor with the Path tool. diff --git a/editor/src/messages/tool/tool_messages/path_tool.rs b/editor/src/messages/tool/tool_messages/path_tool.rs index e9d3e13d87..28c9426eb0 100644 --- a/editor/src/messages/tool/tool_messages/path_tool.rs +++ b/editor/src/messages/tool/tool_messages/path_tool.rs @@ -191,6 +191,7 @@ impl<'a> MessageHandler> for PathToo BreakPath, DeleteAndBreakPath, Space, + SpaceStop, ), PathToolFsmState::Dragging => actions!(PathToolMessageDiscriminant; Escape, @@ -202,6 +203,7 @@ impl<'a> MessageHandler> for PathToo BreakPath, DeleteAndBreakPath, Space, + SpaceStop, ), PathToolFsmState::DrawingBox => actions!(PathToolMessageDiscriminant; FlipSmoothSharp, @@ -266,9 +268,15 @@ struct PathToolData { snap_cache: SnapCache, double_click_handled: bool, auto_panning: AutoPanning, + selected_points_before_space: Vec, } impl PathToolData { + fn add_selected_points(&mut self, points: Vec) -> PathToolFsmState { + self.selected_points_before_space = points; + PathToolFsmState::Dragging + } + fn start_insertion(&mut self, responses: &mut VecDeque, segment: ClosestSegment) -> PathToolFsmState { if self.segment.is_some() { warn!("Segment was `Some(..)` before `start_insertion`") @@ -291,7 +299,6 @@ impl PathToolData { PathToolFsmState::Ready } } - fn end_insertion(&mut self, shape_editor: &mut ShapeState, responses: &mut VecDeque, kind: InsertEndKind) -> PathToolFsmState { let mut commit_transaction = false; match self.segment.as_mut() { @@ -609,19 +616,19 @@ impl Fsm for PathToolFsmState { PathToolFsmState::Ready } (PathToolFsmState::Dragging, PathToolMessage::Space) => { + //TODO: dont have to clone maybe, lifetime stuff? + tool_data.add_selected_points(tool_action_data.shape_editor.selected_points().cloned().collect()); tool_action_data.shape_editor.select_handles_and_anchor(&tool_action_data.document.network_interface); responses.add(PathToolMessage::SelectedPointUpdated); - self - // PathToolFsmState::Dragging - // save the originally selected points, so can revert back to it up spaceup + // self + PathToolFsmState::Dragging } (_, PathToolMessage::SpaceStop) => { - // try revert back to where it was without holding space? - // tool_action_data.shape_editor.select tool_action_data.shape_editor.deselect_all_points(); + tool_action_data.shape_editor.select_points_by_manipulator_id(&tool_data.selected_points_before_space); responses.add(PathToolMessage::SelectedPointUpdated); - self - // PathToolFsmState::Dragging + // self + PathToolFsmState::Dragging } (_, PathToolMessage::DragStop { equidistant }) => { let equidistant = input.keyboard.get(equidistant as usize); From 71656fabda93f80c6c5b5062c0d8a29bacd632aa Mon Sep 17 00:00:00 2001 From: Daragh Downes Date: Mon, 21 Oct 2024 20:10:15 +0100 Subject: [PATCH 4/8] seems to be working --- .../tool/common_functionality/shape_editor.rs | 22 ++++++++++------- .../messages/tool/tool_messages/path_tool.rs | 24 +++++++++++++++---- 2 files changed, 33 insertions(+), 13 deletions(-) diff --git a/editor/src/messages/tool/common_functionality/shape_editor.rs b/editor/src/messages/tool/common_functionality/shape_editor.rs index 8822662910..0ba9871b2d 100644 --- a/editor/src/messages/tool/common_functionality/shape_editor.rs +++ b/editor/src/messages/tool/common_functionality/shape_editor.rs @@ -2,7 +2,7 @@ use super::graph_modification_utils; use super::snapping::{SnapCache, SnapCandidatePoint, SnapData, SnapManager, SnappedPoint}; use crate::messages::portfolio::document::utility_types::document_metadata::{DocumentMetadata, LayerNodeIdentifier}; use crate::messages::portfolio::document::utility_types::misc::{GeometrySnapSource, SnapSource}; -use crate::messages::portfolio::document::utility_types::network_interface::{self, NodeNetworkInterface}; +use crate::messages::portfolio::document::utility_types::network_interface::NodeNetworkInterface; use crate::messages::prelude::*; use bezier_rs::{Bezier, BezierHandles, TValue}; @@ -1063,37 +1063,43 @@ impl ShapeState { /// Selects handles and anchor connected to current handle pub fn select_handles_and_anchor(&mut self, network_interface: &NodeNetworkInterface) { - let mut anchor_and_handles_to_select = Vec::new(); + let mut points_to_select = Vec::new(); + let mut anchors_to_select = Vec::new(); + for (&layer, _) in &self.selected_shape_state { let Some(vector_data) = network_interface.compute_modified_vector(layer) else { continue; }; for point in self.selected_points() { + let anchor = point.get_anchor(&vector_data); + anchors_to_select.push((layer, anchor)); + if let Some(handles) = point.get_handle_pair(&vector_data) { - let anchor = handles[0].to_manipulator_point().get_anchor(&vector_data); //handle[0] is selected, handle[1] is other - anchor_and_handles_to_select.push((layer, handles[1].to_manipulator_point(), anchor)); + points_to_select.push((layer, handles[1].to_manipulator_point())); } } } - for (layer, handle, anchor) in anchor_and_handles_to_select { + for (layer, anchor) in anchors_to_select { if let Some(state) = self.selected_shape_state.get_mut(&layer) { - state.select_point(handle); match anchor { Some(anchor) => state.select_point(ManipulatorPointId::Anchor(anchor)), None => continue, } } } + for (layer, point) in points_to_select { + if let Some(state) = self.selected_shape_state.get_mut(&layer) { + state.select_point(point); + } + } } pub fn select_points_by_manipulator_id(&mut self, points: &Vec) { - // Collect layers to modify first let layers_to_modify: Vec<_> = self.selected_shape_state.keys().cloned().collect(); - // Now perform the mutations on collected layers for layer in layers_to_modify { if let Some(state) = self.selected_shape_state.get_mut(&layer) { for point in points { diff --git a/editor/src/messages/tool/tool_messages/path_tool.rs b/editor/src/messages/tool/tool_messages/path_tool.rs index 28c9426eb0..6dce2d3693 100644 --- a/editor/src/messages/tool/tool_messages/path_tool.rs +++ b/editor/src/messages/tool/tool_messages/path_tool.rs @@ -190,7 +190,6 @@ impl<'a> MessageHandler> for PathToo DeselectAllPoints, BreakPath, DeleteAndBreakPath, - Space, SpaceStop, ), PathToolFsmState::Dragging => actions!(PathToolMessageDiscriminant; @@ -215,6 +214,7 @@ impl<'a> MessageHandler> for PathToo DeleteAndBreakPath, Escape, RightClick, + SpaceStop, ), PathToolFsmState::InsertPoint => actions!(PathToolMessageDiscriminant; Enter, @@ -224,6 +224,7 @@ impl<'a> MessageHandler> for PathToo Delete, RightClick, GRS, + SpaceStop, ), } } @@ -269,6 +270,7 @@ struct PathToolData { double_click_handled: bool, auto_panning: AutoPanning, selected_points_before_space: Vec, + space_held: bool, } impl PathToolData { @@ -277,6 +279,10 @@ impl PathToolData { PathToolFsmState::Dragging } + fn remove_selected_points(&mut self) { + self.selected_points_before_space.clear(); + } + fn start_insertion(&mut self, responses: &mut VecDeque, segment: ClosestSegment) -> PathToolFsmState { if self.segment.is_some() { warn!("Segment was `Some(..)` before `start_insertion`") @@ -616,20 +622,27 @@ impl Fsm for PathToolFsmState { PathToolFsmState::Ready } (PathToolFsmState::Dragging, PathToolMessage::Space) => { - //TODO: dont have to clone maybe, lifetime stuff? + if tool_data.space_held { + return PathToolFsmState::Dragging; + } + tool_data.space_held = true; tool_data.add_selected_points(tool_action_data.shape_editor.selected_points().cloned().collect()); tool_action_data.shape_editor.select_handles_and_anchor(&tool_action_data.document.network_interface); responses.add(PathToolMessage::SelectedPointUpdated); - // self PathToolFsmState::Dragging } - (_, PathToolMessage::SpaceStop) => { + (PathToolFsmState::Dragging, PathToolMessage::SpaceStop) => { + tool_data.space_held = false; tool_action_data.shape_editor.deselect_all_points(); tool_action_data.shape_editor.select_points_by_manipulator_id(&tool_data.selected_points_before_space); responses.add(PathToolMessage::SelectedPointUpdated); - // self PathToolFsmState::Dragging } + (PathToolFsmState::Ready, PathToolMessage::SpaceStop) => { + tool_data.space_held = false; + tool_data.remove_selected_points(); + PathToolFsmState::Ready + } (_, PathToolMessage::DragStop { equidistant }) => { let equidistant = input.keyboard.get(equidistant as usize); @@ -755,6 +768,7 @@ impl Fsm for PathToolFsmState { HintInfo::keys([Key::Alt], "Toggle Colinear Handles"), // TODO: Switch this to the "Alt" key (since it's equivalent to the "From Center" modifier when drawing a line). And show this only when a handle is being dragged. HintInfo::keys([Key::Shift], "Equidistant Handles"), + HintInfo::keys([Key::Space], "Drag anchor"), // TODO: Add "Snap 15°" modifier with the "Shift" key (only when a handle is being dragged). // TODO: Add "Lock Angle" modifier with the "Ctrl" key (only when a handle is being dragged). ]), From e10e9799b1d46d55ec3d7ac18b032d0e085782d3 Mon Sep 17 00:00:00 2001 From: Daragh Downes Date: Mon, 21 Oct 2024 20:49:33 +0100 Subject: [PATCH 5/8] naming --- .../messages/input_mapper/input_mappings.rs | 4 ++-- .../messages/tool/tool_messages/path_tool.rs | 20 +++++++++---------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/editor/src/messages/input_mapper/input_mappings.rs b/editor/src/messages/input_mapper/input_mappings.rs index a946b70748..0ab88a3b1c 100644 --- a/editor/src/messages/input_mapper/input_mappings.rs +++ b/editor/src/messages/input_mapper/input_mappings.rs @@ -204,8 +204,8 @@ pub fn input_mappings() -> Mapping { entry!(KeyDown(Backspace); modifiers=[Accel], action_dispatch=PathToolMessage::DeleteAndBreakPath), entry!(KeyDown(Delete); modifiers=[Accel, Shift], action_dispatch=PathToolMessage::BreakPath), entry!(KeyDown(Backspace); modifiers=[Accel, Shift], action_dispatch=PathToolMessage::BreakPath), - entry!(KeyDown(Space); action_dispatch=PathToolMessage::Space), - entry!(KeyUp(Space); action_dispatch=PathToolMessage::SpaceStop), + entry!(KeyDown(Space); action_dispatch=PathToolMessage::SelectAnchorAndHandle), + entry!(KeyUp(Space); action_dispatch=PathToolMessage::ResumeOriginalSelection), entry!(KeyDown(MouseLeft); action_dispatch=PathToolMessage::MouseDown { ctrl: Control, shift: Shift }), entry!(KeyDown(MouseRight); action_dispatch=PathToolMessage::RightClick), entry!(KeyDown(Escape); action_dispatch=PathToolMessage::Escape), diff --git a/editor/src/messages/tool/tool_messages/path_tool.rs b/editor/src/messages/tool/tool_messages/path_tool.rs index 6dce2d3693..8c935ea1d2 100644 --- a/editor/src/messages/tool/tool_messages/path_tool.rs +++ b/editor/src/messages/tool/tool_messages/path_tool.rs @@ -72,8 +72,8 @@ pub enum PathToolMessage { SelectedPointYChanged { new_y: f64, }, - Space, - SpaceStop, + SelectAnchorAndHandle, + ResumeOriginalSelection, } impl ToolMetadata for PathTool { @@ -190,7 +190,7 @@ impl<'a> MessageHandler> for PathToo DeselectAllPoints, BreakPath, DeleteAndBreakPath, - SpaceStop, + ResumeOriginalSelection, ), PathToolFsmState::Dragging => actions!(PathToolMessageDiscriminant; Escape, @@ -201,8 +201,8 @@ impl<'a> MessageHandler> for PathToo Delete, BreakPath, DeleteAndBreakPath, - Space, - SpaceStop, + SelectAnchorAndHandle, + ResumeOriginalSelection, ), PathToolFsmState::DrawingBox => actions!(PathToolMessageDiscriminant; FlipSmoothSharp, @@ -214,7 +214,7 @@ impl<'a> MessageHandler> for PathToo DeleteAndBreakPath, Escape, RightClick, - SpaceStop, + ResumeOriginalSelection, ), PathToolFsmState::InsertPoint => actions!(PathToolMessageDiscriminant; Enter, @@ -224,7 +224,7 @@ impl<'a> MessageHandler> for PathToo Delete, RightClick, GRS, - SpaceStop, + ResumeOriginalSelection, ), } } @@ -621,7 +621,7 @@ impl Fsm for PathToolFsmState { PathToolFsmState::Ready } - (PathToolFsmState::Dragging, PathToolMessage::Space) => { + (PathToolFsmState::Dragging, PathToolMessage::SelectAnchorAndHandle) => { if tool_data.space_held { return PathToolFsmState::Dragging; } @@ -631,14 +631,14 @@ impl Fsm for PathToolFsmState { responses.add(PathToolMessage::SelectedPointUpdated); PathToolFsmState::Dragging } - (PathToolFsmState::Dragging, PathToolMessage::SpaceStop) => { + (PathToolFsmState::Dragging, PathToolMessage::ResumeOriginalSelection) => { tool_data.space_held = false; tool_action_data.shape_editor.deselect_all_points(); tool_action_data.shape_editor.select_points_by_manipulator_id(&tool_data.selected_points_before_space); responses.add(PathToolMessage::SelectedPointUpdated); PathToolFsmState::Dragging } - (PathToolFsmState::Ready, PathToolMessage::SpaceStop) => { + (PathToolFsmState::Ready, PathToolMessage::ResumeOriginalSelection) => { tool_data.space_held = false; tool_data.remove_selected_points(); PathToolFsmState::Ready From b93f73e2d024fc9fb43cf1f846f793bbaab1945f Mon Sep 17 00:00:00 2001 From: Daragh Downes Date: Mon, 21 Oct 2024 21:01:31 +0100 Subject: [PATCH 6/8] fix :clippy --- editor/src/messages/tool/common_functionality/shape_editor.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/editor/src/messages/tool/common_functionality/shape_editor.rs b/editor/src/messages/tool/common_functionality/shape_editor.rs index 0ba9871b2d..8abe6247bf 100644 --- a/editor/src/messages/tool/common_functionality/shape_editor.rs +++ b/editor/src/messages/tool/common_functionality/shape_editor.rs @@ -1066,7 +1066,7 @@ impl ShapeState { let mut points_to_select = Vec::new(); let mut anchors_to_select = Vec::new(); - for (&layer, _) in &self.selected_shape_state { + for &layer in self.selected_shape_state.keys() { let Some(vector_data) = network_interface.compute_modified_vector(layer) else { continue; }; From 6dd9980eadf81d4a6ce228bbe1835c1484a72b75 Mon Sep 17 00:00:00 2001 From: Daragh Downes Date: Mon, 21 Oct 2024 21:02:50 +0100 Subject: [PATCH 7/8] fix: put back in newline --- editor/src/messages/tool/tool_messages/path_tool.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/editor/src/messages/tool/tool_messages/path_tool.rs b/editor/src/messages/tool/tool_messages/path_tool.rs index 8c935ea1d2..b04cd1c546 100644 --- a/editor/src/messages/tool/tool_messages/path_tool.rs +++ b/editor/src/messages/tool/tool_messages/path_tool.rs @@ -305,6 +305,7 @@ impl PathToolData { PathToolFsmState::Ready } } + fn end_insertion(&mut self, shape_editor: &mut ShapeState, responses: &mut VecDeque, kind: InsertEndKind) -> PathToolFsmState { let mut commit_transaction = false; match self.segment.as_mut() { From bf2afe903652aac03dc5fb5eabd31ea381e88b01 Mon Sep 17 00:00:00 2001 From: Daragh Downes Date: Mon, 21 Oct 2024 22:24:17 +0100 Subject: [PATCH 8/8] fix: add overlay draw message will now visibly select points when pressing space instantly as opposed to when its moved --- editor/src/messages/tool/tool_messages/path_tool.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/editor/src/messages/tool/tool_messages/path_tool.rs b/editor/src/messages/tool/tool_messages/path_tool.rs index b04cd1c546..d4f9c24dc0 100644 --- a/editor/src/messages/tool/tool_messages/path_tool.rs +++ b/editor/src/messages/tool/tool_messages/path_tool.rs @@ -630,6 +630,7 @@ impl Fsm for PathToolFsmState { tool_data.add_selected_points(tool_action_data.shape_editor.selected_points().cloned().collect()); tool_action_data.shape_editor.select_handles_and_anchor(&tool_action_data.document.network_interface); responses.add(PathToolMessage::SelectedPointUpdated); + responses.add(OverlaysMessage::Draw); PathToolFsmState::Dragging } (PathToolFsmState::Dragging, PathToolMessage::ResumeOriginalSelection) => {