mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-09-28 13:48:13 +08:00
Allow groups to work with the node graph (#1452)
* Initial groups * Improve graph arangement * Fix selecting nested layers * Code review pass * Change log --------- Co-authored-by: Keavon Chambers <keavon@keavon.com>
This commit is contained in:
co-authored by
Keavon Chambers
parent
f4ec76f35e
commit
58660f5548
@@ -17,7 +17,7 @@ use std::collections::VecDeque;
|
||||
pub fn new_vector_layer(subpaths: Vec<Subpath<ManipulatorGroupId>>, layer_path: Vec<LayerId>, responses: &mut VecDeque<Message>) {
|
||||
let id = *layer_path.last().unwrap();
|
||||
responses.add(GraphOperationMessage::NewVectorLayer { id, subpaths });
|
||||
responses.add(NodeGraphMessage::SetSelectedNodes { nodes: vec![id] })
|
||||
responses.add(NodeGraphMessage::SelectedNodesSet { nodes: vec![id] })
|
||||
}
|
||||
|
||||
/// Create a new bitmap layer from an [`graphene_core::raster::ImageFrame<Color>`]
|
||||
@@ -232,7 +232,7 @@ impl<'a> NodeGraphLayer<'a> {
|
||||
|
||||
/// Return an iterator up the primary flow of the layer
|
||||
pub fn primary_layer_flow(&self) -> impl Iterator<Item = (&'a DocumentNode, u64)> {
|
||||
self.node_graph.primary_flow_from_opt(Some(self.layer_node))
|
||||
self.node_graph.primary_flow_from_node(Some(self.layer_node))
|
||||
}
|
||||
|
||||
/// Does a node exist in the layer's primary flow
|
||||
|
||||
@@ -248,9 +248,9 @@ impl PathToolData {
|
||||
// We didn't find a point nearby, so consider selecting the nearest shape instead
|
||||
else if let Some(layer) = document.metadata().click(input.mouse.position, &document.document_legacy.document_network) {
|
||||
if shift {
|
||||
responses.add(NodeGraphMessage::AddSelectNodes { nodes: vec![layer.to_node()] });
|
||||
responses.add(NodeGraphMessage::SelectedNodesAdd { nodes: vec![layer.to_node()] });
|
||||
} else {
|
||||
responses.add(NodeGraphMessage::SetSelectedNodes { nodes: vec![layer.to_node()] });
|
||||
responses.add(NodeGraphMessage::SelectedNodesSet { nodes: vec![layer.to_node()] });
|
||||
}
|
||||
self.drag_start_pos = input.mouse.position;
|
||||
self.previous_mouse_position = input.mouse.position;
|
||||
@@ -386,7 +386,7 @@ impl Fsm for PathToolFsmState {
|
||||
let shift_pressed = input.keyboard.get(add_to_selection as usize);
|
||||
|
||||
if tool_data.drag_start_pos == tool_data.previous_mouse_position {
|
||||
responses.add(NodeGraphMessage::SetSelectedNodes { nodes: vec![] });
|
||||
responses.add(NodeGraphMessage::SelectedNodesSet { nodes: vec![] });
|
||||
} else {
|
||||
shape_editor.select_all_in_quad(&document.document_legacy, [tool_data.drag_start_pos, tool_data.previous_mouse_position], !shift_pressed);
|
||||
tool_data.refresh_overlays(document, shape_editor, shape_overlay, responses);
|
||||
@@ -401,7 +401,7 @@ impl Fsm for PathToolFsmState {
|
||||
let shift_pressed = input.keyboard.get(shift_mirror_distance as usize);
|
||||
|
||||
if tool_data.drag_start_pos == tool_data.previous_mouse_position {
|
||||
responses.add(NodeGraphMessage::SetSelectedNodes { nodes: vec![] });
|
||||
responses.add(NodeGraphMessage::SelectedNodesSet { nodes: vec![] });
|
||||
} else {
|
||||
shape_editor.select_all_in_quad(&document.document_legacy, [tool_data.drag_start_pos, tool_data.previous_mouse_position], !shift_pressed);
|
||||
tool_data.refresh_overlays(document, shape_editor, shape_overlay, responses);
|
||||
|
||||
@@ -369,7 +369,7 @@ impl SelectToolData {
|
||||
}
|
||||
|
||||
// Select the originals
|
||||
responses.add(NodeGraphMessage::SetSelectedNodes {
|
||||
responses.add(NodeGraphMessage::SelectedNodesSet {
|
||||
nodes: originals.iter().map(|layer| layer.to_node()).collect::<Vec<_>>(),
|
||||
});
|
||||
|
||||
@@ -714,13 +714,13 @@ impl Fsm for SelectToolFsmState {
|
||||
tool_data.layers_dragging.clear();
|
||||
tool_data.layers_dragging.extend(replacement_selected_layers.iter());
|
||||
|
||||
responses.add(NodeGraphMessage::SetSelectedNodes {
|
||||
responses.add(NodeGraphMessage::SelectedNodesSet {
|
||||
nodes: replacement_selected_layers.iter().map(|layer| layer.to_node()).collect(),
|
||||
});
|
||||
}
|
||||
} else if let Some(selecting_layer) = tool_data.select_single_layer.take() {
|
||||
if !tool_data.has_dragged {
|
||||
responses.add(NodeGraphMessage::SetSelectedNodes {
|
||||
responses.add(NodeGraphMessage::SelectedNodesSet {
|
||||
nodes: vec![selecting_layer.to_node()],
|
||||
});
|
||||
}
|
||||
@@ -778,7 +778,7 @@ impl Fsm for SelectToolFsmState {
|
||||
let quad = tool_data.selection_quad();
|
||||
// For shallow select we don't update dragging layers until inside drag_start_shallowest_manipulation()
|
||||
tool_data.layers_dragging = document.metadata().intersect_quad(quad, &document.document_legacy.document_network).collect();
|
||||
responses.add_front(NodeGraphMessage::SetSelectedNodes {
|
||||
responses.add_front(NodeGraphMessage::SelectedNodesSet {
|
||||
nodes: tool_data.layers_dragging.iter().map(|layer| layer.to_node()).collect(),
|
||||
});
|
||||
responses.add_front(DocumentMessage::Overlays(
|
||||
@@ -906,7 +906,7 @@ fn drag_shallowest_manipulation(responses: &mut VecDeque<Message>, selected: Vec
|
||||
let new_selected = ancestor.unwrap_or_else(|| layer.child_of_root(document.metadata()));
|
||||
|
||||
tool_data.layers_dragging = vec![new_selected];
|
||||
responses.add(NodeGraphMessage::SetSelectedNodes {
|
||||
responses.add(NodeGraphMessage::SelectedNodesSet {
|
||||
nodes: tool_data.layers_dragging.iter().map(|layer| layer.to_node()).collect(),
|
||||
});
|
||||
// tool_data
|
||||
@@ -916,7 +916,7 @@ fn drag_shallowest_manipulation(responses: &mut VecDeque<Message>, selected: Vec
|
||||
|
||||
fn drag_deepest_manipulation(responses: &mut VecDeque<Message>, mut selected: Vec<LayerNodeIdentifier>, tool_data: &mut SelectToolData) {
|
||||
tool_data.layers_dragging.append(&mut selected);
|
||||
responses.add(NodeGraphMessage::SetSelectedNodes {
|
||||
responses.add(NodeGraphMessage::SelectedNodesSet {
|
||||
nodes: tool_data.layers_dragging.iter().map(|layer| layer.to_node()).collect(),
|
||||
});
|
||||
// tool_data
|
||||
@@ -937,7 +937,7 @@ fn edit_layer_shallowest_manipulation(document: &DocumentMessageHandler, layer:
|
||||
return;
|
||||
};
|
||||
|
||||
responses.add(NodeGraphMessage::SetSelectedNodes { nodes: vec![new_selected.to_node()] });
|
||||
responses.add(NodeGraphMessage::SelectedNodesSet { nodes: vec![new_selected.to_node()] });
|
||||
}
|
||||
|
||||
fn edit_layer_deepest_manipulation(layer: LayerNodeIdentifier, document: &Document, responses: &mut VecDeque<Message>) {
|
||||
|
||||
@@ -269,7 +269,7 @@ impl TextToolData {
|
||||
|
||||
self.set_editing(true, render_data, document, responses);
|
||||
|
||||
responses.add(NodeGraphMessage::SetSelectedNodes { nodes: vec![self.layer.to_node()] });
|
||||
responses.add(NodeGraphMessage::SelectedNodesSet { nodes: vec![self.layer.to_node()] });
|
||||
}
|
||||
|
||||
fn interact(&mut self, state: TextToolFsmState, mouse: DVec2, document: &DocumentMessageHandler, render_data: &RenderData, responses: &mut VecDeque<Message>) -> TextToolFsmState {
|
||||
@@ -304,7 +304,7 @@ impl TextToolData {
|
||||
|
||||
self.set_editing(true, render_data, document, responses);
|
||||
|
||||
responses.add(NodeGraphMessage::SetSelectedNodes { nodes: self.layer.to_path() });
|
||||
responses.add(NodeGraphMessage::SelectedNodesSet { nodes: self.layer.to_path() });
|
||||
|
||||
TextToolFsmState::Editing
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user