Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Automatically place layers into the artboard they're drawn inside of #2110

Merged
merged 5 commits into from
Dec 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion editor/src/messages/tool/tool_messages/ellipse_tool.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
2 changes: 1 addition & 1 deletion editor/src/messages/tool/tool_messages/freehand_tool.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
2 changes: 1 addition & 1 deletion editor/src/messages/tool/tool_messages/line_tool.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
2 changes: 1 addition & 1 deletion editor/src/messages/tool/tool_messages/pen_tool.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
2 changes: 1 addition & 1 deletion editor/src/messages/tool/tool_messages/polygon_tool.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
2 changes: 1 addition & 1 deletion editor/src/messages/tool/tool_messages/rectangle_tool.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
2 changes: 1 addition & 1 deletion editor/src/messages/tool/tool_messages/spline_tool.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down
2 changes: 1 addition & 1 deletion editor/src/messages/tool/tool_messages/text_tool.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
Loading