mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-09-25 22:28:11 +08:00
Add drag to connect nodes (#901)
* Add drag to connect nodes * Clean up node graph code * Close node list with escape or click * Check if line is contained within box * Shift the nodes Co-authored-by: Keavon Chambers <keavon@keavon.com>
This commit is contained in:
committed by
Keavon Chambers
co-authored by
Keavon Chambers
parent
49b9b8cfec
commit
8f4f7b3cf1
@@ -587,6 +587,13 @@ impl JsEditorHandle {
|
||||
self.dispatch(message);
|
||||
}
|
||||
|
||||
/// Shifts the node and its children to stop nodes going ontop of each other
|
||||
#[wasm_bindgen(js_name = shiftNode)]
|
||||
pub fn shift_node(&self, node_id: u64) {
|
||||
let message = NodeGraphMessage::ShiftNode { node_id };
|
||||
self.dispatch(message);
|
||||
}
|
||||
|
||||
/// Notifies the backend that the user disconnected a node
|
||||
#[wasm_bindgen(js_name = disconnectNodes)]
|
||||
pub fn disconnect_nodes(&self, node_id: u64, input_index: usize) {
|
||||
@@ -594,6 +601,18 @@ impl JsEditorHandle {
|
||||
self.dispatch(message);
|
||||
}
|
||||
|
||||
/// Check for intersections between the curve and a rectangle defined by opposite corners
|
||||
#[wasm_bindgen(js_name = rectangleIntersects)]
|
||||
pub fn rectangle_intersects(&self, bezier_x: Vec<f64>, bezier_y: Vec<f64>, top: f64, left: f64, bottom: f64, right: f64) -> bool {
|
||||
let bezier = bezier_rs::Bezier::from_cubic_dvec2(
|
||||
(bezier_x[0], bezier_y[0]).into(),
|
||||
(bezier_x[1], bezier_y[1]).into(),
|
||||
(bezier_x[2], bezier_y[2]).into(),
|
||||
(bezier_x[3], bezier_y[3]).into(),
|
||||
);
|
||||
!bezier.rectangle_intersections((left, top).into(), (right, bottom).into()).is_empty() || bezier.is_contained_within((left, top).into(), (right, bottom).into())
|
||||
}
|
||||
|
||||
/// Creates a new document node in the node graph
|
||||
#[wasm_bindgen(js_name = createNode)]
|
||||
pub fn create_node(&self, node_type: String, x: i32, y: i32) {
|
||||
|
||||
Reference in New Issue
Block a user