From 61292500e6ad4cd303f3d77fe9d23ec08c713a1b Mon Sep 17 00:00:00 2001 From: 0HyperCube <78500760+0HyperCube@users.noreply.github.com> Date: Tue, 28 May 2024 09:09:48 +0100 Subject: [PATCH] Fix tool drawing start point offset when an artboard has a transform (#1763) * Fix offset artboard * Multiply in transform sometimes --- editor/src/messages/tool/tool_messages/artboard_tool.rs | 9 ++++++++- editor/src/messages/tool/tool_messages/brush_tool.rs | 2 +- editor/src/node_graph_executor.rs | 1 + node-graph/gcore/src/graphic_element/renderer.rs | 3 ++- node-graph/gcore/src/transform.rs | 2 +- 5 files changed, 13 insertions(+), 4 deletions(-) diff --git a/editor/src/messages/tool/tool_messages/artboard_tool.rs b/editor/src/messages/tool/tool_messages/artboard_tool.rs index 07b3f791fd..c1ef26b81f 100644 --- a/editor/src/messages/tool/tool_messages/artboard_tool.rs +++ b/editor/src/messages/tool/tool_messages/artboard_tool.rs @@ -157,7 +157,11 @@ impl ArtboardToolData { }; let center = from_center.then_some(bounds.center_of_transformation); - let (position, size) = movement.new_size(mouse_position, bounds.transform, center, constrain_square, None); + let (min, size) = movement.new_size(mouse_position, bounds.transform, center, constrain_square, None); + let max = min + size; + let position = min.min(max); + let size = (max - min).abs(); + responses.add(GraphOperationMessage::ResizeArtboard { id: self.selected_artboard.unwrap().to_node(), location: position.round().as_ivec2(), @@ -271,6 +275,9 @@ impl Fsm for ArtboardToolFsmState { let start = root_transform.transform_point2(start); let size = root_transform.transform_vector2(size); + let end = start + size; + let size = (start - end).abs(); + let start = start.min(end); if let Some(artboard) = tool_data.selected_artboard { responses.add(GraphOperationMessage::ResizeArtboard { diff --git a/editor/src/messages/tool/tool_messages/brush_tool.rs b/editor/src/messages/tool/tool_messages/brush_tool.rs index 07d24a836d..9e3ad8eee2 100644 --- a/editor/src/messages/tool/tool_messages/brush_tool.rs +++ b/editor/src/messages/tool/tool_messages/brush_tool.rs @@ -318,7 +318,7 @@ impl Fsm for BrushToolFsmState { let layer = loaded_layer.unwrap_or_else(|| new_brush_layer(document, responses)); tool_data.layer = Some(layer); - let parent = layer.parent(document.metadata()).unwrap_or_default(); + let parent = layer.parent(document.metadata()).unwrap_or_else(|| document.new_layer_parent(true)); let parent_transform = document.metadata().transform_to_viewport(parent).inverse().transform_point2(input.mouse.position); let layer_position = tool_data.transform.inverse().transform_point2(parent_transform); diff --git a/editor/src/node_graph_executor.rs b/editor/src/node_graph_executor.rs index 6b85e40bce..61487f8d46 100644 --- a/editor/src/node_graph_executor.rs +++ b/editor/src/node_graph_executor.rs @@ -339,6 +339,7 @@ impl NodeRuntime { None.or_else(|| try_downcast::(introspected_data.as_ref())) .or_else(|| try_downcast::>(introspected_data.as_ref())) .or_else(|| try_downcast::(introspected_data.as_ref())) + .or_else(|| try_downcast::(introspected_data.as_ref())) } { self.upstream_transforms.insert(parent_network_node_id, transform); } diff --git a/node-graph/gcore/src/graphic_element/renderer.rs b/node-graph/gcore/src/graphic_element/renderer.rs index ef54e9a564..a829c773ac 100644 --- a/node-graph/gcore/src/graphic_element/renderer.rs +++ b/node-graph/gcore/src/graphic_element/renderer.rs @@ -447,7 +447,8 @@ impl GraphicElementRendered for Artboard { } fn add_click_targets(&self, click_targets: &mut Vec) { - let subpath = Subpath::new_rect(self.location.as_dvec2(), self.location.as_dvec2() + self.dimensions.as_dvec2()); + let mut subpath = Subpath::new_rect(DVec2::ZERO, self.dimensions.as_dvec2()); + subpath.apply_transform(self.graphic_group.transform.inverse()); click_targets.push(ClickTarget { stroke_width: 0., subpath }); } diff --git a/node-graph/gcore/src/transform.rs b/node-graph/gcore/src/transform.rs index 400c39931b..01e4396bf7 100644 --- a/node-graph/gcore/src/transform.rs +++ b/node-graph/gcore/src/transform.rs @@ -127,7 +127,7 @@ impl TransformMut for VectorData { impl Transform for Artboard { fn transform(&self) -> DAffine2 { - DAffine2::from_translation(self.location.as_dvec2()) + DAffine2::from_translation(self.location.as_dvec2()) * self.graphic_group.transform } fn local_pivot(&self, pivot: DVec2) -> DVec2 { self.location.as_dvec2() + self.dimensions.as_dvec2() * pivot