From ca615fd6fcc80066d63c0ec8921d8eea9bff446f Mon Sep 17 00:00:00 2001 From: Keavon Chambers Date: Sat, 8 Aug 2026 01:20:55 -0700 Subject: [PATCH] Rename the 'Sample Gradient' node to 'Evaluate Gradient' (#4422) * Rename the 'Sample Gradient' node to 'Evaluate Gradient' * Let the Evaluate Gradient node's position reach the out-of-range values its spread modes handle --- .../portfolio/document/storage_tests/round_trip_tests.rs | 6 +++--- editor/src/messages/portfolio/document_migration.rs | 8 ++++---- node-graph/nodes/math/src/lib.rs | 6 ++++-- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/editor/src/messages/portfolio/document/storage_tests/round_trip_tests.rs b/editor/src/messages/portfolio/document/storage_tests/round_trip_tests.rs index 8d0c9b4700..adfd322d2f 100644 --- a/editor/src/messages/portfolio/document/storage_tests/round_trip_tests.rs +++ b/editor/src/messages/portfolio/document/storage_tests/round_trip_tests.rs @@ -801,9 +801,9 @@ async fn legacy_four_input_fill_migrates_to_the_split_transform_shape() { "the transform input should hold a matrix, but became {transform:?}" ); - // The Sample Gradient parameter held the tuple-form stops, which parse as the ramp value with even positions elided - let sample_gradient_node = &network.nodes[&graph_craft::document::NodeId(2)]; - let stops = sample_gradient_node.input_value(graphene_std::math_nodes::sample_gradient::GradientInput); + // The Evaluate Gradient parameter held the tuple-form stops, which parse as the ramp value with even positions elided + let evaluate_gradient_node = &network.nodes[&graph_craft::document::NodeId(2)]; + let stops = evaluate_gradient_node.input_value(graphene_std::math_nodes::evaluate_gradient::GradientInput); let Some(TaggedValue::GradientRamp(ramp)) = stops else { panic!("the legacy stops parameter should become a gradient ramp value, but became {stops:?}"); }; diff --git a/editor/src/messages/portfolio/document_migration.rs b/editor/src/messages/portfolio/document_migration.rs index 4fe3bca6b4..7111288e1f 100644 --- a/editor/src/messages/portfolio/document_migration.rs +++ b/editor/src/messages/portfolio/document_migration.rs @@ -264,6 +264,10 @@ const NODE_REPLACEMENTS: &[NodeReplacement<'static>] = &[ node: graphene_std::math_nodes::equals::IDENTIFIER, aliases: &["graphene_math_nodes::EqualsNode", "graphene_core::ops::EqualsNode"], }, + NodeReplacement { + node: graphene_std::math_nodes::evaluate_gradient::IDENTIFIER, + aliases: &["math_nodes::SampleGradientNode", "graphene_math_nodes::SampleGradientNode", "graphene_core::ops::SampleGradientNode"], + }, NodeReplacement { node: graphene_std::math_nodes::exponent::IDENTIFIER, aliases: &["graphene_math_nodes::ExponentNode", "graphene_core::ops::ExponentNode"], @@ -405,10 +409,6 @@ const NODE_REPLACEMENTS: &[NodeReplacement<'static>] = &[ node: graphene_std::math_nodes::round::IDENTIFIER, aliases: &["graphene_math_nodes::RoundNode", "graphene_core::ops::RoundNode"], }, - NodeReplacement { - node: graphene_std::math_nodes::sample_gradient::IDENTIFIER, - aliases: &["graphene_math_nodes::SampleGradientNode", "graphene_core::ops::SampleGradientNode"], - }, NodeReplacement { node: graphene_std::math_nodes::sine::IDENTIFIER, aliases: &["graphene_math_nodes::SineNode", "graphene_core::ops::SineNode"], diff --git a/node-graph/nodes/math/src/lib.rs b/node-graph/nodes/math/src/lib.rs index 70af2b6c5f..52df67e8c8 100644 --- a/node-graph/nodes/math/src/lib.rs +++ b/node-graph/nodes/math/src/lib.rs @@ -1259,11 +1259,13 @@ fn gradient_midpoints(_: impl Ctx, mut gradient: Gradient, midpoints: IList /// Evaluates the color at the specified position along the gradient, given a position from 0 (left) to 1 (right). Positions beyond that range follow the gradient's `gradient_spread` attribute: Pad (default), Reflect, Repeat, or Clear. Colors between stops interpolate in the gradient's `gradient_space` color space. #[node_macro::node(category("Color"))] -fn sample_gradient( +fn evaluate_gradient( ctx: impl Ctx + ExtractIndex + InjectIndex + Copy, _primary: (), #[default(Color::BLACK, Color::WHITE)] gradient: IList, - position: Fraction, + #[range] + #[soft(0..1)] + position: f64, ) -> Result, Interrupt> { // An unwired gradient serves an empty level: no color if gradient.is_empty() || ctx.index() != 0 {