diff --git a/editor/src/messages/portfolio/document/graph_operation/transform_utils.rs b/editor/src/messages/portfolio/document/graph_operation/transform_utils.rs index db4e110e77..0db30b675f 100644 --- a/editor/src/messages/portfolio/document/graph_operation/transform_utils.rs +++ b/editor/src/messages/portfolio/document/graph_operation/transform_utils.rs @@ -2,7 +2,9 @@ use crate::messages::portfolio::document::utility_types::network_interface::{Inp use glam::{DAffine2, DVec2}; use graph_craft::document::value::TaggedValue; use graph_craft::document::{NodeId, NodeInput}; +use graphene_std::NodeInputDecleration; use graphene_std::subpath::Subpath; +use graphene_std::transform_nodes::transform::*; use graphene_std::vector::PointId; /// Convert an affine transform into the tuple `(scale, angle, translation, shear)` assuming `shear.y = 0`. @@ -37,10 +39,10 @@ pub fn update_transform(network_interface: &mut NodeNetworkInterface, node_id: & let rotation = rotation.to_degrees(); let shear = DVec2::new(shear.x.atan().to_degrees(), shear.y.atan().to_degrees()); - network_interface.set_input(&InputConnector::node(*node_id, 1), NodeInput::value(TaggedValue::DVec2(translation), false), &[]); - network_interface.set_input(&InputConnector::node(*node_id, 2), NodeInput::value(TaggedValue::F64(rotation), false), &[]); - network_interface.set_input(&InputConnector::node(*node_id, 3), NodeInput::value(TaggedValue::DVec2(scale), false), &[]); - network_interface.set_input(&InputConnector::node(*node_id, 4), NodeInput::value(TaggedValue::DVec2(shear), false), &[]); + network_interface.set_input(&InputConnector::node(*node_id, TranslationInput::INDEX), NodeInput::value(TaggedValue::DVec2(translation), false), &[]); + network_interface.set_input(&InputConnector::node(*node_id, RotationInput::INDEX), NodeInput::value(TaggedValue::F64(rotation), false), &[]); + network_interface.set_input(&InputConnector::node(*node_id, ScaleInput::INDEX), NodeInput::value(TaggedValue::DVec2(scale), false), &[]); + network_interface.set_input(&InputConnector::node(*node_id, SkewInput::INDEX), NodeInput::value(TaggedValue::DVec2(shear), false), &[]); } // TODO: This should be extracted from the graph at the location of the transform node. @@ -74,14 +76,26 @@ impl LayerBounds { /// Get the current affine transform from the transform node's inputs pub fn get_current_transform(inputs: &[NodeInput]) -> DAffine2 { - let translation = if let Some(&TaggedValue::DVec2(translation)) = inputs[1].as_value() { + let translation = if let Some(&TaggedValue::DVec2(translation)) = inputs[TranslationInput::INDEX].as_value() { translation } else { DVec2::ZERO }; - let rotation = if let Some(&TaggedValue::F64(rotation)) = inputs[2].as_value() { rotation } else { 0. }; - let scale = if let Some(&TaggedValue::DVec2(scale)) = inputs[3].as_value() { scale } else { DVec2::ONE }; - let shear = if let Some(&TaggedValue::DVec2(shear)) = inputs[4].as_value() { shear } else { DVec2::ZERO }; + let rotation = if let Some(&TaggedValue::F64(rotation)) = inputs[RotationInput::INDEX].as_value() { + rotation + } else { + 0. + }; + let scale = if let Some(&TaggedValue::DVec2(scale)) = inputs[ScaleInput::INDEX].as_value() { + scale + } else { + DVec2::ONE + }; + let shear = if let Some(&TaggedValue::DVec2(shear)) = inputs[SkewInput::INDEX].as_value() { + shear + } else { + DVec2::ZERO + }; let rotation = rotation.to_radians(); let shear = DVec2::new(shear.x.to_radians().tan(), shear.y.to_radians().tan()); @@ -91,7 +105,13 @@ pub fn get_current_transform(inputs: &[NodeInput]) -> DAffine2 { /// Extract the current normalized pivot from the layer pub fn get_current_normalized_pivot(inputs: &[NodeInput]) -> DVec2 { - if let Some(&TaggedValue::DVec2(pivot)) = inputs[5].as_value() { pivot } else { DVec2::splat(0.5) } + const ORIGIN_OFFSET_INDEX: usize = 5; + + if let Some(&TaggedValue::DVec2(pivot)) = inputs[ORIGIN_OFFSET_INDEX].as_value() { + pivot + } else { + DVec2::splat(0.5) + } } /// Expand a bounds to avoid div zero errors diff --git a/editor/src/messages/portfolio/document/graph_operation/utility_types.rs b/editor/src/messages/portfolio/document/graph_operation/utility_types.rs index cb8c4608c0..9b5d24cde2 100644 --- a/editor/src/messages/portfolio/document/graph_operation/utility_types.rs +++ b/editor/src/messages/portfolio/document/graph_operation/utility_types.rs @@ -367,7 +367,7 @@ impl<'a> ModifyInputsContext<'a> { let Some(blend_node_id) = self.existing_proto_node_id(graphene_std::blending_nodes::blending::IDENTIFIER, true) else { return; }; - let input_connector = InputConnector::node(blend_node_id, 1); + let input_connector = InputConnector::node(blend_node_id, graphene_std::blending_nodes::blending::BlendModeInput::INDEX); self.set_input_with_refresh(input_connector, NodeInput::value(TaggedValue::BlendMode(blend_mode), false), false); } @@ -375,7 +375,7 @@ impl<'a> ModifyInputsContext<'a> { let Some(blend_node_id) = self.existing_proto_node_id(graphene_std::blending_nodes::blending::IDENTIFIER, true) else { return; }; - let input_connector = InputConnector::node(blend_node_id, 2); + let input_connector = InputConnector::node(blend_node_id, graphene_std::blending_nodes::blending::OpacityInput::INDEX); self.set_input_with_refresh(input_connector, NodeInput::value(TaggedValue::F64(opacity * 100.), false), false); } @@ -383,7 +383,7 @@ impl<'a> ModifyInputsContext<'a> { let Some(blend_node_id) = self.existing_proto_node_id(graphene_std::blending_nodes::blending::IDENTIFIER, true) else { return; }; - let input_connector = InputConnector::node(blend_node_id, 3); + let input_connector = InputConnector::node(blend_node_id, graphene_std::blending_nodes::blending::FillInput::INDEX); self.set_input_with_refresh(input_connector, NodeInput::value(TaggedValue::F64(fill * 100.), false), false); } @@ -392,7 +392,7 @@ impl<'a> ModifyInputsContext<'a> { let Some(clip_node_id) = self.existing_proto_node_id(graphene_std::blending_nodes::blending::IDENTIFIER, true) else { return; }; - let input_connector = InputConnector::node(clip_node_id, 4); + let input_connector = InputConnector::node(clip_node_id, graphene_std::blending_nodes::blending::ClipInput::INDEX); self.set_input_with_refresh(input_connector, NodeInput::value(TaggedValue::Bool(clip), false), false); } diff --git a/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/circle_arc_radius_handle.rs b/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/circle_arc_radius_handle.rs index 6152a6a5dd..9a50889ffc 100644 --- a/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/circle_arc_radius_handle.rs +++ b/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/circle_arc_radius_handle.rs @@ -11,6 +11,7 @@ use crate::messages::tool::common_functionality::shapes::shape_utility::{extract use glam::{DAffine2, DVec2}; use graph_craft::document::NodeInput; use graph_craft::document::value::TaggedValue; +use graphene_std::NodeInputDecleration; use std::collections::VecDeque; use std::f64::consts::FRAC_PI_2; @@ -165,7 +166,7 @@ impl RadiusHandle { self.previous_mouse_position = input.mouse.position; responses.add(NodeGraphMessage::SetInput { - input_connector: InputConnector::node(node_id, 1), + input_connector: InputConnector::node(node_id, graphene_std::vector::generator_nodes::circle::RadiusInput::INDEX), input: NodeInput::value(TaggedValue::F64(current_radius + net_delta), false), }); responses.add(NodeGraphMessage::RunDocumentGraph); diff --git a/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/number_of_points_dial.rs b/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/number_of_points_dial.rs index c6fef1fbda..679da36244 100644 --- a/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/number_of_points_dial.rs +++ b/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/number_of_points_dial.rs @@ -13,6 +13,7 @@ use crate::messages::tool::common_functionality::shapes::shape_utility::{extract use glam::{DAffine2, DVec2}; use graph_craft::document::NodeInput; use graph_craft::document::value::TaggedValue; +use graphene_std::NodeInputDecleration; use std::collections::VecDeque; use std::f64::consts::TAU; @@ -201,7 +202,7 @@ impl NumberOfPointsDial { let new_point_count = ((self.initial_points as i32) + (net_delta as i32)).max(3); responses.add(NodeGraphMessage::SetInput { - input_connector: InputConnector::node(node_id, 1), + input_connector: InputConnector::node(node_id, graphene_std::vector::generator_nodes::star::SidesInput::::INDEX), input: NodeInput::value(TaggedValue::U32(new_point_count as u32), false), }); responses.add(NodeGraphMessage::RunDocumentGraph); diff --git a/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/sweep_angle_gizmo.rs b/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/sweep_angle_gizmo.rs index efa4b18351..6b03b6f8ac 100644 --- a/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/sweep_angle_gizmo.rs +++ b/editor/src/messages/tool/common_functionality/gizmos/shape_gizmos/sweep_angle_gizmo.rs @@ -11,6 +11,8 @@ use crate::messages::tool::tool_messages::tool_prelude::*; use glam::DVec2; use graph_craft::document::value::TaggedValue; use graph_craft::document::{NodeId, NodeInput}; +use graphene_std::NodeInputDecleration; +use graphene_std::vector::generator_nodes::arc::*; use std::collections::VecDeque; use std::f64::consts::FRAC_PI_4; @@ -332,11 +334,11 @@ impl SweepAngleGizmo { self.snap_angles = Self::calculate_snap_angles(); responses.add(NodeGraphMessage::SetInput { - input_connector: InputConnector::node(node_id, 2), + input_connector: InputConnector::node(node_id, StartAngleInput::INDEX), input: NodeInput::value(TaggedValue::F64(start_angle), false), }); responses.add(NodeGraphMessage::SetInput { - input_connector: InputConnector::node(node_id, 3), + input_connector: InputConnector::node(node_id, SweepAngleInput::INDEX), input: NodeInput::value(TaggedValue::F64(sweep_angle), false), }); diff --git a/editor/src/messages/tool/common_functionality/shapes/arc_shape.rs b/editor/src/messages/tool/common_functionality/shapes/arc_shape.rs index 7eabb3c619..027a58fe30 100644 --- a/editor/src/messages/tool/common_functionality/shapes/arc_shape.rs +++ b/editor/src/messages/tool/common_functionality/shapes/arc_shape.rs @@ -12,6 +12,8 @@ use crate::messages::tool::tool_messages::tool_prelude::*; use glam::DAffine2; use graph_craft::document::NodeInput; use graph_craft::document::value::TaggedValue; +use graphene_std::NodeInputDecleration; +use graphene_std::vector::generator_nodes::arc::*; use graphene_std::vector::misc::ArcType; use std::collections::VecDeque; @@ -172,7 +174,7 @@ impl Arc { } responses.add(NodeGraphMessage::SetInput { - input_connector: InputConnector::node(node_id, 1), + input_connector: InputConnector::node(node_id, RadiusInput::INDEX), input: NodeInput::value(TaggedValue::F64(radius), false), }); diff --git a/editor/src/messages/tool/common_functionality/shapes/arrow_shape.rs b/editor/src/messages/tool/common_functionality/shapes/arrow_shape.rs index 0858eddf59..6d07d2b821 100644 --- a/editor/src/messages/tool/common_functionality/shapes/arrow_shape.rs +++ b/editor/src/messages/tool/common_functionality/shapes/arrow_shape.rs @@ -9,6 +9,8 @@ use crate::messages::tool::common_functionality::graph_modification_utils; use glam::DVec2; use graph_craft::document::NodeInput; use graph_craft::document::value::TaggedValue; +use graphene_std::NodeInputDecleration; +use graphene_std::vector::generator_nodes::arrow::*; use std::collections::VecDeque; #[derive(Default)] @@ -58,11 +60,11 @@ impl Arrow { // Update Arrow node start and end points with document space coordinates responses.add(NodeGraphMessage::SetInput { - input_connector: InputConnector::node(node_id, 1), + input_connector: InputConnector::node(node_id, StartInput::INDEX), input: NodeInput::value(TaggedValue::DVec2(start_document), false), }); responses.add(NodeGraphMessage::SetInput { - input_connector: InputConnector::node(node_id, 2), + input_connector: InputConnector::node(node_id, EndInput::INDEX), input: NodeInput::value(TaggedValue::DVec2(end_document), false), }); diff --git a/editor/src/messages/tool/common_functionality/shapes/circle_shape.rs b/editor/src/messages/tool/common_functionality/shapes/circle_shape.rs index 836f50f9e6..466d293a43 100644 --- a/editor/src/messages/tool/common_functionality/shapes/circle_shape.rs +++ b/editor/src/messages/tool/common_functionality/shapes/circle_shape.rs @@ -12,6 +12,7 @@ use crate::messages::tool::tool_messages::tool_prelude::*; use glam::DAffine2; use graph_craft::document::NodeInput; use graph_craft::document::value::TaggedValue; +use graphene_std::NodeInputDecleration; #[derive(Clone, Debug, Default)] pub struct CircleGizmoHandler { @@ -107,7 +108,7 @@ impl Circle { let radius: f64 = if dimensions.x > dimensions.y { dimensions.y / 2. } else { dimensions.x / 2. }; responses.add(NodeGraphMessage::SetInput { - input_connector: InputConnector::node(node_id, 1), + input_connector: InputConnector::node(node_id, graphene_std::vector::generator_nodes::circle::RadiusInput::INDEX), input: NodeInput::value(TaggedValue::F64(radius), false), }); diff --git a/editor/src/messages/tool/common_functionality/shapes/ellipse_shape.rs b/editor/src/messages/tool/common_functionality/shapes/ellipse_shape.rs index eb33a08427..be796a3bce 100644 --- a/editor/src/messages/tool/common_functionality/shapes/ellipse_shape.rs +++ b/editor/src/messages/tool/common_functionality/shapes/ellipse_shape.rs @@ -9,6 +9,8 @@ use crate::messages::tool::tool_messages::tool_prelude::*; use glam::DAffine2; use graph_craft::document::NodeInput; use graph_craft::document::value::TaggedValue; +use graphene_std::NodeInputDecleration; +use graphene_std::vector::generator_nodes::ellipse::*; use std::collections::VecDeque; #[derive(Default)] @@ -37,11 +39,11 @@ impl Ellipse { }; responses.add(NodeGraphMessage::SetInput { - input_connector: InputConnector::node(node_id, 1), + input_connector: InputConnector::node(node_id, RadiusXInput::INDEX), input: NodeInput::value(TaggedValue::F64(((start.x - end.x) / 2.).abs()), false), }); responses.add(NodeGraphMessage::SetInput { - input_connector: InputConnector::node(node_id, 2), + input_connector: InputConnector::node(node_id, RadiusYInput::INDEX), input: NodeInput::value(TaggedValue::F64(((start.y - end.y) / 2.).abs()), false), }); responses.add(GraphOperationMessage::TransformSet { diff --git a/editor/src/messages/tool/common_functionality/shapes/line_shape.rs b/editor/src/messages/tool/common_functionality/shapes/line_shape.rs index d05b0bb361..8f0a661285 100644 --- a/editor/src/messages/tool/common_functionality/shapes/line_shape.rs +++ b/editor/src/messages/tool/common_functionality/shapes/line_shape.rs @@ -12,6 +12,8 @@ use crate::messages::tool::tool_messages::tool_prelude::*; use glam::DVec2; use graph_craft::document::NodeInput; use graph_craft::document::value::TaggedValue; +use graphene_std::NodeInputDecleration; +use graphene_std::vector::generator_nodes::line::*; use std::collections::VecDeque; #[derive(Clone, PartialEq, Debug, Default)] @@ -73,11 +75,11 @@ impl Line { }; responses.add(NodeGraphMessage::SetInput { - input_connector: InputConnector::node(node_id, 1), + input_connector: InputConnector::node(node_id, StartInput::INDEX), input: NodeInput::value(TaggedValue::DVec2(document_points[0]), false), }); responses.add(NodeGraphMessage::SetInput { - input_connector: InputConnector::node(node_id, 2), + input_connector: InputConnector::node(node_id, EndInput::INDEX), input: NodeInput::value(TaggedValue::DVec2(document_points[1]), false), }); responses.add(NodeGraphMessage::RunDocumentGraph); diff --git a/editor/src/messages/tool/common_functionality/shapes/polygon_shape.rs b/editor/src/messages/tool/common_functionality/shapes/polygon_shape.rs index 7b22144a71..47b42a38a6 100644 --- a/editor/src/messages/tool/common_functionality/shapes/polygon_shape.rs +++ b/editor/src/messages/tool/common_functionality/shapes/polygon_shape.rs @@ -15,6 +15,8 @@ use crate::messages::tool::tool_messages::tool_prelude::*; use glam::DAffine2; use graph_craft::document::NodeInput; use graph_craft::document::value::TaggedValue; +use graphene_std::NodeInputDecleration; +use graphene_std::vector::generator_nodes::regular_polygon::*; use std::collections::VecDeque; #[derive(Clone, Debug, Default)] @@ -147,7 +149,7 @@ impl Polygon { }; responses.add(NodeGraphMessage::SetInput { - input_connector: InputConnector::node(node_id, 2), + input_connector: InputConnector::node(node_id, RadiusInput::INDEX), input: NodeInput::value(TaggedValue::F64(radius), false), }); @@ -185,7 +187,7 @@ impl Polygon { }); responses.add(NodeGraphMessage::SetInput { - input_connector: InputConnector::node(node_id, 1), + input_connector: InputConnector::node(node_id, SidesInput::::INDEX), input: NodeInput::value(TaggedValue::U32(new_dimension), false), }); responses.add(NodeGraphMessage::RunDocumentGraph); diff --git a/editor/src/messages/tool/common_functionality/shapes/rectangle_shape.rs b/editor/src/messages/tool/common_functionality/shapes/rectangle_shape.rs index 787684a8fa..a98efd2216 100644 --- a/editor/src/messages/tool/common_functionality/shapes/rectangle_shape.rs +++ b/editor/src/messages/tool/common_functionality/shapes/rectangle_shape.rs @@ -9,6 +9,8 @@ use crate::messages::tool::tool_messages::tool_prelude::*; use glam::DAffine2; use graph_craft::document::NodeInput; use graph_craft::document::value::TaggedValue; +use graphene_std::NodeInputDecleration; +use graphene_std::vector::generator_nodes::rectangle::*; use std::collections::VecDeque; #[derive(Default)] @@ -37,11 +39,11 @@ impl Rectangle { }; responses.add(NodeGraphMessage::SetInput { - input_connector: InputConnector::node(node_id, 1), + input_connector: InputConnector::node(node_id, WidthInput::INDEX), input: NodeInput::value(TaggedValue::F64((start.x - end.x).abs()), false), }); responses.add(NodeGraphMessage::SetInput { - input_connector: InputConnector::node(node_id, 2), + input_connector: InputConnector::node(node_id, HeightInput::INDEX), input: NodeInput::value(TaggedValue::F64((start.y - end.y).abs()), false), }); responses.add(GraphOperationMessage::TransformSet { diff --git a/editor/src/messages/tool/common_functionality/shapes/shape_utility.rs b/editor/src/messages/tool/common_functionality/shapes/shape_utility.rs index 46baf0f1d4..a62786f721 100644 --- a/editor/src/messages/tool/common_functionality/shapes/shape_utility.rs +++ b/editor/src/messages/tool/common_functionality/shapes/shape_utility.rs @@ -169,7 +169,7 @@ pub fn update_radius_sign(end: DVec2, start: DVec2, layer: LayerNodeIdentifier, }; responses.add(NodeGraphMessage::SetInput { - input_connector: InputConnector::node(polygon_node_id, 2), + input_connector: InputConnector::node(polygon_node_id, graphene_std::vector::generator_nodes::regular_polygon::RadiusInput::INDEX), input: NodeInput::value(TaggedValue::F64(sign_num * 0.5), false), }); return; @@ -186,11 +186,11 @@ pub fn update_radius_sign(end: DVec2, start: DVec2, layer: LayerNodeIdentifier, }; responses.add(NodeGraphMessage::SetInput { - input_connector: InputConnector::node(star_node_id, 2), + input_connector: InputConnector::node(star_node_id, graphene_std::vector::generator_nodes::star::Radius1Input::INDEX), input: NodeInput::value(TaggedValue::F64(sign_num * 0.5), false), }); responses.add(NodeGraphMessage::SetInput { - input_connector: InputConnector::node(star_node_id, 3), + input_connector: InputConnector::node(star_node_id, graphene_std::vector::generator_nodes::star::Radius2Input::INDEX), input: NodeInput::value(TaggedValue::F64(sign_num * 0.25), false), }); } diff --git a/editor/src/messages/tool/common_functionality/shapes/star_shape.rs b/editor/src/messages/tool/common_functionality/shapes/star_shape.rs index acdde2c286..85bf964e34 100644 --- a/editor/src/messages/tool/common_functionality/shapes/star_shape.rs +++ b/editor/src/messages/tool/common_functionality/shapes/star_shape.rs @@ -15,6 +15,8 @@ use core::f64; use glam::DAffine2; use graph_craft::document::NodeInput; use graph_craft::document::value::TaggedValue; +use graphene_std::NodeInputDecleration; +use graphene_std::vector::generator_nodes::star::*; use std::collections::VecDeque; #[derive(Clone, Debug, Default)] @@ -152,12 +154,12 @@ impl Star { }; responses.add(NodeGraphMessage::SetInput { - input_connector: InputConnector::node(node_id, 2), + input_connector: InputConnector::node(node_id, Radius1Input::INDEX), input: NodeInput::value(TaggedValue::F64(radius), false), }); responses.add(NodeGraphMessage::SetInput { - input_connector: InputConnector::node(node_id, 3), + input_connector: InputConnector::node(node_id, Radius2Input::INDEX), input: NodeInput::value(TaggedValue::F64(radius / 2.), false), }); diff --git a/node-graph/libraries/no-std-types/src/color/discrete_srgb.rs b/node-graph/libraries/no-std-types/src/color/discrete_srgb.rs index 13a06e30ab..2cf6dbb32b 100644 --- a/node-graph/libraries/no-std-types/src/color/discrete_srgb.rs +++ b/node-graph/libraries/no-std-types/src/color/discrete_srgb.rs @@ -162,6 +162,11 @@ mod tests { #[test] fn test_float_to_srgb_u8() { for u in 0..=u8::MAX { + // let a = srgb_u8_to_float(u); + // let b = srgb_u8_to_float_ref(u); + // if a != b { + // panic!("Mismatch at u={}: {} != {}", u, a, b); + // } assert!(srgb_u8_to_float(u) == srgb_u8_to_float_ref(u)); } }