mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-09-15 22:28:10 +08:00
Finalize and unify the design of the 'Morph' and 'Blend' nodes (#3974)
* Fix Morph node transform interpolation and preservation in the table * Fix click target positions for Morph's nested layers by pre-compensating upstream_data transforms * Redesign Morph node (v3) with control path input and uniformly spaced progression, and fix Stroke::lerp interpolation weights * Add migration from Morph node v2 to v3 * Redesign the 'Blend Shapes' node behavior and subgraph definition * Add the Layer > Blend menu entry to easily set up a blend * Optimize the Morph node * Refactor the Morph node to remove the roundtrip through BezPath * Fine-tune Morph node Bezier order promotion and handle interpolation * Add the Layer > Morph menu bar entry * Fix NaN and guard against other potential NaN bugs breaking the editor * Add InterpolationDistribution parameter to Morph with weighted progression, swap parameter orders, and rename shear to skew * Add the Reverse parameter to the Morph node * Update the order of the inputs to Blend Shapes for consistency with Morph * Make Layer > Morph create the Morph Path control layer * Fix migrations * Move 10 to a constant * Avoid division by 0 in the Blend Shapes node internals * Rename nodes 'Blend' -> 'Mix' and 'Blend Shapes' to 'Blend' * Fix a crash encountered while testing * Final code review * Make domain push dupe checks debug-only and use push_unchecked in the Morph node * Pre-allocate for pushes to the vector domains * Add fast path at t=0 * Inline reserve() * Set up the control path layer above not below, and starting collapsed * Review fixes --------- Co-authored-by: Timon <me@timon.zip>
This commit is contained in:
@@ -135,6 +135,7 @@ fn node_registry() -> HashMap<ProtoNodeIdentifier, HashMap<NodeIOTypes, NodeCons
|
||||
async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => graphene_std::vector::misc::CentroidType]),
|
||||
async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => graphene_std::text::TextAlign]),
|
||||
async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => graphene_std::transform::ScaleType]),
|
||||
async_node!(graphene_core::memo::MonitorNode<_, _, _>, input: Context, fn_params: [Context => graphene_std::vector::misc::InterpolationDistribution]),
|
||||
// Context nullification
|
||||
#[cfg(feature = "gpu")]
|
||||
async_node!(graphene_core::context_modification::ContextModificationNode<_, _>, input: Context, fn_params: [Context => &WasmEditorApi, Context => graphene_std::ContextFeatures]),
|
||||
@@ -229,6 +230,7 @@ fn node_registry() -> HashMap<ProtoNodeIdentifier, HashMap<NodeIOTypes, NodeCons
|
||||
async_node!(graphene_core::memo::MemoNode<_, _>, input: Context, fn_params: [Context => graphene_std::vector::misc::BooleanOperation]),
|
||||
async_node!(graphene_core::memo::MemoNode<_, _>, input: Context, fn_params: [Context => graphene_std::text::TextAlign]),
|
||||
async_node!(graphene_core::memo::MemoNode<_, _>, input: Context, fn_params: [Context => graphene_std::transform::ScaleType]),
|
||||
async_node!(graphene_core::memo::MemoNode<_, _>, input: Context, fn_params: [Context => graphene_std::vector::misc::InterpolationDistribution]),
|
||||
async_node!(graphene_core::memo::MemoNode<_, _>, input: Context, fn_params: [Context => RenderIntermediate]),
|
||||
];
|
||||
// =============
|
||||
|
||||
Reference in New Issue
Block a user