mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2025-07-07 15:55:00 +00:00
Fix inability to expose the Add node's parameter (#877)
* Fix add node * Simplify document node input defenitions
This commit is contained in:
parent
57a1f653e1
commit
9a4af4f87a
5 changed files with 45 additions and 106 deletions
|
@ -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 {
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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()
|
||||
})),
|
||||
]);
|
||||
|
|
|
@ -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 |
Loading…
Add table
Add a link
Reference in a new issue