Commit Graph

3376 Commits

Author SHA1 Message Date
Keavon Chambers
d19c299f40 Build radio widget entries from choice type metadata so variants display their icons (#4408)
* Build radio widget entries from choice type metadata so variants display their icons

* Route the node properties enum radio through the shared choice type entry builder
2026-09-10 22:34:05 +00:00
Keavon Chambers
ed82c52d8e Let the Fill and Gradient tools paint blank layers with whole-expanse colors and gradients (#4407)
* Let the Gradient and Fill tools paint blank layers with whole-expanse gradients and colors

* Make it work on layers with un-fed Transform nodes

* Show the Fill tool's hover pattern over the whole expanse of layers painted by a color chain

* Let the Fill and Gradient tools replace one another's whole-expanse paint on a selected layer

* Keep a shared paint node alive when a tool takes over a layer, and share the paint value lookup

* Stop a chain node from being shifted twice when a node is inserted in front of it
2026-09-10 22:34:05 +00:00
Keavon Chambers
2af6309a3b Rename gradient type to gradient form (#4405)
* Rename gradient type to gradient form

* Update the demo art for the gradient form rename

* Say form not type in the Gradient Form node's doc comment
2026-09-10 22:33:12 +00:00
Keavon Chambers
51ab692df3 Rename spread method to gradient spread so it matches the other gradient attribute names (#4404)
* Rename spread method to gradient spread so it matches the other gradient attribute names

* Keep the legacy gradient struct's spread method field name matching its on-disk key
2026-09-10 22:33:11 +00:00
Keavon Chambers
c2f27bf743 Move the gradient-focused nodes from the Color category to a new Gradient category (#4403) 2026-09-10 22:33:11 +00:00
Keavon Chambers
87a048232c Move the gradient spread method into GradientRamp and the color picker popover (#4402)
* Add a spread method field to GradientRamp, carried at runtime as the gradient item's attribute

* Retire the Fill node's spread method input, folding its value into the gradient ramps on document upgrade

* Add an Ends spread method radio to the color picker popover, replacing the Gradient tool's control bar radio

* Update the demo art
2026-09-10 22:33:10 +00:00
Keavon Chambers
6cb4490137 Ban the null literal via ESLint and replace existing usages with undefined or truthiness checks (#4401) 2026-09-10 20:23:57 +00:00
Keavon Chambers
4f318bbdae Wrap serialized gradient stops in a new GradientRamp struct and unify FillChoice (#4400)
* Introduce the GradientRamp exchange struct as the serialized TaggedValue::Gradient payload

* Unify FillChoice and FillChoiceUI into one enum generic over color format, carrying GradientRamp stops

* Rename the TaggedValue::Gradient variant to GradientRamp to match its payload

* Move the Color variant into the tagged_value macro list since its stored and wire forms match
2026-09-10 20:23:56 +00:00
Keavon Chambers
b13ff712f5 Add a drill-in button beside Data panel gradient preview widgets (#4398) 2026-09-10 20:23:56 +00:00
Keavon Chambers
f688e4d478 Rework Gradient into a newtype of List<Color> with optional position and midpoint attributes (#4397)
* Rework Gradient into a newtype of List<Color> with optional position and midpoint attributes

* Fix Vello stopless-gradient fallback coverage, empty legacy gradient tables, the node docs gradient swatch, NaN position elision, and wired setter input overwrites
2026-09-10 20:23:55 +00:00
Keavon Chambers
4c8bddea9f Remove custom (de)serializers from the DashPattern and BoxCorners TaggedValue variants (#4394)
Replace the DashPattern and BoxCorners custom serde impls with storage-shaped Vec<f64> TaggedValue payloads
2026-09-10 20:23:54 +00:00
Keavon Chambers
81cb0515f5 Replace raw node input indices with compile-time parameter symbols (#4387)
* Remove the dead InputAccessor traits and the uncallable test helper built on them

* Replace raw node input indices with macro-generated parameter symbols across the editor

* Audit dynamic input index usage, converting to parameter symbols and named input position constants

* Abstract the remaining input index plumbing behind ParameterRef APIs and accessors

* Build SetInputValue messages as struct literals to keep message enums impl-free

* Delete the typed parameter markers in favor of explicit-output test introspection

* Wire the interpolation control path input per chain node type

* Return no input when a parameter symbol is read against the wrong node's parameter view
2026-09-10 20:23:53 +00:00
Keavon Chambers
7d25f84210 Fix the math parser's implicit multiplication precedence and other regressions from the rewrite (#4383)
* Fix parsing regressions, make parsing 2.5x faster than the old pest parser, and clean up the math-parser rewrite

* Fix review findings: whitespace-juxtaposed numbers, mixed real/complex logic, correctly rounded literals, unified NaN truthiness, and gcd/lcm range checks
2026-09-10 20:23:52 +00:00
urisinger
d9761dc61a Move the math expression parser from Pest to Chumsky and add more features (#2685)
Rewrite the math-parser library using a chumsky-based lexer and parser, adding functions, comparisons, logic, and conditionals
2026-09-10 20:23:52 +00:00
Keavon Chambers
1311ff6bf3 Add a Connect Cells option to the 'Grid' node (#4374)
Add a Connect Cells option to the Grid node
2026-09-10 20:23:51 +00:00
Keavon Chambers
1b34bd7c58 Box big enum variants to satisfy Clippy's lint warnings (#4292)
* Box the `value` field of `NodeGraphMessage::SetInputValue`

* Box the `ExecutionResponse` variant of `NodeGraphUpdate`

* Box the `Layer` variant of `NodeTypeClickTargets`

* Box the `Scope` variant of `ParsedValueSource`
2026-09-10 20:13:46 +00:00
Keavon Chambers
98d700fc60 Deduplicate the network interface query helpers and collapse TransientMetadata into TransientCache (#4382)
* Route the remaining view queries through the logging query helper

* Name the cache readers by their loading contract and stop cloning the owned nodes per collision check

* Deduplicate the port center, output count, and upstream connector helpers and drop dead accessors

* Collapse the TransientMetadata enum into the Option inside TransientCache

* Extract the shared history snapshot install from undo and redo
2026-09-10 20:13:45 +00:00
Keavon Chambers
e737cb70a3 Fix wrong-input disconnects, ghost wire caches, and partial import removal in the network interface (#4381)
* Remove commented-out code and fix stale names and doc comments

* Validate that the pinned node order only references existing nodes

* Abort remove_import before any mutation when the import's wires cannot be resolved

* Purge the deleted nodes' cached wire paths in delete_nodes

* Disconnect a deleted node's inputs by position so hidden inputs cannot mask a later exposed wire

* Gather the delete_nodes layer sweep only when deleting children needs it
2026-09-10 20:13:45 +00:00
Keavon Chambers
bc360aa910 Move session state out of the network interface caches and replace the selection hijacks with explicit parameters (#4379)
* Move drag offsets out of the stack dependents cache into dedicated drag session state

* Replace the move_layer_to_stack selection hijack with a seeded stack dependents load

* Move text measurement into a neutral utility module out of the overlays layer

* Deduplicate the document bounds queries and name the artboard clip input index

* Replace the remove_references_from_network selection hijack with an explicit shift set

* Extract shared import and export wire disconnection used by the expose handlers

* Extract the shared epilogue of the import and export removal operations

* Move the post node lookup into the network interface to fix the layering inversion

* Clear drag offsets when the stack dependents cache unloads so programmatic shifts cannot replay them

* Use the thread-local text context for text measurement instead of a process-global mutex

* Resolve the post node lookup within the network being edited instead of the document root
2026-09-10 20:13:45 +00:00
Keavon Chambers
8b3a6a350f Make the network interface's queries take &self instead of &mut self (#4378)
* Back the outward wires cache with an interior-mutability cell readable through &self

* Convert the remaining network-level caches to interior-mutability TransientCache cells

* Move the owned nodes cache out of persistent layer metadata into a transient cell

* Flatten the transient node type enum into a layer width cell with &self loading

* Back the per-node click targets cache with a TransientCache cell

* Unify the per-input and per-export wire caches into one connector-keyed map

* Flip the click target, position, and stack dependent load chains to &self

* Flip the bounding box, import export position, and port load chains to &self

* Flip the wire geometry and resolved type query families to &self

* Flip the hit testing and frontend click target surface to &self

* Flip the frontend assembly, clipboard copy, and chain validation queries to &self

* Load stack dependents before filtering layer-owned nodes out of a selected-nodes shift
2026-09-10 20:13:45 +00:00
Keavon Chambers
b694d22fa3 Replace NodeTemplate's parallel node and metadata trees with a single flat recursive shape (#4377)
* Unify NodeTemplate into a single flat recursive shape with from_parts/into_parts as the storage split points

* Unify the three sole-dependent traversals onto one is_sole_dependent kernel

* Scan network exports for resource values when collecting used resources
2026-09-10 20:13:44 +00:00
Keavon Chambers
bb447eab1a Introduce the NetworkView read cursor with typed errors and convert the network queries onto it (#4376)
* Introduce a NetworkView cursor with typed errors and convert the primitive queries to it

* Convert the composite name, selection, and eligibility queries onto NetworkView
2026-09-10 20:13:44 +00:00
Keavon Chambers
e68756a47b Make double-clicking a text layer begin editing in shallow select mode, not just deep select mode (#4373) 2026-09-10 20:13:44 +00:00
Keavon Chambers
3ef9234589 Break apart the enormous network_interface.rs into submodules (#4371)
Split the network interface monolith into submodules with no behavior change
2026-09-10 20:13:44 +00:00
Keavon Chambers
89494c0c9a Add additional tests to the network interface (#4370)
* Add a network interface invariant validator and characterization tests as a refactor safety net

* Characterize stack, chain, layer move, signature edit, and preview behaviors in tests

* Sweep network interface invariants after every message in editor tests
2026-09-10 20:13:44 +00:00
Keavon Chambers
0266996cd2 Fix assorted node graph correctness bugs and replace network interface panics with logged errors (#4364)
* Deselect deleted layer children by pruning the expanded deletion set from the selection

* Rebuild the document structure on redo to match undo

* Check for cycles in set_input before applying layout side effects rather than reverting after

* Correct the swapped old/new exposure binding names in set_input

* Reload the document structure when an import or export is appended into the first two slots

* Treat toggling preview on a disconnected export as a preview with nothing to restore

* Replace panics on malformed networks with logged errors in the network interface

* Make is_artboard an identity check independent of scene connectivity

* Stop serializing the selection undo and redo history into saved documents

* Run the set_input cycle check before the node-to-node disconnect so a rejected wire swap leaves the graph unchanged
2026-09-10 20:13:43 +00:00
Keavon Chambers
46c0a08e06 Improve number fields/labels in the UI to filter out floating point noise and truncate at correct precision (#4363)
* Improve the displayed precision of float number labels

* Show actual tiny values in high-precision number fields
2026-09-10 20:13:43 +00:00
Keavon Chambers
8632916fa5 Make the 'Angle Between' node report the signed angle and fix its zero-vector output (#4362) 2026-09-10 20:13:43 +00:00
Keavon Chambers
3336883568 New nodes: 'Sign', 'Distance', 'Cross Product', and 'Lerp' (#4361) 2026-09-10 20:13:43 +00:00
Keavon Chambers
6386928552 Add Vec2 support to the scalar math operator nodes (#4360)
* Add Vec2 support to the scalar math operator nodes

* Support the scalar-with-Vec2 operand order in the Exponent, Root, Logarithm, Min, Max, and Clamp nodes

* Detect an f32 base of e in the Logarithm node despite inexact widening to f64
2026-09-10 20:13:43 +00:00
Keavon Chambers
35120d3332 Fix the 'Divide' node dividing partially-zero Vec2 denominators and the 'Logarithm' node misdetecting base e (#4359) 2026-09-10 20:13:43 +00:00
Timon
2c31cd79c8 Fix node insertion crash caused by mismatched DefinitionIdentifier serialization (#4353) 2026-09-10 20:13:43 +00:00
Timon
9d108421cd Desktop: Stop compiling the editor into the wasm wrapper (#4348)
* Make wasm wrapper not depend on editor on native

* Introduce pkg-native

* Fix tests

* Fix fmt

* Correct span and make cargo fmt work inside editor_commands block

* Review

* Fix lint
2026-09-10 20:13:42 +00:00
Keavon Chambers
b6e413c29e Rename the nodes 'Length' -> 'Magnitude', 'Flatten Path' -> 'Combine Paths', 'Vec2 Value' -> 'Combine Vec2', and add a new 'Vec2 Value' node (#4349)
* Rename the node 'Length' -> 'Magnitude'

* Rename the node 'Flatten Path' -> 'Combine Paths'

* Replace the node 'Vec2 Value' with 'Combine Vec2' and add a new 'Vec2 Value' that's actually a vec2

* Update demo artwork
2026-09-10 20:13:41 +00:00
Keavon Chambers
2686ca3ba7 New nodes: 'Voronoi Cells', 'Tesselate', and 'Relax Points' (#4345) 2026-09-10 20:13:41 +00:00
Keavon Chambers
48f0000856 New nodes: Sort, Filter, Reverse, Shift, Shuffle, Number Sequence, List Indices, List Slice, Read Number (#4347) 2026-09-10 20:13:40 +00:00
Keavon Chambers
1809a77234 Consolidate the rank promotion and cache chain registrations behind one value-type list (#4346) 2026-09-10 18:26:53 +00:00
Keavon Chambers
fd035f31f6 New nodes: Sum, Average, Minimum, Maximum, Any, All (#4344) 2026-09-10 18:26:52 +00:00
Keavon Chambers
8bddd5680b Convert the node catalog to rank-polymorphic Item and List kernels, materialize stored values as ranked wires, and display wire rank in the graph 2026-09-10 18:26:52 +00:00
Keavon Chambers
ead622b969 Reshape the node catalog: rename the list access nodes, split Text to Vector, reinstate Upload Texture as a proto node, and delete the vestigial debug nodes 2026-09-10 18:26:52 +00:00
Keavon Chambers
1bac1d694f Split Fill's optional transform into a has-transform toggle and add the DashPattern and BoxCorners value types 2026-09-10 18:26:52 +00:00
Keavon Chambers
a373fad0ca Add Graphic::None and store paint choices as plain color, gradient, and no-paint values 2026-09-10 18:26:52 +00:00
Keavon Chambers
d13f926da3 Rename GradientStops to Gradient and the legacy Gradient/Fill structs to LegacyGradient/LegacyFill 2026-09-10 18:26:52 +00:00
Dennis Kobert
e10d56c261 Box the largest message and update payloads 2026-09-09 15:39:37 +00:00
Dennis Kobert
f566e8ee17 Sort key mappings and node positions by key 2026-09-09 15:39:32 +00:00
Dennis Kobert
6910a12f71 Drop redundant conversions, assertions and struct updates 2026-09-09 15:39:17 +00:00
Dennis Kobert
f726014c93 Elide the arena lifetimes that the signatures do not need 2026-09-09 15:39:12 +00:00
Dennis Kobert
23313bd5ae Name the crate cluster tuple as a type alias 2026-09-09 15:39:12 +00:00
Dennis Kobert
a06039c6c8 Explain why the selective color and spline loops index by range 2026-09-09 15:39:12 +00:00
Dennis Kobert
7cd6e7cd04 Collapse nested conditionals into let-chains and match guards 2026-09-09 15:31:36 +00:00