mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-09-20 03:18:06 +08:00
Generalize layers as merge nodes to enable adjustment layers (#1712)
* WIP, backward traversal issues * Fix some tool issues * Remove debugging * Change some indices * WIP: new artboard node * WIP: add artboard node * WIP: Artboard node and create_artboard * WIP: Artboard node implementation complete * WIP: Artboards input for output node * Complete Artboard node * Generalize LayerNodeIdentifier, monitor_nodes support for Artboard node, adjust ResizeArtboard/ClearArtboards, move alias validation to Rust * Fix misaligned artboard click targets * Generalize/clarify create_layer and insert_between * non-negative dimensions for resize_artboard * Show artboards in layer panel * Generalize create_layer for layer output node * Generalize delete_layer/delete_artboard to NodeGraphMessage::DeleteNodes. Fixed upstream flow Iter * remove old primary_input function * Vertical node visuals, remove is_layer function, rename Layer node to Merge node, toggle display as layer exposed_value_count type fix Vertical node visuals, remove is_layer function, rename Layer node to Merge node, toggle display as layer * Fix demo artwork * Layer display context menu * Automatically select artboard, fix warnings * Improvements to context menu and layer invariant enforcement * Remove display_as_layer and update load_structure * Improve load_structure to show more layers, improve FlowIter, improve layer naming, layer rearrangement validation. * Clean up demo artwork using generalized layers * Improve design of Layers panel and graph nodes * MoveSelectedLayersTo rewrite to support generalized layer nodes * Include artboards in deepest_common_ancestor, fix resize_artboard/delete_artboard, sync artboard tool to layer panel * MoveSelectedLayersTo adjustments * Sync non layer node visibility with metadata * Include non layer nodes when moving/creating layer * Fix group layers and get_post_node_with_index * Include non layer nodes in UngroupSelectedLayers * GroupSelected for all selected nodes, UnGroupSelected position adjustments * Add grouping for layers in different folders * Fix hidden layers * Prevent node from connecting to itself, fix undo automatic node insertion, * Fix undo CreateEmptyFolder, fix grouping nested layer nodes * Formatting * Remove test and check if node is layer from network * Fix undo group layers * Check off roadmap * MoveUpstreamSiblingsToChild adjustments * Replace tabs with spaces, remove mut from argument * Final code review pass --------- Co-authored-by: 0hypercube <0hypercube@gmail.com> Co-authored-by: Keavon Chambers <keavon@keavon.com>
This commit is contained in:
@@ -275,14 +275,28 @@ impl NodeRuntime {
|
||||
continue;
|
||||
};
|
||||
|
||||
enum IntrospectedData<'a> {
|
||||
GraphicElement(&'a graphene_core::GraphicElement),
|
||||
Artboard(&'a graphene_core::Artboard),
|
||||
}
|
||||
|
||||
let introspected_data_output = introspected_data
|
||||
.downcast_ref::<IORecord<Footprint, graphene_core::GraphicElement>>()
|
||||
.and_then(|io_data| Some(IntrospectedData::GraphicElement(&io_data.output)))
|
||||
.or_else(|| {
|
||||
introspected_data
|
||||
.downcast_ref::<IORecord<Footprint, graphene_core::Artboard>>()
|
||||
.and_then(|io_data| Some(IntrospectedData::Artboard(&io_data.output)))
|
||||
});
|
||||
|
||||
let graphic_element = match introspected_data_output {
|
||||
Some(IntrospectedData::GraphicElement(graphic_element)) => Some(graphic_element.clone()),
|
||||
Some(IntrospectedData::Artboard(artboard)) => Some(artboard.clone().into()),
|
||||
_ => None,
|
||||
};
|
||||
// If this is `GraphicElement` data:
|
||||
// Regenerate click targets and thumbnails for the layers in the graph, modifying the state and updating the UI.
|
||||
if let Some(io_data) = introspected_data.downcast_ref::<IORecord<Footprint, graphene_core::GraphicElement>>() {
|
||||
let graphic_element = &io_data.output;
|
||||
|
||||
// UPDATE CLICK TARGETS
|
||||
|
||||
// Get the previously stored click targets and wipe them out, then regenerate them
|
||||
if let Some(graphic_element) = graphic_element {
|
||||
let click_targets = self.click_targets.entry(parent_network_node_id).or_default();
|
||||
click_targets.clear();
|
||||
graphic_element.add_click_targets(click_targets);
|
||||
|
||||
Reference in New Issue
Block a user