diff --git a/editor/src/messages/portfolio/document/document_message_handler.rs b/editor/src/messages/portfolio/document/document_message_handler.rs index 0b3783c154..4520fd342a 100644 --- a/editor/src/messages/portfolio/document/document_message_handler.rs +++ b/editor/src/messages/portfolio/document/document_message_handler.rs @@ -35,9 +35,9 @@ use crate::node_graph_executor::NodeGraphExecutor; use glam::{DAffine2, DVec2}; use graph_craft::application_io::resource::ResourceId; use graph_craft::application_io::wgpu_available; +use graph_craft::concrete; use graph_craft::document::value::TaggedValue; use graph_craft::document::{NodeId, NodeInput, NodeNetwork, OldNodeNetwork}; -use graph_craft::list; use graphene_std::Cover; use graphene_std::math::quad::Quad; use graphene_std::path_bool_nodes::boolean_intersect; @@ -3803,7 +3803,7 @@ impl DocumentMessageHandler { /// Create a network interface with a single export fn default_document_network_interface() -> NodeNetworkInterface { let mut network_interface = NodeNetworkInterface::default(); - network_interface.add_export(TaggedValue::TypeDefault(list!(graphene_std::Artboard)), -1, "", &[]); + network_interface.add_export(TaggedValue::TypeDefault(concrete!(graphene_std::list::List)), -1, "", &[]); network_interface } diff --git a/editor/src/messages/portfolio/document/graph_operation/graph_operation_message_handler.rs b/editor/src/messages/portfolio/document/graph_operation/graph_operation_message_handler.rs index c3741f2c65..7b90784711 100644 --- a/editor/src/messages/portfolio/document/graph_operation/graph_operation_message_handler.rs +++ b/editor/src/messages/portfolio/document/graph_operation/graph_operation_message_handler.rs @@ -9,9 +9,9 @@ use crate::messages::portfolio::document::utility_types::nodes::CollapsedLayers; use crate::messages::prelude::*; use crate::messages::tool::common_functionality::graph_modification_utils::get_clip_mode; use glam::{DAffine2, DVec2, IVec2}; +use graph_craft::concrete; use graph_craft::document::value::TaggedValue; use graph_craft::document::{NodeId, NodeInput}; -use graph_craft::list; use graphene_std::renderer::convert_usvg_path::convert_usvg_path; use graphene_std::text::{Font, TypesettingConfig}; use graphene_std::vector::style::{Gradient, GradientForm, GradientSettings, GradientSpace, GradientSpread, GradientStop, Stroke, StrokeAlign, StrokeCap, StrokeJoin}; @@ -252,7 +252,7 @@ impl MessageHandler> for } // Set the bottom input of the artboard back to artboard - let bottom_input = NodeInput::type_default(list!(Artboard), true); + let bottom_input = NodeInput::type_default(concrete!(graphene_std::list::List), true); network_interface.set_input(&InputConnector::primary_input(artboard_layer.to_node()), bottom_input, &[]); } else { // We have some non layers (e.g. just a rectangle node). We disconnect the bottom input and connect it to the left input. @@ -260,7 +260,7 @@ impl MessageHandler> for network_interface.set_input(&InputConnector::layer_secondary_input(artboard_layer.to_node()), primary_input, &[]); // Set the bottom input of the artboard back to artboard - let bottom_input = NodeInput::type_default(list!(Artboard), true); + let bottom_input = NodeInput::type_default(concrete!(graphene_std::list::List), true); network_interface.set_input(&InputConnector::primary_input(artboard_layer.to_node()), bottom_input, &[]); } } diff --git a/node-graph/graph-craft/src/document/value.rs b/node-graph/graph-craft/src/document/value.rs index 32440d2aaf..259583676a 100644 --- a/node-graph/graph-craft/src/document/value.rs +++ b/node-graph/graph-craft/src/document/value.rs @@ -274,7 +274,7 @@ macro_rules! tagged_value { // ======================= // AUTO-GENERATED VARIANTS // ======================= - $( Self::$identifier(_) => item!($ty), )* + $( Self::$identifier(_) => concrete!($ty), )* // ======================= // NON-SERIALIZED VARIANTS // ======================= @@ -511,18 +511,9 @@ macro_rules! tagged_value { } Type::Fn(_, output) => TaggedValue::from_type(output), Type::Future(output) => TaggedValue::from_type(output), - // Element types with a dedicated variant use it directly (the variant's value is a rank-0 cell); the rest store the structural type - Type::Item(element) => TaggedValue::from_type(element).or_else(|| { - macro_rules! check { - ($type_default:ty) => { - if **element == concrete!($type_default) { return Some(TaggedValue::TypeDefault(input.clone())); } - }; - } - for_each_item_type_default!(check); - None - }), - // Structural lists match by element; `List` stays the dedicated `F64Array` variant - Type::List(element) => { + // One wire kind: a record input types by its element, so the element's own + // dedicated variant is used where there is one and the structural type otherwise. + Type::Record(element) => TaggedValue::from_type(element).or_else(|| { if **element == concrete!(f64) { return Some(TaggedValue::F64Array(Vec::new())); } @@ -534,9 +525,10 @@ macro_rules! tagged_value { if **element == concrete!($type_default) { return Some(TaggedValue::TypeDefault(input.clone())); } }; } + for_each_item_type_default!(check); for_each_list_type_default!(check); None - } + }) } } @@ -802,8 +794,7 @@ impl TaggedValue { } Type::Fn(_, output) => TaggedValue::from_primitive_string(string, output), Type::Future(fut) => TaggedValue::from_primitive_string(string, fut), - Type::Item(element) => TaggedValue::from_primitive_string(string, element), - Type::List(element) => TaggedValue::from_primitive_string(string, element), + Type::Record(element) => TaggedValue::from_primitive_string(string, element), } } @@ -816,12 +807,12 @@ impl TaggedValue { /// The stored form of a paint input's red-slash "no paint" choice: the `Item` type default, materializing as a `Graphic::None` paint. pub fn no_paint() -> Self { - TaggedValue::TypeDefault(item!(Graphic)) + TaggedValue::TypeDefault(concrete!(Graphic)) } /// Whether this is the `Item` type default created by [`Self::no_paint`] (and by disconnecting a paint wire). pub fn is_no_paint(&self) -> bool { - matches!(self, TaggedValue::TypeDefault(td) if *td == item!(Graphic)) + matches!(self, TaggedValue::TypeDefault(td) if *td == concrete!(Graphic)) } } @@ -1082,7 +1073,7 @@ mod paint_default_parsing { "a `List` paint wire should resolve its color default" ); assert_eq!( - TaggedValue::from_primitive_string("Color::BLACK", &item!(Graphic)), + TaggedValue::from_primitive_string("Color::BLACK", &concrete!(Graphic)), black, "an `Item` paint wire should resolve its color default" );