Skip to content

Commit ce605ac

Browse files
authored
Make the Path tool's segment drag molding work with linear segments (#2838)
Fix path tool molding
1 parent 2b380ce commit ce605ac

File tree

1 file changed

+10
-8
lines changed

1 file changed

+10
-8
lines changed

editor/src/messages/tool/tool_messages/path_tool.rs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use crate::messages::tool::common_functionality::shape_editor::{
1616
};
1717
use crate::messages::tool::common_functionality::snapping::{SnapCache, SnapCandidatePoint, SnapConstraint, SnapData, SnapManager};
1818
use crate::messages::tool::common_functionality::utility_functions::{calculate_segment_angle, find_two_param_best_approximate};
19-
use bezier_rs::{Bezier, TValue};
19+
use bezier_rs::{Bezier, BezierHandles, TValue};
2020
use graphene_std::renderer::Quad;
2121
use graphene_std::vector::{HandleExt, HandleId, NoHashBuilder, SegmentId, VectorData};
2222
use graphene_std::vector::{ManipulatorPointId, PointId, VectorModificationType};
@@ -674,13 +674,15 @@ impl PathToolData {
674674
responses.add(OverlaysMessage::Draw);
675675
PathToolFsmState::Dragging(self.dragging_state)
676676
} else {
677-
let handle1 = ManipulatorPointId::PrimaryHandle(segment.segment());
678-
let handle2 = ManipulatorPointId::EndHandle(segment.segment());
679-
if let Some(vector_data) = document.network_interface.compute_modified_vector(segment.layer()) {
680-
if let (Some(pos1), Some(pos2)) = (handle1.get_position(&vector_data), handle2.get_position(&vector_data)) {
681-
self.molding_info = Some((pos1, pos2))
682-
}
683-
}
677+
let start_pos = segment.bezier().start;
678+
let end_pos = segment.bezier().end;
679+
680+
let [pos1, pos2] = match segment.bezier().handles {
681+
BezierHandles::Cubic { handle_start, handle_end } => [handle_start, handle_end],
682+
BezierHandles::Quadratic { handle } => [handle, end_pos],
683+
BezierHandles::Linear => [start_pos + (end_pos - start_pos) / 3., end_pos + (start_pos - end_pos) / 3.],
684+
};
685+
self.molding_info = Some((pos1, pos2));
684686
PathToolFsmState::Dragging(self.dragging_state)
685687
}
686688
}

0 commit comments

Comments
 (0)