Fix inability to expose the Add node's parameter (#877)

* Fix add node

* Simplify document node input defenitions
This commit is contained in:
0HyperCube 2022-12-10 23:54:14 +00:00 committed by Keavon Chambers
parent 57a1f653e1
commit 9a4af4f87a
5 changed files with 45 additions and 106 deletions

View file

@ -1,5 +1,6 @@
use crate::messages::layout::utility_types::layout_widget::LayoutGroup; use crate::messages::layout::utility_types::layout_widget::LayoutGroup;
use crate::messages::prelude::*; use crate::messages::prelude::*;
use graph_craft::document::value::TaggedValue;
use graph_craft::document::{DocumentNode, DocumentNodeImplementation, DocumentNodeMetadata, NodeId, NodeInput, NodeNetwork}; use graph_craft::document::{DocumentNode, DocumentNodeImplementation, DocumentNodeMetadata, NodeId, NodeInput, NodeNetwork};
use graphene::document::Document; use graphene::document::Document;
use graphene::layers::layer_info::LayerDataType; use graphene::layers::layer_info::LayerDataType;
@ -23,9 +24,25 @@ pub enum FrontendGraphDataType {
Number, Number,
#[serde(rename = "boolean")] #[serde(rename = "boolean")]
Boolean, Boolean,
#[serde(rename = "string")]
String,
#[serde(rename = "vec2")] #[serde(rename = "vec2")]
Vector, Vector,
} }
impl FrontendGraphDataType {
pub const fn with_tagged_value(value: &TaggedValue) -> Self {
match value {
TaggedValue::None => Self::General,
TaggedValue::String(_) => Self::String,
TaggedValue::F32(_) | TaggedValue::F64(_) | TaggedValue::U32(_) => Self::Number,
TaggedValue::Bool(_) => Self::Boolean,
TaggedValue::DVec2(_) => Self::Vector,
TaggedValue::Image(_) => Self::Raster,
TaggedValue::Color(_) => Self::Color,
TaggedValue::RcSubpath(_) | TaggedValue::Subpath(_) => Self::Subpath,
}
}
}
#[derive(Clone, Debug, Eq, PartialEq, serde::Serialize, serde::Deserialize)] #[derive(Clone, Debug, Eq, PartialEq, serde::Serialize, serde::Deserialize)]
pub struct NodeGraphInput { pub struct NodeGraphInput {

View file

@ -18,12 +18,10 @@ pub struct DocumentInputType {
} }
impl DocumentInputType { impl DocumentInputType {
pub const fn none() -> Self { pub const fn new(name: &'static str, tagged_value: TaggedValue, exposed: bool) -> Self {
Self { let data_type = FrontendGraphDataType::with_tagged_value(&tagged_value);
name: "None", let default = NodeInput::value(tagged_value, exposed);
data_type: FrontendGraphDataType::General, Self { name, data_type, default }
default: NodeInput::value(TaggedValue::None, false),
}
} }
} }
@ -85,11 +83,7 @@ static DOCUMENT_NODE_TYPES: &[DocumentNodeType] = &[
name: "Grayscale", name: "Grayscale",
category: "Image Adjustments", category: "Image Adjustments",
identifier: NodeIdentifier::new("graphene_std::raster::GrayscaleNode", &[]), identifier: NodeIdentifier::new("graphene_std::raster::GrayscaleNode", &[]),
inputs: &[DocumentInputType { inputs: &[DocumentInputType::new("Image", TaggedValue::Image(Image::empty()), true)],
name: "Image",
data_type: FrontendGraphDataType::Raster,
default: NodeInput::value(TaggedValue::Image(Image::empty()), true),
}],
outputs: &[FrontendGraphDataType::Raster], outputs: &[FrontendGraphDataType::Raster],
properties: node_properties::no_properties, properties: node_properties::no_properties,
}, },
@ -97,11 +91,7 @@ static DOCUMENT_NODE_TYPES: &[DocumentNodeType] = &[
name: "Invert RGB", name: "Invert RGB",
category: "Image Adjustments", category: "Image Adjustments",
identifier: NodeIdentifier::new("graphene_std::raster::InvertRGBNode", &[]), identifier: NodeIdentifier::new("graphene_std::raster::InvertRGBNode", &[]),
inputs: &[DocumentInputType { inputs: &[DocumentInputType::new("Image", TaggedValue::Image(Image::empty()), true)],
name: "Image",
data_type: FrontendGraphDataType::Raster,
default: NodeInput::value(TaggedValue::Image(Image::empty()), true),
}],
outputs: &[FrontendGraphDataType::Raster], outputs: &[FrontendGraphDataType::Raster],
properties: node_properties::no_properties, properties: node_properties::no_properties,
}, },
@ -110,26 +100,10 @@ static DOCUMENT_NODE_TYPES: &[DocumentNodeType] = &[
category: "Image Adjustments", category: "Image Adjustments",
identifier: NodeIdentifier::new("graphene_std::raster::HueSaturationNode", &[Type::Concrete(Cow::Borrowed("&TypeErasedNode"))]), identifier: NodeIdentifier::new("graphene_std::raster::HueSaturationNode", &[Type::Concrete(Cow::Borrowed("&TypeErasedNode"))]),
inputs: &[ inputs: &[
DocumentInputType { DocumentInputType::new("Image", TaggedValue::Image(Image::empty()), true),
name: "Image", DocumentInputType::new("Hue Shift", TaggedValue::F64(0.), false),
data_type: FrontendGraphDataType::Raster, DocumentInputType::new("Saturation Shift", TaggedValue::F64(0.), false),
default: NodeInput::value(TaggedValue::Image(Image::empty()), true), DocumentInputType::new("Lightness Shift", TaggedValue::F64(0.), false),
},
DocumentInputType {
name: "Hue Shift",
data_type: FrontendGraphDataType::Number,
default: NodeInput::value(TaggedValue::F64(0.), false),
},
DocumentInputType {
name: "Saturation Shift",
data_type: FrontendGraphDataType::Number,
default: NodeInput::value(TaggedValue::F64(0.), false),
},
DocumentInputType {
name: "Lightness Shift",
data_type: FrontendGraphDataType::Number,
default: NodeInput::value(TaggedValue::F64(0.), false),
},
], ],
outputs: &[FrontendGraphDataType::Raster], outputs: &[FrontendGraphDataType::Raster],
properties: node_properties::adjust_hsl_properties, properties: node_properties::adjust_hsl_properties,
@ -139,21 +113,9 @@ static DOCUMENT_NODE_TYPES: &[DocumentNodeType] = &[
category: "Image Adjustments", category: "Image Adjustments",
identifier: NodeIdentifier::new("graphene_std::raster::BrightnessContrastNode", &[Type::Concrete(Cow::Borrowed("&TypeErasedNode"))]), identifier: NodeIdentifier::new("graphene_std::raster::BrightnessContrastNode", &[Type::Concrete(Cow::Borrowed("&TypeErasedNode"))]),
inputs: &[ inputs: &[
DocumentInputType { DocumentInputType::new("Image", TaggedValue::Image(Image::empty()), true),
name: "Image", DocumentInputType::new("Brightness", TaggedValue::F64(0.), false),
data_type: FrontendGraphDataType::Raster, DocumentInputType::new("Contrast", TaggedValue::F64(0.), false),
default: NodeInput::value(TaggedValue::Image(Image::empty()), true),
},
DocumentInputType {
name: "Brightness",
data_type: FrontendGraphDataType::Number,
default: NodeInput::value(TaggedValue::F64(0.), false),
},
DocumentInputType {
name: "Contrast",
data_type: FrontendGraphDataType::Number,
default: NodeInput::value(TaggedValue::F64(0.), false),
},
], ],
outputs: &[FrontendGraphDataType::Raster], outputs: &[FrontendGraphDataType::Raster],
properties: node_properties::brighten_image_properties, properties: node_properties::brighten_image_properties,
@ -163,16 +125,8 @@ static DOCUMENT_NODE_TYPES: &[DocumentNodeType] = &[
category: "Image Adjustments", category: "Image Adjustments",
identifier: NodeIdentifier::new("graphene_std::raster::GammaNode", &[Type::Concrete(Cow::Borrowed("&TypeErasedNode"))]), identifier: NodeIdentifier::new("graphene_std::raster::GammaNode", &[Type::Concrete(Cow::Borrowed("&TypeErasedNode"))]),
inputs: &[ inputs: &[
DocumentInputType { DocumentInputType::new("Image", TaggedValue::Image(Image::empty()), true),
name: "Image", DocumentInputType::new("Gamma", TaggedValue::F64(1.), false),
data_type: FrontendGraphDataType::Raster,
default: NodeInput::value(TaggedValue::Image(Image::empty()), true),
},
DocumentInputType {
name: "Gamma",
data_type: FrontendGraphDataType::Number,
default: NodeInput::value(TaggedValue::F64(1.), false),
},
], ],
outputs: &[FrontendGraphDataType::Raster], outputs: &[FrontendGraphDataType::Raster],
properties: node_properties::adjust_gamma_properties, properties: node_properties::adjust_gamma_properties,
@ -182,16 +136,8 @@ static DOCUMENT_NODE_TYPES: &[DocumentNodeType] = &[
category: "Image Adjustments", category: "Image Adjustments",
identifier: NodeIdentifier::new("graphene_std::raster::OpacityNode", &[Type::Concrete(Cow::Borrowed("&TypeErasedNode"))]), identifier: NodeIdentifier::new("graphene_std::raster::OpacityNode", &[Type::Concrete(Cow::Borrowed("&TypeErasedNode"))]),
inputs: &[ inputs: &[
DocumentInputType { DocumentInputType::new("Image", TaggedValue::Image(Image::empty()), true),
name: "Image", DocumentInputType::new("Factor", TaggedValue::F64(1.), false),
data_type: FrontendGraphDataType::Raster,
default: NodeInput::value(TaggedValue::Image(Image::empty()), true),
},
DocumentInputType {
name: "Factor",
data_type: FrontendGraphDataType::Number,
default: NodeInput::value(TaggedValue::F64(1.), false),
},
], ],
outputs: &[FrontendGraphDataType::Raster], outputs: &[FrontendGraphDataType::Raster],
properties: node_properties::multiply_opacity, properties: node_properties::multiply_opacity,
@ -201,16 +147,8 @@ static DOCUMENT_NODE_TYPES: &[DocumentNodeType] = &[
category: "Image Adjustments", category: "Image Adjustments",
identifier: NodeIdentifier::new("graphene_std::raster::PosterizeNode", &[Type::Concrete(Cow::Borrowed("&TypeErasedNode"))]), identifier: NodeIdentifier::new("graphene_std::raster::PosterizeNode", &[Type::Concrete(Cow::Borrowed("&TypeErasedNode"))]),
inputs: &[ inputs: &[
DocumentInputType { DocumentInputType::new("Image", TaggedValue::Image(Image::empty()), true),
name: "Image", DocumentInputType::new("Value", TaggedValue::F64(5.), false),
data_type: FrontendGraphDataType::Raster,
default: NodeInput::value(TaggedValue::Image(Image::empty()), true),
},
DocumentInputType {
name: "Value",
data_type: FrontendGraphDataType::Number,
default: NodeInput::value(TaggedValue::F64(5.), false),
},
], ],
outputs: &[FrontendGraphDataType::Raster], outputs: &[FrontendGraphDataType::Raster],
properties: node_properties::posterize_properties, properties: node_properties::posterize_properties,
@ -220,16 +158,8 @@ static DOCUMENT_NODE_TYPES: &[DocumentNodeType] = &[
category: "Image Adjustments", category: "Image Adjustments",
identifier: NodeIdentifier::new("graphene_std::raster::ExposureNode", &[Type::Concrete(Cow::Borrowed("&TypeErasedNode"))]), identifier: NodeIdentifier::new("graphene_std::raster::ExposureNode", &[Type::Concrete(Cow::Borrowed("&TypeErasedNode"))]),
inputs: &[ inputs: &[
DocumentInputType { DocumentInputType::new("Image", TaggedValue::Image(Image::empty()), true),
name: "Image", DocumentInputType::new("Value", TaggedValue::F64(0.), false),
data_type: FrontendGraphDataType::Raster,
default: NodeInput::value(TaggedValue::Image(Image::empty()), true),
},
DocumentInputType {
name: "Value",
data_type: FrontendGraphDataType::Number,
default: NodeInput::value(TaggedValue::F64(0.), false),
},
], ],
outputs: &[FrontendGraphDataType::Raster], outputs: &[FrontendGraphDataType::Raster],
properties: node_properties::exposure_properties, properties: node_properties::exposure_properties,
@ -239,16 +169,8 @@ static DOCUMENT_NODE_TYPES: &[DocumentNodeType] = &[
category: "Math", category: "Math",
identifier: NodeIdentifier::new("graphene_core::ops::AddNode", &[Type::Concrete(Cow::Borrowed("&TypeErasedNode"))]), identifier: NodeIdentifier::new("graphene_core::ops::AddNode", &[Type::Concrete(Cow::Borrowed("&TypeErasedNode"))]),
inputs: &[ inputs: &[
DocumentInputType { DocumentInputType::new("Input", TaggedValue::F64(0.), true),
name: "Input", DocumentInputType::new("Addend", TaggedValue::F64(0.), true),
data_type: FrontendGraphDataType::Number,
default: NodeInput::value(TaggedValue::F64(0.), true),
},
DocumentInputType {
name: "Addend",
data_type: FrontendGraphDataType::Number,
default: NodeInput::value(TaggedValue::F64(0.), true),
},
], ],
outputs: &[FrontendGraphDataType::Number], outputs: &[FrontendGraphDataType::Number],
properties: node_properties::add_properties, properties: node_properties::add_properties,

View file

@ -126,16 +126,16 @@ pub fn add_properties(document_node: &DocumentNode, node_id: NodeId) -> Vec<Layo
]; ];
if let NodeInput::Value { if let NodeInput::Value {
tagged_value: TaggedValue::F32(x), tagged_value: TaggedValue::F64(x),
exposed: false, exposed: false,
} = document_node.inputs[index] } = document_node.inputs[index]
{ {
widgets.extend_from_slice(&[ widgets.extend_from_slice(&[
WidgetHolder::unrelated_seperator(), WidgetHolder::unrelated_seperator(),
WidgetHolder::new(Widget::NumberInput(NumberInput { WidgetHolder::new(Widget::NumberInput(NumberInput {
value: Some(x as f64), value: Some(x),
mode: NumberInputMode::Increment, mode: NumberInputMode::Increment,
on_update: update_value(|number_input: &NumberInput| TaggedValue::F32(number_input.value.unwrap() as f32), node_id, index), on_update: update_value(|number_input: &NumberInput| TaggedValue::F64(number_input.value.unwrap()), node_id, index),
..NumberInput::default() ..NumberInput::default()
})), })),
]); ]);

View file

@ -43,8 +43,8 @@ static NODE_REGISTRY: &[(NodeIdentifier, NodeConstructor)] = &[
stack.push_fn(move |nodes| { stack.push_fn(move |nodes| {
let ConstructionArgs::Nodes(construction_nodes) = proto_node.construction_args else { unreachable!("Add Node constructed with out rhs input node") }; let ConstructionArgs::Nodes(construction_nodes) = proto_node.construction_args else { unreachable!("Add Node constructed with out rhs input node") };
let value_node = nodes.get(construction_nodes[0] as usize).unwrap(); let value_node = nodes.get(construction_nodes[0] as usize).unwrap();
let input_node: DowncastBothNode<_, (), f32> = DowncastBothNode::new(value_node); let input_node: DowncastBothNode<_, (), f64> = DowncastBothNode::new(value_node);
let node: DynAnyNode<_, f32, _, _> = DynAnyNode::new(ConsNode::new(input_node).then(graphene_core::ops::AddNode)); let node: DynAnyNode<_, f64, _, _> = DynAnyNode::new(ConsNode::new(input_node).then(graphene_core::ops::AddNode));
if let ProtoNodeInput::Node(node_id) = proto_node.input { if let ProtoNodeInput::Node(node_id) = proto_node.input {
let pre_node = nodes.get(node_id as usize).unwrap(); let pre_node = nodes.get(node_id as usize).unwrap();

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Before After
Before After