mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-09-15 22:28:10 +08:00
Flip concrete value nodes onto record wires with bridge rows for every value type
This commit is contained in:
@@ -263,6 +263,27 @@ macro_rules! tagged_value {
|
||||
}
|
||||
}
|
||||
|
||||
/// The bridge rows for every wire type a value can carry, spliced
|
||||
/// while plain and record worlds coexist.
|
||||
pub fn record_bridge_entries() -> Vec<(core_types::ProtoNodeIdentifier, core_types::registry::RegistryEntry)> {
|
||||
let mut entries = Vec::new();
|
||||
entries.extend(core_types::registry::record_bridge_rows::<()>());
|
||||
entries.extend(core_types::registry::record_bridge_rows::<List<f64>>());
|
||||
entries.extend(core_types::registry::record_bridge_rows::<List<Color>>());
|
||||
entries.extend(core_types::registry::record_bridge_rows::<List<GradientStops>>());
|
||||
entries.extend(core_types::registry::record_bridge_rows::<List<BrushStroke>>());
|
||||
entries.extend(core_types::registry::record_bridge_rows::<RenderOutput>());
|
||||
entries.extend(core_types::registry::record_bridge_rows::<List<NodeId>>());
|
||||
entries.extend(core_types::registry::record_bridge_rows::<DocumentNode>());
|
||||
entries.extend(core_types::registry::record_bridge_rows::<ContextModification>());
|
||||
entries.extend(core_types::registry::record_bridge_rows::<Arc<PlatformEditorApi>>());
|
||||
entries.extend(core_types::registry::record_bridge_rows::<ResourceHash>());
|
||||
$(
|
||||
entries.extend(core_types::registry::record_bridge_rows::<$ty>());
|
||||
)*
|
||||
entries
|
||||
}
|
||||
|
||||
/// Materializes the value as [`Self::to_dynany`] does, wrapped in a `ClonedNode` edge typed by [`Self::ty`].
|
||||
pub fn to_edge(self) -> Result<EdgeHandle, String> {
|
||||
match self {
|
||||
@@ -389,8 +410,8 @@ macro_rules! tagged_value {
|
||||
pub fn from_type(input: &Type) -> Option<Self> {
|
||||
match input {
|
||||
Type::Generic(_) => None,
|
||||
Type::Ref(_) => None,
|
||||
Type::Record(_) => None,
|
||||
Type::Ref(inner) => Self::from_type(inner),
|
||||
Type::Record(inner) => Self::from_type(inner),
|
||||
Type::Concrete(concrete_type) => {
|
||||
let name = concrete_type.name.as_ref();
|
||||
// TODO: Add default implementations for types such as TaggedValue::Subpaths, and use the defaults here and in document_node_types
|
||||
|
||||
@@ -934,6 +934,8 @@ fn ref_adapter(proposed: &Type, wanted: &Type) -> Option<ProtoNodeIdentifier> {
|
||||
(proposed_output @ Type::Concrete(_), Type::Ref(inner)) if valid_type(proposed_output, inner) => Some(ProtoNodeIdentifier::new("graphene_core::memo::LendNode")),
|
||||
(Type::Record(inner), wanted_output @ Type::Concrete(_)) if valid_type(inner, wanted_output) => Some(ProtoNodeIdentifier::new("core_types::record::RecordExtractNode")),
|
||||
(proposed_output @ Type::Concrete(_), Type::Record(inner)) if valid_type(proposed_output, inner) => Some(ProtoNodeIdentifier::new("core_types::record::RecordLiftNode")),
|
||||
(Type::Ref(inner), Type::Record(wanted_inner)) if valid_type(inner, wanted_inner) => Some(ProtoNodeIdentifier::new("core_types::record::RecordLiftLendNode")),
|
||||
(Type::Record(inner), Type::Ref(wanted_inner)) if valid_type(inner, wanted_inner) => Some(ProtoNodeIdentifier::new("core_types::record::RecordExtractLendNode")),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user