Skip to content
Open
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
39 changes: 23 additions & 16 deletions editor/src/messages/tool/common_functionality/shapes/line_shape.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
use super::shape_utility::ShapeToolModifierKey;
use crate::consts::{BOUNDS_SELECT_THRESHOLD, LINE_ROTATE_SNAP_ANGLE};
use crate::messages::portfolio::document::graph_operation::utility_types::TransformIn;
use crate::messages::portfolio::document::node_graph::document_node_definitions::resolve_document_node_type;
use crate::messages::portfolio::document::overlays::utility_types::OverlayContext;
use crate::messages::portfolio::document::utility_types::document_metadata::LayerNodeIdentifier;
Expand Down Expand Up @@ -36,12 +37,12 @@ pub struct LineToolData {
pub struct Line;

impl Line {
pub fn create_node(document: &DocumentMessageHandler, drag_start: DVec2) -> NodeTemplate {
pub fn create_node(_document: &DocumentMessageHandler, _drag_start: DVec2) -> NodeTemplate {
let node_type = resolve_document_node_type("Line").expect("Line node can't be found");
node_type.node_template_input_override([
None,
Some(NodeInput::value(TaggedValue::DVec2(document.metadata().document_to_viewport.transform_point2(drag_start)), false)),
Some(NodeInput::value(TaggedValue::DVec2(document.metadata().document_to_viewport.transform_point2(drag_start)), false)),
Some(NodeInput::value(TaggedValue::DVec2(DVec2::ZERO), false)),
Some(NodeInput::value(TaggedValue::DVec2(DVec2::ZERO), false)),
])
}

Expand All @@ -67,17 +68,27 @@ impl Line {
document_points.swap(0, 1);
}

let viewport_points = document_points.map(|point| document.metadata().document_to_viewport.transform_point2(point));
let midpoint = viewport_points[0].midpoint(viewport_points[1]);

let Some(node_id) = graph_modification_utils::get_line_id(layer, &document.network_interface) else {
return;
};

responses.add(GraphOperationMessage::TransformSet {
layer,
transform: DAffine2::from_translation(midpoint),
transform_in: TransformIn::Viewport,
skip_rerender: true,
});

responses.add(NodeGraphMessage::SetInput {
input_connector: InputConnector::node(node_id, 1),
input: NodeInput::value(TaggedValue::DVec2(document_points[0]), false),
input: NodeInput::value(TaggedValue::DVec2(viewport_points[0] - midpoint), false),
});
responses.add(NodeGraphMessage::SetInput {
input_connector: InputConnector::node(node_id, 2),
input: NodeInput::value(TaggedValue::DVec2(document_points[1]), false),
input: NodeInput::value(TaggedValue::DVec2(viewport_points[1] - midpoint), false),
});
responses.add(NodeGraphMessage::RunDocumentGraph);
}
Expand Down Expand Up @@ -193,7 +204,7 @@ pub fn clicked_on_line_endpoints(layer: LayerNodeIdentifier, document: &Document

if start_click || end_click {
shape_tool_data.line_data.dragging_endpoint = Some(if end_click { LineEnd::End } else { LineEnd::Start });
shape_tool_data.data.drag_start = if end_click { document_start } else { document_end };
shape_tool_data.data.drag_start = document.metadata().transform_to_document(layer).transform_point2(if end_click { document_start } else { document_end });
shape_tool_data.line_data.editing_layer = Some(layer);
return true;
}
Expand Down Expand Up @@ -231,12 +242,8 @@ mod test_line_tool {
editor.new_document().await;
editor.drag_tool(ToolType::Line, 0., 0., 100., 100., ModifierKeys::empty()).await;
if let Some((start_input, end_input)) = get_line_node_inputs(&mut editor).await {
match (start_input, end_input) {
(start_input, end_input) => {
assert!((start_input - DVec2::ZERO).length() < 1., "Start point should be near (0,0)");
assert!((end_input - DVec2::new(100., 100.)).length() < 1., "End point should be near (100,100)");
}
}
assert!((start_input - DVec2::new(-50., -50.)).length() < 1., "Start point should be near (-50, -50)");
assert!((end_input - DVec2::new(50., 50.)).length() < 1., "End point should be near (50, 50)");
}
}

Expand All @@ -253,16 +260,16 @@ mod test_line_tool {
let document_to_viewport = document.metadata().document_to_viewport;
let viewport_to_document = document_to_viewport.inverse();

let expected_start = viewport_to_document.transform_point2(DVec2::ZERO);
let expected_end = viewport_to_document.transform_point2(DVec2::new(100., 100.));
let expected_start = DVec2::new(-50., -50.);
let expected_end = DVec2::new(50., 50.);

assert!(
(start_input - expected_start).length() < 1.,
"Start point should match expected document coordinates. Got {start_input:?}, expected {expected_start:?}"
"Start point should match expected viewport coordinates. Got {start_input:?}, expected {expected_start:?}"
);
assert!(
(end_input - expected_end).length() < 1.,
"End point should match expected document coordinates. Got {end_input:?}, expected {expected_end:?}"
"End point should match expected viewport coordinates. Got {end_input:?}, expected {expected_end:?}"
);
} else {
panic!("Line was not created successfully with transformed viewport");
Expand Down