From e55578a01670854ed77941e84bc0f76aa9aedd1e Mon Sep 17 00:00:00 2001 From: Shyam Jayakannan <120047549+shyamjayakannan@users.noreply.github.com> Date: Thu, 18 Apr 2024 10:18:29 +0530 Subject: [PATCH] Fix interactive outlining of layers within the Select tool's box selection (#1727) * changes made to correct outlining behavior * Comment fixups --------- Co-authored-by: Keavon Chambers --- .../tool/tool_messages/select_tool.rs | 27 ++++++++++++------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/editor/src/messages/tool/tool_messages/select_tool.rs b/editor/src/messages/tool/tool_messages/select_tool.rs index a8725a7e..000214a7 100644 --- a/editor/src/messages/tool/tool_messages/select_tool.rs +++ b/editor/src/messages/tool/tool_messages/select_tool.rs @@ -407,13 +407,6 @@ impl Fsm for SelectToolFsmState { overlay_context.outline(document.metadata().layer_outline(layer), document.metadata().transform_to_viewport(layer)); } - // Get the layer the user is hovering over - let click = document.click(input.mouse.position, &document.network); - let not_selected_click = click.filter(|&hovered_layer| !document.selected_nodes.selected_layers_contains(hovered_layer, document.metadata())); - if let Some(layer) = not_selected_click { - overlay_context.outline(document.metadata().layer_outline(layer), document.metadata().transform_to_viewport(layer)); - } - // Update bounds let transform = document .selected_nodes @@ -444,9 +437,25 @@ impl Fsm for SelectToolFsmState { // Update pivot tool_data.pivot.update_pivot(document, &mut overlay_context); - // Update dragging box + // Check if the tool is in box selection mode if matches!(self, Self::DrawingBox { .. }) { - overlay_context.quad(Quad::from_box([tool_data.drag_start, tool_data.drag_current])); + // Get the updated selection box bounds + let quad = Quad::from_box([tool_data.drag_start, tool_data.drag_current]); + + // Draw outline visualizations on the layers to be selected + for layer in document.intersect_quad(quad, &document.network) { + overlay_context.outline(document.metadata().layer_outline(layer), document.metadata().transform_to_viewport(layer)); + } + + // Update the selection box + overlay_context.quad(quad); + } else { + // Get the layer the user is hovering over + let click = document.click(input.mouse.position, &document.network); + let not_selected_click = click.filter(|&hovered_layer| !document.selected_nodes.selected_layers_contains(hovered_layer, document.metadata())); + if let Some(layer) = not_selected_click { + overlay_context.outline(document.metadata().layer_outline(layer), document.metadata().transform_to_viewport(layer)); + } } self