mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-09-24 21:08:12 +08:00
Add Pen tool support for starting and ending segment drawing on existing path edges for vector meshes (#2692)
* Start on segment * Path tool ending on segment * Overlays for feature * Fixed merge build * Fix overlays * Code review --------- Co-authored-by: Keavon Chambers <keavon@keavon.com>
This commit is contained in:
committed by
Keavon Chambers
co-authored by
Keavon Chambers
parent
aa3c214bf7
commit
f3720bf6f2
@@ -57,8 +57,10 @@ pub fn merge_layers(document: &DocumentMessageHandler, first_layer: LayerNodeIde
|
||||
}
|
||||
|
||||
// Move the `second_layer` below the `first_layer` for positioning purposes
|
||||
let first_layer_parent = first_layer.parent(document.metadata()).unwrap();
|
||||
let first_layer_index = first_layer_parent.children(document.metadata()).position(|child| child == first_layer).unwrap();
|
||||
let Some(first_layer_parent) = first_layer.parent(document.metadata()) else { return };
|
||||
let Some(first_layer_index) = first_layer_parent.children(document.metadata()).position(|child| child == first_layer) else {
|
||||
return;
|
||||
};
|
||||
responses.add(NodeGraphMessage::MoveLayerToStack {
|
||||
layer: second_layer,
|
||||
parent: first_layer_parent,
|
||||
|
||||
@@ -159,6 +159,10 @@ impl ClosestSegment {
|
||||
self.points
|
||||
}
|
||||
|
||||
pub fn closest_point_document(&self) -> DVec2 {
|
||||
self.bezier.evaluate(TValue::Parametric(self.t))
|
||||
}
|
||||
|
||||
pub fn closest_point_to_viewport(&self) -> DVec2 {
|
||||
self.bezier_point_to_viewport
|
||||
}
|
||||
@@ -204,7 +208,7 @@ impl ClosestSegment {
|
||||
(first_handle, second_handle)
|
||||
}
|
||||
|
||||
pub fn adjusted_insert(&self, responses: &mut VecDeque<Message>) -> PointId {
|
||||
pub fn adjusted_insert(&self, responses: &mut VecDeque<Message>) -> (PointId, [SegmentId; 2]) {
|
||||
let layer = self.layer;
|
||||
let [first, second] = self.bezier.split(TValue::Parametric(self.t));
|
||||
|
||||
@@ -249,11 +253,11 @@ impl ClosestSegment {
|
||||
responses.add(GraphOperationMessage::Vector { layer, modification_type });
|
||||
}
|
||||
|
||||
midpoint
|
||||
(midpoint, segment_ids)
|
||||
}
|
||||
|
||||
pub fn adjusted_insert_and_select(&self, shape_editor: &mut ShapeState, responses: &mut VecDeque<Message>, extend_selection: bool) {
|
||||
let id = self.adjusted_insert(responses);
|
||||
let (id, _) = self.adjusted_insert(responses);
|
||||
shape_editor.select_anchor_point_by_id(self.layer, id, extend_selection)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user