Skip to content

Commit a6052c5

Browse files
adamgerhantKeavon
andauthored
Replace node definition string-based lookups with DefinitionIdentifier instances (#3451)
* create definition identifier and integrate it * Bug fixes and code review * formatting * Fix migrations * Fix remove handles migration * formatting * Fix test * Fix tests 2 * fix deserialization * Code review * Small fixes * Consolidate 'Morph' node migrations * Add old SamplePointsNode name to migrations list * Fix tests * Unrelated small fix * Fix migration crashes * Fix tests * Final code review * fmt * Add metadata --------- Co-authored-by: Keavon Chambers <keavon@keavon.com>
1 parent 4fea2b0 commit a6052c5

63 files changed

Lines changed: 837 additions & 796 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

editor/src/messages/frontend/frontend_message.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ use super::utility_types::{DocumentDetails, MouseCursorIcon, OpenDocument};
22
use crate::messages::app_window::app_window_message_handler::AppWindowPlatform;
33
use crate::messages::input_mapper::utility_types::misc::ActionShortcut;
44
use crate::messages::layout::utility_types::widget_prelude::*;
5+
use crate::messages::portfolio::document::node_graph::document_node_definitions::DefinitionIdentifier;
56
use crate::messages::portfolio::document::node_graph::utility_types::{
67
BoxSelection, ContextMenuInformation, FrontendClickTargets, FrontendGraphInput, FrontendGraphOutput, FrontendNode, FrontendNodeType, NodeGraphErrorDiagnostic, Transform,
78
};
@@ -60,7 +61,7 @@ pub enum FrontendMessage {
6061
// Send prefix: Send global, static data to the frontend that is never updated
6162
SendUIMetadata {
6263
#[serde(rename = "nodeDescriptions")]
63-
node_descriptions: Vec<(String, String)>,
64+
node_descriptions: Vec<(DefinitionIdentifier, String)>,
6465
#[serde(rename = "nodeTypes")]
6566
node_types: Vec<FrontendNodeType>,
6667
},

editor/src/messages/layout/layout_message_handler.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -287,11 +287,7 @@ impl LayoutMessageHandler {
287287
responses.add(callback_message);
288288
}
289289
WidgetValueAction::Update => {
290-
let Some(value) = value.as_str().map(|s| s.to_string()) else {
291-
error!("NodeCatalog update was not of type String");
292-
return;
293-
};
294-
let callback_message = (node_type_input.on_update.callback)(&value);
290+
let callback_message = (node_type_input.on_update.callback)(&value.into());
295291
responses.add(callback_message);
296292
}
297293
},

editor/src/messages/layout/utility_types/layout_widget.rs

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -790,23 +790,19 @@ impl DiffUpdate {
790790
};
791791

792792
// Recursively fill menu list entries with their realized shortcut keys specific to the current bindings and platform
793-
let apply_action_shortcut_to_menu_lists = |entry_sections: &mut MenuListEntrySections| {
794-
struct RecursiveWrapper<'a>(&'a dyn Fn(&mut MenuListEntrySections, &RecursiveWrapper));
795-
let recursive_wrapper = RecursiveWrapper(&|entry_sections: &mut MenuListEntrySections, recursive_wrapper| {
796-
for entries in entry_sections {
797-
for entry in entries {
798-
// Convert `ActionShortcut::Action` to `ActionShortcut::Shortcut`
799-
if let Some(tooltip_shortcut) = &mut entry.tooltip_shortcut {
800-
tooltip_shortcut.realize_shortcut(action_input_mapping);
801-
}
802-
803-
// Recursively call this inner closure on the menu's children
804-
(recursive_wrapper.0)(&mut entry.children, recursive_wrapper);
793+
fn apply_action_shortcut_to_menu_lists(entry_sections: &mut MenuListEntrySections, action_input_mapping: &impl Fn(&MessageDiscriminant) -> Option<KeysGroup>) {
794+
for entries in entry_sections {
795+
for entry in entries {
796+
// Convert `ActionShortcut::Action` to `ActionShortcut::Shortcut`
797+
if let Some(tooltip_shortcut) = &mut entry.tooltip_shortcut {
798+
tooltip_shortcut.realize_shortcut(action_input_mapping);
805799
}
800+
801+
// Recursively call this function on the menu's children
802+
apply_action_shortcut_to_menu_lists(&mut entry.children, action_input_mapping);
806803
}
807-
});
808-
(recursive_wrapper.0)(entry_sections, &recursive_wrapper)
809-
};
804+
}
805+
}
810806

811807
// Hash the menu list entry sections for caching purposes
812808
let hash_menu_list_entry_sections = |entry_sections: &MenuListEntrySections| {
@@ -833,11 +829,11 @@ impl DiffUpdate {
833829
// Apply shortcut conversions to all widgets that have menu lists
834830
let convert_menu_lists = |widget_instance: &mut WidgetInstance| match &mut *widget_instance.widget {
835831
Widget::DropdownInput(dropdown_input) => {
836-
apply_action_shortcut_to_menu_lists(&mut dropdown_input.entries);
832+
apply_action_shortcut_to_menu_lists(&mut dropdown_input.entries, action_input_mapping);
837833
dropdown_input.entries_hash = hash_menu_list_entry_sections(&dropdown_input.entries);
838834
}
839835
Widget::TextButton(text_button) => {
840-
apply_action_shortcut_to_menu_lists(&mut text_button.menu_list_children);
836+
apply_action_shortcut_to_menu_lists(&mut text_button.menu_list_children, action_input_mapping);
841837
text_button.menu_list_children_hash = hash_menu_list_entry_sections(&text_button.menu_list_children);
842838
}
843839
_ => {}

editor/src/messages/layout/utility_types/widgets/input_widgets.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use crate::messages::input_mapper::utility_types::misc::ActionShortcut;
22
use crate::messages::layout::utility_types::widget_prelude::*;
3+
use crate::messages::portfolio::document::node_graph::document_node_definitions::DefinitionIdentifier;
34
use derivative::*;
45
use graphene_std::Color;
56
use graphene_std::raster::curve::Curve;
@@ -273,7 +274,7 @@ pub struct NodeCatalog {
273274
// Callbacks
274275
#[serde(skip)]
275276
#[derivative(Debug = "ignore", PartialEq = "ignore")]
276-
pub on_update: WidgetCallback<String>,
277+
pub on_update: WidgetCallback<DefinitionIdentifier>,
277278
#[serde(skip)]
278279
#[derivative(Debug = "ignore", PartialEq = "ignore")]
279280
pub on_commit: WidgetCallback<()>,

editor/src/messages/portfolio/document/document_message_handler.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ use crate::messages::layout::utility_types::widget_prelude::*;
1111
use crate::messages::portfolio::document::data_panel::{DataPanelMessageContext, DataPanelMessageHandler};
1212
use crate::messages::portfolio::document::graph_operation::utility_types::TransformIn;
1313
use crate::messages::portfolio::document::node_graph::NodeGraphMessageContext;
14+
use crate::messages::portfolio::document::node_graph::document_node_definitions::DefinitionIdentifier;
1415
use crate::messages::portfolio::document::node_graph::utility_types::FrontendGraphDataType;
1516
use crate::messages::portfolio::document::overlays::grid_overlays::{grid_overlay, overlay_options};
1617
use crate::messages::portfolio::document::overlays::utility_types::{OverlaysType, OverlaysVisibilitySettings, Pivot};
@@ -1548,7 +1549,7 @@ impl MessageHandler<DocumentMessage, DocumentMessageContext<'_>> for DocumentMes
15481549
// Create an artboard and set its dimensions to the bounding box size and location
15491550
let node_id = NodeId::new();
15501551
let node_layer_id = LayerNodeIdentifier::new_unchecked(node_id);
1551-
let new_artboard_node = document_node_definitions::resolve_document_node_type("Artboard")
1552+
let new_artboard_node = document_node_definitions::resolve_network_node_type("Artboard")
15521553
.expect("Failed to create artboard node")
15531554
.default_node_template();
15541555
responses.add(NodeGraphMessage::InsertNode {
@@ -2133,8 +2134,7 @@ impl DocumentMessageHandler {
21332134
network_interface.upstream_flow_back_from_nodes(vec![selected_id.to_node()], &[], FlowType::HorizontalFlow).find(|id| {
21342135
network_interface
21352136
.reference(id, &[])
2136-
.map(|name| name.as_deref().unwrap_or_default() == "Boolean Operation")
2137-
.unwrap_or_default()
2137+
.is_some_and(|reference| reference == DefinitionIdentifier::Network("Boolean Operation".into()))
21382138
})
21392139
});
21402140

editor/src/messages/portfolio/document/graph_operation/graph_operation_message_handler.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -382,7 +382,7 @@ fn import_usvg_node(modify_inputs: &mut ModifyInputsContext, node: &usvg::Node,
382382

383383
modify_inputs.insert_vector(subpaths, layer, true, path.fill().is_some(), path.stroke().is_some());
384384

385-
if let Some(transform_node_id) = modify_inputs.existing_node_id("Transform", true) {
385+
if let Some(transform_node_id) = modify_inputs.existing_network_node_id("Transform", true) {
386386
transform_utils::update_transform(modify_inputs.network_interface, &transform_node_id, transform * usvg_transform(node.abs_transform()));
387387
}
388388

0 commit comments

Comments
 (0)