diff --git a/editor/src/messages/portfolio/document/document_message_handler.rs b/editor/src/messages/portfolio/document/document_message_handler.rs index 502438fc3b..9131341cee 100644 --- a/editor/src/messages/portfolio/document/document_message_handler.rs +++ b/editor/src/messages/portfolio/document/document_message_handler.rs @@ -1652,6 +1652,14 @@ impl DocumentMessageHandler { } } + /// Finds the artboard that bounds the point in viewport space and be the container of any newly added layers. + pub fn new_layer_bounding_artboard(&self, ipp: &InputPreprocessorMessageHandler) -> LayerNodeIdentifier { + self.click_xray(ipp) + .filter(|layer| self.network_interface.is_artboard(&layer.to_node(), &[])) + .next() + .unwrap_or(LayerNodeIdentifier::ROOT_PARENT) + } + /// Finds the parent folder which, based on the current selections, should be the container of any newly added layers. pub fn new_layer_parent(&self, include_self: bool) -> LayerNodeIdentifier { self.network_interface diff --git a/editor/src/messages/tool/tool_messages/ellipse_tool.rs b/editor/src/messages/tool/tool_messages/ellipse_tool.rs index 04a9778f2a..801563a9c0 100644 --- a/editor/src/messages/tool/tool_messages/ellipse_tool.rs +++ b/editor/src/messages/tool/tool_messages/ellipse_tool.rs @@ -205,7 +205,7 @@ impl Fsm for EllipseToolFsmState { let node = node_type.node_template_input_override([None, Some(NodeInput::value(TaggedValue::F64(0.5), false)), Some(NodeInput::value(TaggedValue::F64(0.5), false))]); let nodes = vec![(NodeId(0), node)]; - let layer = graph_modification_utils::new_custom(NodeId::new(), nodes, document.new_layer_parent(true), responses); + let layer = graph_modification_utils::new_custom(NodeId::new(), nodes, document.new_layer_bounding_artboard(input), responses); responses.add(Message::StartBuffer); responses.add(GraphOperationMessage::TransformSet { layer, diff --git a/editor/src/messages/tool/tool_messages/freehand_tool.rs b/editor/src/messages/tool/tool_messages/freehand_tool.rs index 76d48ab170..7f31bcec3e 100644 --- a/editor/src/messages/tool/tool_messages/freehand_tool.rs +++ b/editor/src/messages/tool/tool_messages/freehand_tool.rs @@ -238,7 +238,7 @@ impl Fsm for FreehandToolFsmState { responses.add(DocumentMessage::DeselectAllLayers); - let parent = document.new_layer_parent(true); + let parent = document.new_layer_bounding_artboard(input); let node_type = resolve_document_node_type("Path").expect("Path node does not exist"); let node = node_type.default_node_template(); diff --git a/editor/src/messages/tool/tool_messages/line_tool.rs b/editor/src/messages/tool/tool_messages/line_tool.rs index 70a777e863..437820d676 100644 --- a/editor/src/messages/tool/tool_messages/line_tool.rs +++ b/editor/src/messages/tool/tool_messages/line_tool.rs @@ -186,7 +186,7 @@ impl Fsm for LineToolFsmState { ]); let nodes = vec![(NodeId(0), node)]; - let layer = graph_modification_utils::new_custom(NodeId::new(), nodes, document.new_layer_parent(false), responses); + let layer = graph_modification_utils::new_custom(NodeId::new(), nodes, document.new_layer_bounding_artboard(input), responses); responses.add(Message::StartBuffer); responses.add(GraphOperationMessage::TransformSet { layer, diff --git a/editor/src/messages/tool/tool_messages/pen_tool.rs b/editor/src/messages/tool/tool_messages/pen_tool.rs index 7e4c1fd814..e35ed2b0a9 100644 --- a/editor/src/messages/tool/tool_messages/pen_tool.rs +++ b/editor/src/messages/tool/tool_messages/pen_tool.rs @@ -492,7 +492,7 @@ impl PenToolData { let node_type = resolve_document_node_type("Path").expect("Path node does not exist"); let nodes = vec![(NodeId(0), node_type.default_node_template())]; - let parent = document.new_layer_parent(true); + let parent = document.new_layer_bounding_artboard(input); let layer = graph_modification_utils::new_custom(NodeId::new(), nodes, parent, responses); tool_options.fill.apply_fill(layer, responses); tool_options.stroke.apply_stroke(tool_options.line_weight, layer, responses); diff --git a/editor/src/messages/tool/tool_messages/polygon_tool.rs b/editor/src/messages/tool/tool_messages/polygon_tool.rs index aa45b56637..e35f5ab990 100644 --- a/editor/src/messages/tool/tool_messages/polygon_tool.rs +++ b/editor/src/messages/tool/tool_messages/polygon_tool.rs @@ -264,7 +264,7 @@ impl Fsm for PolygonToolFsmState { let nodes = vec![(NodeId(0), node)]; - let layer = graph_modification_utils::new_custom(NodeId::new(), nodes, document.new_layer_parent(false), responses); + let layer = graph_modification_utils::new_custom(NodeId::new(), nodes, document.new_layer_bounding_artboard(input), responses); responses.add(Message::StartBuffer); responses.add(GraphOperationMessage::TransformSet { layer, diff --git a/editor/src/messages/tool/tool_messages/rectangle_tool.rs b/editor/src/messages/tool/tool_messages/rectangle_tool.rs index 82eb3ecdca..fd36a0fceb 100644 --- a/editor/src/messages/tool/tool_messages/rectangle_tool.rs +++ b/editor/src/messages/tool/tool_messages/rectangle_tool.rs @@ -211,7 +211,7 @@ impl Fsm for RectangleToolFsmState { let node = node_type.node_template_input_override([None, Some(NodeInput::value(TaggedValue::F64(1.), false)), Some(NodeInput::value(TaggedValue::F64(1.), false))]); let nodes = vec![(NodeId(0), node)]; - let layer = graph_modification_utils::new_custom(NodeId::new(), nodes, document.new_layer_parent(true), responses); + let layer = graph_modification_utils::new_custom(NodeId::new(), nodes, document.new_layer_bounding_artboard(input), responses); responses.add(Message::StartBuffer); responses.add(GraphOperationMessage::TransformSet { layer, diff --git a/editor/src/messages/tool/tool_messages/spline_tool.rs b/editor/src/messages/tool/tool_messages/spline_tool.rs index 05dfb09abf..87acb17196 100644 --- a/editor/src/messages/tool/tool_messages/spline_tool.rs +++ b/editor/src/messages/tool/tool_messages/spline_tool.rs @@ -203,7 +203,7 @@ impl Fsm for SplineToolFsmState { responses.add(DocumentMessage::StartTransaction); responses.add(DocumentMessage::DeselectAllLayers); - let parent = document.new_layer_parent(true); + let parent = document.new_layer_bounding_artboard(input); tool_data.weight = tool_options.line_weight; diff --git a/editor/src/messages/tool/tool_messages/text_tool.rs b/editor/src/messages/tool/tool_messages/text_tool.rs index 78d90a7b3c..9d5978e8aa 100644 --- a/editor/src/messages/tool/tool_messages/text_tool.rs +++ b/editor/src/messages/tool/tool_messages/text_tool.rs @@ -328,7 +328,7 @@ impl TextToolData { size: editing_text.font_size, line_height_ratio: editing_text.line_height_ratio, character_spacing: editing_text.character_spacing, - parent: document.new_layer_parent(true), + parent: document.new_layer_bounding_artboard(input), insert_index: 0, }); responses.add(Message::StartBuffer);