Add the Image Color Palette node (#1311)

* Add image color palette node

* Add max size of palette

* Code review cleanup

---------

Co-authored-by: 0hypercube <0hypercube@gmail.com>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
This commit is contained in:
Henry Barreto
2023-12-09 20:21:41 -03:00
committed by GitHub
parent fe4b9ef8bb
commit cbda811480
10 changed files with 148 additions and 0 deletions

View File

@@ -38,6 +38,8 @@ pub enum FrontendGraphDataType {
GraphicGroup,
#[serde(rename = "artboard")]
Artboard,
#[serde(rename = "palette")]
Palette,
}
impl FrontendGraphDataType {
pub const fn with_tagged_value(value: &TaggedValue) -> Self {
@@ -52,6 +54,7 @@ impl FrontendGraphDataType {
TaggedValue::RcSubpath(_) | TaggedValue::Subpaths(_) | TaggedValue::VectorData(_) => Self::Subpath,
TaggedValue::GraphicGroup(_) => Self::GraphicGroup,
TaggedValue::Artboard(_) => Self::Artboard,
TaggedValue::Palette(_) => Self::Palette,
_ => Self::General,
}
}

View File

@@ -2323,6 +2323,18 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
properties: node_properties::color_overlay_properties,
..Default::default()
},
DocumentNodeDefinition {
name: "Image Color Palette",
category: "Image Adjustments",
implementation: NodeImplementation::proto("graphene_std::image_color_palette::ImageColorPaletteNode<_>"),
inputs: vec![
DocumentInputType::value("Image", TaggedValue::ImageFrame(ImageFrame::empty()), true),
DocumentInputType::value("Max Size", TaggedValue::U32(8), true),
],
outputs: vec![DocumentOutputType::new("Colors", FrontendGraphDataType::Color)],
properties: node_properties::image_color_palette,
..Default::default()
},
]
}

View File

@@ -1904,3 +1904,9 @@ pub fn color_overlay_properties(document_node: &DocumentNode, node_id: NodeId, _
vec![color, blend_mode, LayoutGroup::Row { widgets: opacity }]
}
pub fn image_color_palette(document_node: &DocumentNode, node_id: NodeId, _context: &mut NodePropertiesContext) -> Vec<LayoutGroup> {
let size = number_widget(document_node, node_id, 1, "Max Size", NumberInput::default().int().min(1.).max(28.), true);
vec![LayoutGroup::Row { widgets: size }]
}

View File

@@ -716,6 +716,7 @@ impl NodeGraphExecutor {
TaggedValue::OptionalColor(render_object) => Self::render(render_object, transform, responses),
TaggedValue::VectorData(render_object) => Self::render(render_object, transform, responses),
TaggedValue::ImageFrame(render_object) => Self::render(render_object, transform, responses),
TaggedValue::Palette(render_object) => Self::render(render_object, transform, responses),
_ => {
return Err(format!("Invalid node graph output type: {node_graph_output:#?}"));
}