Skip to content
Closed
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
18 changes: 14 additions & 4 deletions editor/src/messages/tool/tool_messages/freehand_tool.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,10 @@ use crate::messages::tool::common_functionality::color_selector::{ToolColorOptio
use crate::messages::tool::common_functionality::graph_modification_utils;
use crate::messages::tool::common_functionality::utility_functions::should_extend;
use glam::DVec2;
use graph_craft::document::NodeId;
use graphene_std::Color;
use graph_craft::document::value::TaggedValue;
use graph_craft::document::{NodeId, NodeInput};
use graphene_std::{Color, NodeInputDecleration};
use graphene_std::transform_nodes::transform::TranslationInput;
use graphene_std::vector::VectorModificationType;
use graphene_std::vector::{PointId, SegmentId};

Expand Down Expand Up @@ -284,10 +286,18 @@ impl Fsm for FreehandToolFsmState {
responses.add(DocumentMessage::DeselectAllLayers);

let parent = document.new_layer_bounding_artboard(input, viewport);
let origin_document = document.metadata().document_to_viewport.inverse().transform_point2(input.mouse.position);
let parent_to_document = document.metadata().transform_to_document(parent);
let origin_parent = parent_to_document.inverse().transform_point2(origin_document);

let node_type = resolve_network_node_type("Path").expect("Path node does not exist");
let node = node_type.default_node_template();
let nodes = vec![(NodeId(0), node)];
let path_node = node_type.default_node_template();
let transform_node_type = resolve_network_node_type("Transform").expect("Transform node does not exist");
let mut transform_overrides = vec![None; TranslationInput::INDEX + 1];
transform_overrides[0] = Some(NodeInput::node(NodeId(1), 0));
transform_overrides[TranslationInput::INDEX] = Some(NodeInput::value(TaggedValue::DVec2(origin_parent), false));
let transform_node = transform_node_type.node_template_input_override(transform_overrides);
let nodes = vec![(NodeId(1), path_node), (NodeId(0), transform_node)];

let layer = graph_modification_utils::new_custom(NodeId::new(), nodes, parent, responses);
tool_options.fill.apply_fill(layer, responses);
Expand Down
20 changes: 16 additions & 4 deletions editor/src/messages/tool/tool_messages/pen_tool.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,11 @@ use crate::messages::tool::common_functionality::graph_modification_utils::{self
use crate::messages::tool::common_functionality::shape_editor::ShapeState;
use crate::messages::tool::common_functionality::snapping::{SnapCache, SnapCandidatePoint, SnapConstraint, SnapData, SnapManager, SnapTypeConfiguration};
use crate::messages::tool::common_functionality::utility_functions::{calculate_segment_angle, closest_point, should_extend};
use graph_craft::document::NodeId;
use graphene_std::Color;
use graph_craft::document::value::TaggedValue;
use graph_craft::document::{NodeId, NodeInput};
use graphene_std::{Color, NodeInputDecleration};
use graphene_std::subpath::pathseg_points;
use graphene_std::transform_nodes::transform::TranslationInput;
use graphene_std::vector::misc::{HandleId, ManipulatorPointId, dvec2_to_point};
use graphene_std::vector::{NoHashBuilder, PointId, SegmentId, StrokeId, Vector, VectorModificationType};
use kurbo::{CubicBez, PathSeg};
Expand Down Expand Up @@ -1282,10 +1284,20 @@ impl PenToolData {
}

// New path layer
let parent = document.new_layer_bounding_artboard(input, viewport);
let origin_document = snapped.snapped_point_document;
let parent_to_document = document.metadata().transform_to_document(parent);
let origin_parent = parent_to_document.inverse().transform_point2(origin_document);

let node_type = resolve_network_node_type("Path").expect("Path node does not exist");
let nodes = vec![(NodeId(0), node_type.default_node_template())];
let path_node = node_type.default_node_template();
let transform_node_type = resolve_network_node_type("Transform").expect("Transform node does not exist");
let mut transform_overrides = vec![None; TranslationInput::INDEX + 1];
transform_overrides[0] = Some(NodeInput::node(NodeId(1), 0));
transform_overrides[TranslationInput::INDEX] = Some(NodeInput::value(TaggedValue::DVec2(origin_parent), false));
let transform_node = transform_node_type.node_template_input_override(transform_overrides);
let nodes = vec![(NodeId(1), path_node), (NodeId(0), transform_node)];

let parent = document.new_layer_bounding_artboard(input, viewport);
let layer = graph_modification_utils::new_custom(NodeId::new(), nodes, parent, responses);
self.current_layer = Some(layer);
tool_options.fill.apply_fill(layer, responses);
Expand Down
16 changes: 13 additions & 3 deletions editor/src/messages/tool/tool_messages/spline_tool.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,10 @@ use crate::messages::tool::common_functionality::color_selector::{ToolColorOptio
use crate::messages::tool::common_functionality::graph_modification_utils::{self, find_spline, merge_layers, merge_points};
use crate::messages::tool::common_functionality::snapping::{SnapCandidatePoint, SnapData, SnapManager, SnapTypeConfiguration, SnappedPoint};
use crate::messages::tool::common_functionality::utility_functions::{closest_point, should_extend};
use graph_craft::document::value::TaggedValue;
use graph_craft::document::{NodeId, NodeInput};
use graphene_std::Color;
use graphene_std::{Color, NodeInputDecleration};
use graphene_std::transform_nodes::transform::TranslationInput;
use graphene_std::vector::{PointId, SegmentId, VectorModificationType};

#[derive(Default, ExtractField)]
Expand Down Expand Up @@ -387,12 +389,20 @@ impl Fsm for SplineToolFsmState {
responses.add(DocumentMessage::DeselectAllLayers);

let parent = document.new_layer_bounding_artboard(input, viewport);
let origin_document = snapped.snapped_point_document;
let parent_to_document = document.metadata().transform_to_document(parent);
let origin_parent = parent_to_document.inverse().transform_point2(origin_document);

let path_node_type = resolve_network_node_type("Path").expect("Path node does not exist");
let path_node = path_node_type.default_node_template();
let spline_node_type = resolve_proto_node_type(graphene_std::vector::spline::IDENTIFIER).expect("Spline node does not exist");
let spline_node = spline_node_type.node_template_input_override([Some(NodeInput::node(NodeId(1), 0))]);
let nodes = vec![(NodeId(1), path_node), (NodeId(0), spline_node)];
let spline_node = spline_node_type.node_template_input_override([Some(NodeInput::node(NodeId(2), 0))]);
let transform_node_type = resolve_network_node_type("Transform").expect("Transform node does not exist");
let mut transform_overrides = vec![None; TranslationInput::INDEX + 1];
transform_overrides[0] = Some(NodeInput::node(NodeId(1), 0));
transform_overrides[TranslationInput::INDEX] = Some(NodeInput::value(TaggedValue::DVec2(origin_parent), false));
let transform_node = transform_node_type.node_template_input_override(transform_overrides);
let nodes = vec![(NodeId(2), path_node), (NodeId(1), spline_node), (NodeId(0), transform_node)];

let layer = graph_modification_utils::new_custom(NodeId::new(), nodes, parent, responses);
tool_options.fill.apply_fill(layer, responses);
Expand Down