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::prelude::*;
use graph_craft::document::value::TaggedValue;
use graph_craft::document::{DocumentNode, DocumentNodeImplementation, DocumentNodeMetadata, NodeId, NodeInput, NodeNetwork};
use graphene::document::Document;
use graphene::layers::layer_info::LayerDataType;
@ -23,9 +24,25 @@ pub enum FrontendGraphDataType {
Number,
#[serde(rename = "boolean")]
Boolean,
#[serde(rename = "string")]
String,
#[serde(rename = "vec2")]
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)]
pub struct NodeGraphInput {

View file

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

View file

@ -43,8 +43,8 @@ static NODE_REGISTRY: &[(NodeIdentifier, NodeConstructor)] = &[
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 value_node = nodes.get(construction_nodes[0] as usize).unwrap();
let input_node: DowncastBothNode<_, (), f32> = DowncastBothNode::new(value_node);
let node: DynAnyNode<_, f32, _, _> = DynAnyNode::new(ConsNode::new(input_node).then(graphene_core::ops::AddNode));
let input_node: DowncastBothNode<_, (), f64> = DowncastBothNode::new(value_node);
let node: DynAnyNode<_, f64, _, _> = DynAnyNode::new(ConsNode::new(input_node).then(graphene_core::ops::AddNode));
if let ProtoNodeInput::Node(node_id) = proto_node.input {
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