Skip to content

Commit

Permalink
Automatically place layers into the artboard they're drawn inside of (#…
Browse files Browse the repository at this point in the history
…2110)

* place new layer from basic tools within an artboard bounds

Signed-off-by: James Ryans <[email protected]>

* add for Text Tool

Signed-off-by: James Ryans <[email protected]>

* use click_xray function

Signed-off-by: James Ryans <[email protected]>

* support for freehand tool

Signed-off-by: James Ryans <[email protected]>

* support spline tool

Signed-off-by: James Ryans <[email protected]>

---------

Signed-off-by: James Ryans <[email protected]>
  • Loading branch information
james-ryans authored Dec 21, 2024
1 parent 337b8ba commit 3be7505
Show file tree
Hide file tree
Showing 9 changed files with 16 additions and 8 deletions.
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

0 comments on commit 3be7505

Please sign in to comment.