From 761393dd1ee3a1b77223f1d2ae248e58c5764582 Mon Sep 17 00:00:00 2001 From: Kavin Date: Wed, 2 Jul 2025 00:25:05 +0530 Subject: [PATCH 1/7] Add offset overlay to select tool --- .../messages/tool/tool_messages/select_tool.rs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/editor/src/messages/tool/tool_messages/select_tool.rs b/editor/src/messages/tool/tool_messages/select_tool.rs index 76158d08e5..09ab40919c 100644 --- a/editor/src/messages/tool/tool_messages/select_tool.rs +++ b/editor/src/messages/tool/tool_messages/select_tool.rs @@ -4,7 +4,7 @@ use super::tool_prelude::*; use crate::consts::*; use crate::messages::input_mapper::utility_types::input_mouse::ViewportPosition; use crate::messages::portfolio::document::graph_operation::utility_types::TransformIn; -use crate::messages::portfolio::document::overlays::utility_types::OverlayContext; +use crate::messages::portfolio::document::overlays::utility_types::{OverlayContext, Pivot as OverlayPivot}; use crate::messages::portfolio::document::utility_types::document_metadata::{DocumentMetadata, LayerNodeIdentifier}; use crate::messages::portfolio::document::utility_types::misc::{AlignAggregate, AlignAxis, FlipAxis, GroupFolderType}; use crate::messages::portfolio::document::utility_types::network_interface::{FlowType, NodeNetworkInterface, NodeTemplate}; @@ -836,6 +836,20 @@ impl Fsm for SelectToolFsmState { (SelectionShapeType::Box, _) => overlay_context.quad(quad, None, fill_color), (SelectionShapeType::Lasso, _) => overlay_context.polygon(polygon, None, fill_color), } + + if selection_shape == SelectionShapeType::Box { + let document_start = document.metadata().document_to_viewport.inverse().transform_point2(quad.top_left()); + let document_current = document.metadata().document_to_viewport.inverse().transform_point2(quad.bottom_right()); + let width = format!("{:.2}", document_current.x - document_start.x); + let height = format!("{:.2}", document_current.y - document_start.y); + let x_transform = DAffine2::from_translation((quad.top_left() + quad.top_right()) / 2.); + let y_transform = DAffine2::from_translation((quad.top_left() + quad.bottom_left()) / 2.); + let width_pivot = if document_current.y >= document_start.y { OverlayPivot::End } else { OverlayPivot::Start }; + let height_pivot = if document_current.x >= document_start.x { OverlayPivot::End } else { OverlayPivot::Start }; + + overlay_context.text(&width, COLOR_OVERLAY_BLUE, None, x_transform, 4., [OverlayPivot::Middle, width_pivot]); + overlay_context.text(&height, COLOR_OVERLAY_BLUE, None, y_transform, 3., [height_pivot, OverlayPivot::Middle]); + } } self } From b1be47620b648b1ad79200fc982f199a9d9959a5 Mon Sep 17 00:00:00 2001 From: Kavin Date: Wed, 2 Jul 2025 10:45:27 +0530 Subject: [PATCH 2/7] Add overlay to Dragging --- .../tool/tool_messages/select_tool.rs | 31 +++++++++++-------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/editor/src/messages/tool/tool_messages/select_tool.rs b/editor/src/messages/tool/tool_messages/select_tool.rs index 09ab40919c..28b4db2989 100644 --- a/editor/src/messages/tool/tool_messages/select_tool.rs +++ b/editor/src/messages/tool/tool_messages/select_tool.rs @@ -836,21 +836,26 @@ impl Fsm for SelectToolFsmState { (SelectionShapeType::Box, _) => overlay_context.quad(quad, None, fill_color), (SelectionShapeType::Lasso, _) => overlay_context.polygon(polygon, None, fill_color), } + } - if selection_shape == SelectionShapeType::Box { - let document_start = document.metadata().document_to_viewport.inverse().transform_point2(quad.top_left()); - let document_current = document.metadata().document_to_viewport.inverse().transform_point2(quad.bottom_right()); - let width = format!("{:.2}", document_current.x - document_start.x); - let height = format!("{:.2}", document_current.y - document_start.y); - let x_transform = DAffine2::from_translation((quad.top_left() + quad.top_right()) / 2.); - let y_transform = DAffine2::from_translation((quad.top_left() + quad.bottom_left()) / 2.); - let width_pivot = if document_current.y >= document_start.y { OverlayPivot::End } else { OverlayPivot::Start }; - let height_pivot = if document_current.x >= document_start.x { OverlayPivot::End } else { OverlayPivot::Start }; - - overlay_context.text(&width, COLOR_OVERLAY_BLUE, None, x_transform, 4., [OverlayPivot::Middle, width_pivot]); - overlay_context.text(&height, COLOR_OVERLAY_BLUE, None, y_transform, 3., [height_pivot, OverlayPivot::Middle]); - } + if let Self::Dragging { .. } = self { + let quad = Quad::from_box([tool_data.drag_start, tool_data.drag_current]); + + overlay_context.dashed_quad(quad, Some(COLOR_OVERLAY_BLUE), None, Some(4.), Some(4.), Some(0.5)); + + let document_start = document.metadata().document_to_viewport.inverse().transform_point2(quad.top_left()); + let document_current = document.metadata().document_to_viewport.inverse().transform_point2(quad.bottom_right()); + let width = format!("{:.2}", document_current.x - document_start.x); + let height = format!("{:.2}", document_current.y - document_start.y); + let x_transform = DAffine2::from_translation((quad.top_left() + quad.top_right()) / 2.); + let y_transform = DAffine2::from_translation((quad.top_left() + quad.bottom_left()) / 2.); + let width_pivot = if document_current.y >= document_start.y { OverlayPivot::End } else { OverlayPivot::Start }; + let height_pivot = if document_current.x >= document_start.x { OverlayPivot::End } else { OverlayPivot::Start }; + + overlay_context.text(&width, COLOR_OVERLAY_BLUE, None, x_transform, 4., [OverlayPivot::Middle, width_pivot]); + overlay_context.text(&height, COLOR_OVERLAY_BLUE, None, y_transform, 3., [height_pivot, OverlayPivot::Middle]); } + self } (_, SelectToolMessage::EditLayer) => { From 9bf778c06e088f8d6819c261028c1d3ac13adf60 Mon Sep 17 00:00:00 2001 From: Kavin Date: Thu, 3 Jul 2025 11:12:43 +0530 Subject: [PATCH 3/7] Add axis align behavior --- .../tool/tool_messages/select_tool.rs | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/editor/src/messages/tool/tool_messages/select_tool.rs b/editor/src/messages/tool/tool_messages/select_tool.rs index 28b4db2989..e195ac5853 100644 --- a/editor/src/messages/tool/tool_messages/select_tool.rs +++ b/editor/src/messages/tool/tool_messages/select_tool.rs @@ -840,20 +840,29 @@ impl Fsm for SelectToolFsmState { if let Self::Dragging { .. } = self { let quad = Quad::from_box([tool_data.drag_start, tool_data.drag_current]); - - overlay_context.dashed_quad(quad, Some(COLOR_OVERLAY_BLUE), None, Some(4.), Some(4.), Some(0.5)); - let document_start = document.metadata().document_to_viewport.inverse().transform_point2(quad.top_left()); let document_current = document.metadata().document_to_viewport.inverse().transform_point2(quad.bottom_right()); let width = format!("{:.2}", document_current.x - document_start.x); let height = format!("{:.2}", document_current.y - document_start.y); let x_transform = DAffine2::from_translation((quad.top_left() + quad.top_right()) / 2.); let y_transform = DAffine2::from_translation((quad.top_left() + quad.bottom_left()) / 2.); - let width_pivot = if document_current.y >= document_start.y { OverlayPivot::End } else { OverlayPivot::Start }; - let height_pivot = if document_current.x >= document_start.x { OverlayPivot::End } else { OverlayPivot::Start }; - overlay_context.text(&width, COLOR_OVERLAY_BLUE, None, x_transform, 4., [OverlayPivot::Middle, width_pivot]); - overlay_context.text(&height, COLOR_OVERLAY_BLUE, None, y_transform, 3., [height_pivot, OverlayPivot::Middle]); + if tool_data.axis_align { + if document_current.x != document_start.x { + overlay_context.dashed_line(quad.top_left(), quad.top_right(), Some(COLOR_OVERLAY_BLUE), None, Some(4.), Some(4.), Some(0.5)); + overlay_context.text(&width, COLOR_OVERLAY_BLUE, None, x_transform, 4., [OverlayPivot::Middle, OverlayPivot::End]); + } else { + overlay_context.dashed_line(quad.top_left(), quad.bottom_left(), Some(COLOR_OVERLAY_BLUE), None, Some(4.), Some(4.), Some(0.5)); + overlay_context.text(&height, COLOR_OVERLAY_BLUE, None, y_transform, 4., [OverlayPivot::End, OverlayPivot::Middle]); + } + } else { + let width_pivot = if document_current.y >= document_start.y { OverlayPivot::End } else { OverlayPivot::Start }; + let height_pivot = if document_current.x >= document_start.x { OverlayPivot::End } else { OverlayPivot::Start }; + + overlay_context.dashed_quad(quad, Some(COLOR_OVERLAY_BLUE), None, Some(4.), Some(4.), Some(0.5)); + overlay_context.text(&width, COLOR_OVERLAY_BLUE, None, x_transform, 4., [OverlayPivot::Middle, width_pivot]); + overlay_context.text(&height, COLOR_OVERLAY_BLUE, None, y_transform, 3., [height_pivot, OverlayPivot::Middle]); + } } self From 0df55a1c3772d491298d589e4332ea7d101f3595 Mon Sep 17 00:00:00 2001 From: Kavin Date: Thu, 3 Jul 2025 12:27:37 +0530 Subject: [PATCH 4/7] Style changes --- .../tool/tool_messages/select_tool.rs | 37 +++++++++---------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/editor/src/messages/tool/tool_messages/select_tool.rs b/editor/src/messages/tool/tool_messages/select_tool.rs index e195ac5853..8bd33c2067 100644 --- a/editor/src/messages/tool/tool_messages/select_tool.rs +++ b/editor/src/messages/tool/tool_messages/select_tool.rs @@ -842,26 +842,25 @@ impl Fsm for SelectToolFsmState { let quad = Quad::from_box([tool_data.drag_start, tool_data.drag_current]); let document_start = document.metadata().document_to_viewport.inverse().transform_point2(quad.top_left()); let document_current = document.metadata().document_to_viewport.inverse().transform_point2(quad.bottom_right()); - let width = format!("{:.2}", document_current.x - document_start.x); - let height = format!("{:.2}", document_current.y - document_start.y); - let x_transform = DAffine2::from_translation((quad.top_left() + quad.top_right()) / 2.); - let y_transform = DAffine2::from_translation((quad.top_left() + quad.bottom_left()) / 2.); - - if tool_data.axis_align { - if document_current.x != document_start.x { - overlay_context.dashed_line(quad.top_left(), quad.top_right(), Some(COLOR_OVERLAY_BLUE), None, Some(4.), Some(4.), Some(0.5)); - overlay_context.text(&width, COLOR_OVERLAY_BLUE, None, x_transform, 4., [OverlayPivot::Middle, OverlayPivot::End]); - } else { - overlay_context.dashed_line(quad.top_left(), quad.bottom_left(), Some(COLOR_OVERLAY_BLUE), None, Some(4.), Some(4.), Some(0.5)); - overlay_context.text(&height, COLOR_OVERLAY_BLUE, None, y_transform, 4., [OverlayPivot::End, OverlayPivot::Middle]); - } - } else { - let width_pivot = if document_current.y >= document_start.y { OverlayPivot::End } else { OverlayPivot::Start }; - let height_pivot = if document_current.x >= document_start.x { OverlayPivot::End } else { OverlayPivot::Start }; - overlay_context.dashed_quad(quad, Some(COLOR_OVERLAY_BLUE), None, Some(4.), Some(4.), Some(0.5)); - overlay_context.text(&width, COLOR_OVERLAY_BLUE, None, x_transform, 4., [OverlayPivot::Middle, width_pivot]); - overlay_context.text(&height, COLOR_OVERLAY_BLUE, None, y_transform, 3., [height_pivot, OverlayPivot::Middle]); + if document_current.x != document_start.x { + overlay_context.dashed_line(quad.top_left(), quad.top_right(), None, None, Some(2.), Some(2.), Some(0.5)); + + let width = format!("{:.2}", document_current.x - document_start.x); + let x_transform = DAffine2::from_translation((quad.top_left() + quad.top_right()) / 2.); + overlay_context.text(&width, COLOR_OVERLAY_BLUE, None, x_transform, 4., [OverlayPivot::Middle, OverlayPivot::End]); + } + if document_current.y != document_start.y { + overlay_context.dashed_line(quad.top_left(), quad.bottom_left(), None, None, Some(2.), Some(2.), Some(0.5)); + + let height = format!("{:.2}", document_current.y - document_start.y); + let y_transform = DAffine2::from_translation((quad.top_left() + quad.bottom_left()) / 2.); + let height_pivot = if document_current.x >= document_start.x { OverlayPivot::Start } else { OverlayPivot::End }; + overlay_context.text(&height, COLOR_OVERLAY_BLUE, None, y_transform, 4., [height_pivot, OverlayPivot::Middle]); + } + if !tool_data.axis_align && document_start.x != document_current.x && document_start.y != document_current.y { + overlay_context.line(quad.top_right(), quad.bottom_right(), None, None); + overlay_context.line(quad.bottom_left(), quad.bottom_right(), None, None); } } From 164a279b735f39e39c84ebf1ae3594dbf5e8c7c9 Mon Sep 17 00:00:00 2001 From: Kavin Date: Fri, 4 Jul 2025 11:13:25 +0530 Subject: [PATCH 5/7] Add trim to string --- editor/src/messages/tool/tool_messages/select_tool.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/editor/src/messages/tool/tool_messages/select_tool.rs b/editor/src/messages/tool/tool_messages/select_tool.rs index 8bd33c2067..4dcbf1a2ec 100644 --- a/editor/src/messages/tool/tool_messages/select_tool.rs +++ b/editor/src/messages/tool/tool_messages/select_tool.rs @@ -846,17 +846,17 @@ impl Fsm for SelectToolFsmState { if document_current.x != document_start.x { overlay_context.dashed_line(quad.top_left(), quad.top_right(), None, None, Some(2.), Some(2.), Some(0.5)); - let width = format!("{:.2}", document_current.x - document_start.x); + let width = format!("{:.2}", document_current.x - document_start.x).trim_end_matches('0').trim_end_matches('.').to_string(); let x_transform = DAffine2::from_translation((quad.top_left() + quad.top_right()) / 2.); overlay_context.text(&width, COLOR_OVERLAY_BLUE, None, x_transform, 4., [OverlayPivot::Middle, OverlayPivot::End]); } if document_current.y != document_start.y { overlay_context.dashed_line(quad.top_left(), quad.bottom_left(), None, None, Some(2.), Some(2.), Some(0.5)); - let height = format!("{:.2}", document_current.y - document_start.y); + let height = format!("{:.2}", document_current.y - document_start.y).trim_end_matches('0').trim_end_matches('.').to_string(); let y_transform = DAffine2::from_translation((quad.top_left() + quad.bottom_left()) / 2.); let height_pivot = if document_current.x >= document_start.x { OverlayPivot::Start } else { OverlayPivot::End }; - overlay_context.text(&height, COLOR_OVERLAY_BLUE, None, y_transform, 4., [height_pivot, OverlayPivot::Middle]); + overlay_context.text(&height, COLOR_OVERLAY_BLUE, None, y_transform, 3., [height_pivot, OverlayPivot::Middle]); } if !tool_data.axis_align && document_start.x != document_current.x && document_start.y != document_current.y { overlay_context.line(quad.top_right(), quad.bottom_right(), None, None); From 9b15e7812edfc5561bd56c4ee0620520bf5ddaeb Mon Sep 17 00:00:00 2001 From: Kavin Date: Sun, 6 Jul 2025 18:12:40 +0530 Subject: [PATCH 6/7] reduce code duplication --- .../document/overlays/utility_types.rs | 28 ++++++++++++++++ .../tool/tool_messages/select_tool.rs | 22 ++----------- .../transform_layer_message_handler.rs | 32 ++++--------------- 3 files changed, 37 insertions(+), 45 deletions(-) diff --git a/editor/src/messages/portfolio/document/overlays/utility_types.rs b/editor/src/messages/portfolio/document/overlays/utility_types.rs index a17d711a38..ef776d20f7 100644 --- a/editor/src/messages/portfolio/document/overlays/utility_types.rs +++ b/editor/src/messages/portfolio/document/overlays/utility_types.rs @@ -780,6 +780,34 @@ impl OverlayContext { self.render_context.fill_text(text, 0., 0.).expect("Failed to draw the text at the calculated position"); self.render_context.reset_transform().expect("Failed to reset the render context transform"); } + + pub fn grab_box(&mut self, translation: DVec2, quad: Quad, typed_string: Option) { + if translation.x.abs() > 1e-3 { + self.dashed_line(quad.top_left(), quad.top_right(), None, None, Some(2.), Some(2.), Some(0.5)); + + let width = match typed_string { + Some(ref typed_string) => typed_string, + None => &format!("{:.2}", translation.x).trim_end_matches('0').trim_end_matches('.').to_string(), + }; + let x_transform = DAffine2::from_translation((quad.top_left() + quad.top_right()) / 2.); + self.text(width, COLOR_OVERLAY_BLUE, None, x_transform, 4., [Pivot::Middle, Pivot::End]); + } + if translation.y.abs() > 1e-3 { + self.dashed_line(quad.top_left(), quad.bottom_left(), None, None, Some(2.), Some(2.), Some(0.5)); + + let height = match typed_string { + Some(ref typed_string) => typed_string, + None => &format!("{:.2}", translation.y).trim_end_matches('0').trim_end_matches('.').to_string(), + }; + let y_transform = DAffine2::from_translation((quad.top_left() + quad.bottom_left()) / 2.); + let height_pivot = if translation.x > -1e-3 { Pivot::Start } else { Pivot::End }; + self.text(height, COLOR_OVERLAY_BLUE, None, y_transform, 3., [height_pivot, Pivot::Middle]); + } + if translation.x.abs() > 1e-3 && translation.y.abs() > 1e-3 { + self.line(quad.top_right(), quad.bottom_right(), None, None); + self.line(quad.bottom_left(), quad.bottom_right(), None, None); + } + } } pub enum Pivot { diff --git a/editor/src/messages/tool/tool_messages/select_tool.rs b/editor/src/messages/tool/tool_messages/select_tool.rs index 4dcbf1a2ec..69b44b5ff0 100644 --- a/editor/src/messages/tool/tool_messages/select_tool.rs +++ b/editor/src/messages/tool/tool_messages/select_tool.rs @@ -4,7 +4,7 @@ use super::tool_prelude::*; use crate::consts::*; use crate::messages::input_mapper::utility_types::input_mouse::ViewportPosition; use crate::messages::portfolio::document::graph_operation::utility_types::TransformIn; -use crate::messages::portfolio::document::overlays::utility_types::{OverlayContext, Pivot as OverlayPivot}; +use crate::messages::portfolio::document::overlays::utility_types::OverlayContext; use crate::messages::portfolio::document::utility_types::document_metadata::{DocumentMetadata, LayerNodeIdentifier}; use crate::messages::portfolio::document::utility_types::misc::{AlignAggregate, AlignAxis, FlipAxis, GroupFolderType}; use crate::messages::portfolio::document::utility_types::network_interface::{FlowType, NodeNetworkInterface, NodeTemplate}; @@ -843,25 +843,7 @@ impl Fsm for SelectToolFsmState { let document_start = document.metadata().document_to_viewport.inverse().transform_point2(quad.top_left()); let document_current = document.metadata().document_to_viewport.inverse().transform_point2(quad.bottom_right()); - if document_current.x != document_start.x { - overlay_context.dashed_line(quad.top_left(), quad.top_right(), None, None, Some(2.), Some(2.), Some(0.5)); - - let width = format!("{:.2}", document_current.x - document_start.x).trim_end_matches('0').trim_end_matches('.').to_string(); - let x_transform = DAffine2::from_translation((quad.top_left() + quad.top_right()) / 2.); - overlay_context.text(&width, COLOR_OVERLAY_BLUE, None, x_transform, 4., [OverlayPivot::Middle, OverlayPivot::End]); - } - if document_current.y != document_start.y { - overlay_context.dashed_line(quad.top_left(), quad.bottom_left(), None, None, Some(2.), Some(2.), Some(0.5)); - - let height = format!("{:.2}", document_current.y - document_start.y).trim_end_matches('0').trim_end_matches('.').to_string(); - let y_transform = DAffine2::from_translation((quad.top_left() + quad.bottom_left()) / 2.); - let height_pivot = if document_current.x >= document_start.x { OverlayPivot::Start } else { OverlayPivot::End }; - overlay_context.text(&height, COLOR_OVERLAY_BLUE, None, y_transform, 3., [height_pivot, OverlayPivot::Middle]); - } - if !tool_data.axis_align && document_start.x != document_current.x && document_start.y != document_current.y { - overlay_context.line(quad.top_right(), quad.bottom_right(), None, None); - overlay_context.line(quad.bottom_left(), quad.bottom_right(), None, None); - } + overlay_context.grab_box(document_current - document_start, quad, None); } self diff --git a/editor/src/messages/tool/transform_layer/transform_layer_message_handler.rs b/editor/src/messages/tool/transform_layer/transform_layer_message_handler.rs index 104f1a66a8..e660b8b3ee 100644 --- a/editor/src/messages/tool/transform_layer/transform_layer_message_handler.rs +++ b/editor/src/messages/tool/transform_layer/transform_layer_message_handler.rs @@ -256,32 +256,14 @@ impl MessageHandler> for TransformLayer let translation = translation.to_dvec(self.initial_transform, self.increments); let viewport_translate = document_to_viewport.transform_vector2(translation); let pivot = document_to_viewport.transform_point2(self.grab_target); - let quad = Quad::from_box([pivot, pivot + viewport_translate]).0; - let e1 = (self.layer_bounding_box.0[1] - self.layer_bounding_box.0[0]).normalize_or(DVec2::X); - - if matches!(axis_constraint, Axis::Both | Axis::X) && translation.x != 0. { - let end = if self.local { (quad[1] - quad[0]).rotate(e1) + quad[0] } else { quad[1] }; - overlay_context.dashed_line(quad[0], end, None, None, Some(2.), Some(2.), Some(0.5)); - - let x_transform = DAffine2::from_translation((quad[0] + end) / 2.); - overlay_context.text(&format_rounded(translation.x, 3), COLOR_OVERLAY_BLUE, None, x_transform, 4., [Pivot::Middle, Pivot::End]); - } - - if matches!(axis_constraint, Axis::Both | Axis::Y) && translation.y != 0. { - let end = if self.local { (quad[3] - quad[0]).rotate(e1) + quad[0] } else { quad[3] }; - overlay_context.dashed_line(quad[0], end, None, None, Some(2.), Some(2.), Some(0.5)); - let x_parameter = viewport_translate.x.clamp(-1., 1.); - let y_transform = DAffine2::from_translation((quad[0] + end) / 2. + x_parameter * DVec2::X * 0.); - let pivot_selection = if x_parameter >= -1e-3 { Pivot::Start } else { Pivot::End }; - if axis_constraint != Axis::Both || self.typing.digits.is_empty() || !self.transform_operation.can_begin_typing() { - overlay_context.text(&format_rounded(translation.y, 2), COLOR_OVERLAY_BLUE, None, y_transform, 3., [pivot_selection, Pivot::Middle]); - } - } + let quad = Quad::from_box([pivot, pivot + viewport_translate]); + let typed_string = if self.typing.digits.is_empty() || !self.transform_operation.can_begin_typing() { + None + } else { + Some(self.typing.string.clone()) + }; - if matches!(axis_constraint, Axis::Both) && translation.x != 0. && translation.y != 0. { - overlay_context.line(quad[1], quad[2], None, None); - overlay_context.line(quad[3], quad[2], None, None); - } + overlay_context.grab_box(translation, quad, typed_string); } TransformOperation::Scaling(scale) => { let scale = scale.to_f64(self.increments); From 13e2243d2080dbcc9a9f542776981eea000d5962 Mon Sep 17 00:00:00 2001 From: Keavon Chambers Date: Wed, 9 Jul 2025 03:40:15 -0700 Subject: [PATCH 7/7] Code review --- .../document/node_graph/node_properties.rs | 5 ++--- .../portfolio/document/overlays/utility_types.rs | 4 +++- .../src/messages/tool/tool_messages/select_tool.rs | 2 +- .../transform_layer_message_handler.rs | 13 +++++-------- 4 files changed, 11 insertions(+), 13 deletions(-) diff --git a/editor/src/messages/portfolio/document/node_graph/node_properties.rs b/editor/src/messages/portfolio/document/node_graph/node_properties.rs index 18a7f82909..9551ed2094 100644 --- a/editor/src/messages/portfolio/document/node_graph/node_properties.rs +++ b/editor/src/messages/portfolio/document/node_graph/node_properties.rs @@ -1274,6 +1274,7 @@ pub(crate) fn rectangle_properties(node_id: NodeId, context: &mut NodeProperties let mut corner_radius_row_2 = vec![Separator::new(SeparatorType::Unrelated).widget_holder()]; corner_radius_row_2.push(TextLabel::new("").widget_holder()); + add_blank_assist(&mut corner_radius_row_2); let document_node = match get_document_node(node_id, context) { Ok(document_node) => document_node, @@ -1381,8 +1382,6 @@ pub(crate) fn rectangle_properties(node_id: NodeId, context: &mut NodeProperties // Size Y let size_y = number_widget(ParameterWidgetsInfo::new(node_id, HeightInput::INDEX, true, context), NumberInput::default()); - add_blank_assist(&mut corner_radius_row_2); - // Clamped let clamped = bool_widget(ParameterWidgetsInfo::new(node_id, ClampedInput::INDEX, true, context), CheckboxInput::default()); @@ -1436,7 +1435,7 @@ pub(crate) fn generate_node_properties(node_id: NodeId, context: &mut NodeProper if let Some(field) = graphene_std::registry::NODE_METADATA .lock() .unwrap() - .get(&proto_node_identifier) + .get(proto_node_identifier) .and_then(|metadata| metadata.fields.get(input_index)) { number_options = (field.number_min, field.number_max, field.number_mode_range); diff --git a/editor/src/messages/portfolio/document/overlays/utility_types.rs b/editor/src/messages/portfolio/document/overlays/utility_types.rs index da25a7e2ac..3d12ba4961 100644 --- a/editor/src/messages/portfolio/document/overlays/utility_types.rs +++ b/editor/src/messages/portfolio/document/overlays/utility_types.rs @@ -815,7 +815,7 @@ impl OverlayContext { self.render_context.reset_transform().expect("Failed to reset the render context transform"); } - pub fn grab_box(&mut self, translation: DVec2, quad: Quad, typed_string: Option) { + pub fn translation_box(&mut self, translation: DVec2, quad: Quad, typed_string: Option) { if translation.x.abs() > 1e-3 { self.dashed_line(quad.top_left(), quad.top_right(), None, None, Some(2.), Some(2.), Some(0.5)); @@ -826,6 +826,7 @@ impl OverlayContext { let x_transform = DAffine2::from_translation((quad.top_left() + quad.top_right()) / 2.); self.text(width, COLOR_OVERLAY_BLUE, None, x_transform, 4., [Pivot::Middle, Pivot::End]); } + if translation.y.abs() > 1e-3 { self.dashed_line(quad.top_left(), quad.bottom_left(), None, None, Some(2.), Some(2.), Some(0.5)); @@ -837,6 +838,7 @@ impl OverlayContext { let height_pivot = if translation.x > -1e-3 { Pivot::Start } else { Pivot::End }; self.text(height, COLOR_OVERLAY_BLUE, None, y_transform, 3., [height_pivot, Pivot::Middle]); } + if translation.x.abs() > 1e-3 && translation.y.abs() > 1e-3 { self.line(quad.top_right(), quad.bottom_right(), None, None); self.line(quad.bottom_left(), quad.bottom_right(), None, None); diff --git a/editor/src/messages/tool/tool_messages/select_tool.rs b/editor/src/messages/tool/tool_messages/select_tool.rs index ec884d4a2d..e6f4a5d7a3 100644 --- a/editor/src/messages/tool/tool_messages/select_tool.rs +++ b/editor/src/messages/tool/tool_messages/select_tool.rs @@ -979,7 +979,7 @@ impl Fsm for SelectToolFsmState { let document_start = document.metadata().document_to_viewport.inverse().transform_point2(quad.top_left()); let document_current = document.metadata().document_to_viewport.inverse().transform_point2(quad.bottom_right()); - overlay_context.grab_box(document_current - document_start, quad, None); + overlay_context.translation_box(document_current - document_start, quad, None); } self diff --git a/editor/src/messages/tool/transform_layer/transform_layer_message_handler.rs b/editor/src/messages/tool/transform_layer/transform_layer_message_handler.rs index 9022f812c6..b9b9880e98 100644 --- a/editor/src/messages/tool/transform_layer/transform_layer_message_handler.rs +++ b/editor/src/messages/tool/transform_layer/transform_layer_message_handler.rs @@ -318,19 +318,16 @@ impl MessageHandler> for TransformLayer TransformOperation::Grabbing(translation) => { let translation = translation.to_dvec(self.initial_transform, self.increments); let viewport_translate = document_to_viewport.transform_vector2(translation); + let pivot = document_to_viewport.transform_point2(self.grab_target); + let quad = Quad::from_box([pivot, pivot + viewport_translate]); + responses.add(SelectToolMessage::PivotShift { offset: Some(viewport_translate), flush: false, }); - let pivot = document_to_viewport.transform_point2(self.grab_target); - let quad = Quad::from_box([pivot, pivot + viewport_translate]); - let typed_string = if self.typing.digits.is_empty() || !self.transform_operation.can_begin_typing() { - None - } else { - Some(self.typing.string.clone()) - }; - overlay_context.grab_box(translation, quad, typed_string); + let typed_string = (!self.typing.digits.is_empty() && self.transform_operation.can_begin_typing()).then(|| self.typing.string.clone()); + overlay_context.translation_box(translation, quad, typed_string); } TransformOperation::Scaling(scale) => { let scale = scale.to_f64(self.increments);