Commit Graph

110 Commits

Author SHA1 Message Date
Keavon Chambers 325e9aff06
Add custom click targets to make Text node output easier to select (#4095)
* Stop pushing duplicate layer entries when re-clicking an already-selected layer

* Make Text node generate per-glyph bounding box click targets

* Show source-geometry outlines and aggregate all rows for layer click targets

* Strip 'editor:click_target' override on Path node so direct edits restore precise hit testing

* Fix inverting a zero-determinate transform
2026-05-02 18:12:42 -07:00
Keavon Chambers a0d5f418d9
Replace Table<Table<Graphic>> with Table<Artboard> where Artboard is a type boundary newtype (#4093)
Replace Table<Table<Graphic>> with Table<Artboard> with Artboard as a type boundary newtype
2026-05-01 21:57:50 -07:00
Keavon Chambers 9943af5248
Fix SVG renderer not playing animation due to a regression from the tile cache discarding the context (#4092) 2026-05-01 20:32:53 -07:00
Keavon Chambers eeb1f85e25
Fix 'Boolean Operation' node outputs having the reversed winding direction (#4091) 2026-05-01 19:23:44 -07:00
Timon 29f6e686ee Reimplement checkered background rendering (#4034)
* Reimplement background checkerboard rendering
2026-05-01 17:02:10 +00:00
Keavon Chambers 4474de4662
Replace the AlphaBlending struct with separate attributes (#4086)
* Replace the AlphaBlending struct with separate attributes

* Fix bug

* Fix bug
2026-05-01 03:27:42 -07:00
Keavon Chambers 86134c26b4
Remove the 'Blending' node, moving clip into a new 'Clipping Mask' node and fill into the 'Opacity' node (#4085)
* Separate 'Clip' into its own node out from the removed 'Blending' node

* Code review

* Rename to Clipping Mask

* Update Opacity node in demo art that use it

* Use DIsplay not Debug for printing blend modes
2026-04-30 20:04:04 -07:00
Keavon Chambers 4b2430290c
New nodes: 'Gradient Type' and 'Spread Method', and add Gradient tool support for controlling these nodes (#4084)
* Use 'Transform', 'Gradient Type', and 'Spread Method' nodes for table gradients

* Add gradient widget to the tool's control bar and update where the two swap buttons go

* Fix gradient rendering

* Format

* Code review
2026-04-29 19:27:44 -07:00
Keavon Chambers f52009b402 Fix hashing not being based on all attributes of Table (#4079)
* Fix hashing not being based on all attributes of Table

* Cover all attributes in Table PartialEq and CacheHash

---------
2026-04-29 04:37:51 -07:00
Keavon Chambers ba63c26c62 Replace the Artboard struct with a Table<Table<Graphic>> shape (#4077)
* Replace the Artboard struct with a Table<Table<Graphic>> shape

* Remove the never-functional, seemingly unneeded migrate_type_descriptor_names due to typo

* Allow negative artboard sizes
2026-04-28 22:58:33 -07:00
Keavon Chambers 0847d7b0ab Centralize attribute strings in consts and rename "editor:layer" to "editor:layer_path" (#4076)
* Rename "editor:layer" to "editor:layer_path" and centralize it in a const

* Centralize "editor:merged_layers" in a const

* Centralize all other attributes in consts

* Rename consts with ATTR_ prefix

* Format
2026-04-28 21:53:30 -07:00
Keavon Chambers 5774ec215d Replace deprecated row/cell/instance terminology with "item" and "value" terms (#4075) 2026-04-28 19:12:59 -07:00
Keavon Chambers 6b11b47753 Improve the Data panel with type-specific detail pages and nested-layer support (#4070)
* Improve the Data panel with more type-specific detail pages

* Add network_path to SetDisplayName so renames target any network depth

* Track nested layers via full editor:layer paths and rename parent_layer to path_of_subgraph

* Polish the data panel NodeId leaf page with an editable name field

* Make lock and visibility toggles work for layers in nested subgraphs

* Fix formatting

* Fix connected_to_output running in the wrong network for nested-layer toggles
2026-04-28 15:37:07 -07:00
Keavon Chambers 84fb901b5a Add useful attributes to the JSON and Regex nodes (#4069)
* Add useful attributes to the JSON and Regex nodes

* Code review fix
2026-04-28 14:11:34 -07:00
Keavon Chambers b396d17211 Migrate remaining node graph data types from Vec to Table (#4067)
* Move Vec<String> to Table<String>

* Remove old VecDVec2

* Move Vec<u8> to Table<u8>

* Move Vec<f64> to Table<f64>

* Move [f64; 4] to Table<f64>

* Move Vec<NodeId> to Table<NodeId>

* Tidy up the TaggedValue variants

* Move Vec<BrushStroke> to Table<BrushStroke>

* Add missing type implementations

* Fix tests

---------
2026-04-28 13:44:25 -07:00
Keavon Chambers df8c2125d9 Migrate 'Scatter Points' and 'Boolean Operation' from subgraphs to memoized proto nodes (#4066) 2026-04-28 12:40:03 -07:00
Dennis Kobert e0368435b9 Add the "memoize" attribute to the node macro (#4065)
* Add memoization attribute to node macro

* Fix memoization insertion for networks without conversion nodes
2026-04-28 11:55:38 +00:00
Keavon Chambers 3eba762135 Migrate 'Sample Polylines' from a subgraph to a proto node (#4063) 2026-04-28 04:20:47 -07:00
Keavon Chambers 881784ba66 Make the Data panel show type-driven widgets for attributes (#4062) 2026-04-28 03:52:04 -07:00
Keavon Chambers afc2c9178e Move source_node_id to "editor:layer" and Vector<Upstream> to "editor:merged_layers", backed by a new 'Write Attribute' node (#4061)
* Fix click target propagation with the Rasterize node

* Add the 'Write Attribute' node

* Remove tag_layer in favor of the new Write Attribute node, prune redundant attribute writes

* Replace the Vector<Upstream> type argument with the "editor:merged_layers" attribute
2026-04-28 03:28:31 -07:00
Keavon Chambers 76938eb69a Implement dynamic table attributes to generalize the graphic-specific Table type (#4050)
* Feature-gate serde derives behind cfg_attr in all runtime node graph type crates

* Refactor Table to move its hard-coded fields into an attributes field

* Encapsulate TableRow/TableRowRef/TableRowMut attribute fields behind accessor methods

* Remove TaggedValue::GraphicUnused

* Refactor Table<T> to use dynamic attributes instead fixed names

* Fix code review soundness concerns

* Add todo work

* Replace row-oriented Table<T> API with column-oriented access

* Fix attribute propagation bugs

---------
2026-04-28 03:25:16 -07:00
Firestar99 824d1162eb
Update rust-gpu to `0.10.0-alpha.1` (#4033)
* rust-gpu alpha.1: update nix flake

* rust-gpu alpha.1: disable non-working mold shell hook

* rust-gpu alpha.1: update rust-gpu to `0.10.0-alpha.1` on crates

* Review

* Fix gpu nodes

* Reduce wasm size

---------

Co-authored-by: Timon <me@timon.zip>
2026-04-27 23:53:49 +00:00
Dennis Kobert 3d84e63ef9
Migrate usage of the Hash trait for cache invalidation to the dedicated CacheHash trait (#4051)
* WIP start migrating usages of hash for cache invalidadion to dedicated trait

* Finish migrating usages

* Code review

* Add comments clearifying the reasoning for using random ids in the VectorModification cach hash impl

* Fix some remaining hash violations

* Finish migration and fix compilation

* Fix import ordering

* Cleanup

* Fix code review stuff

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2026-04-27 05:18:47 +00:00
Keavon Chambers 7bb01c9651
Fix dropdown menus spawning offset in scrolled panels, a regression from upgrading to Svelte 5.54 (#4047)
* Fix dropdown menus spawning offset in scrolled panels, a regression from upgrading to Svelte 5.54

Regression introduced in #3933 by upgrading from Svelte 5.47.1 to 5.54.1

* Code review

* Fix unrelated typo

* Add assets build size to build link comment
2026-04-24 12:17:27 -07:00
Keavon Chambers c9c76df40c
New nodes: 'Regex Contains', 'Regex Replace', 'Regex Find', 'Regex Find All', and 'Regex Split' (#4045)
* Add a family of 5 regex nodes for string processing

* Fix unstaged change
2026-04-24 00:55:24 -07:00
Keavon Chambers c32c808d5b
New nodes: 'Format JSON', 'Query JSON', and 'Query JSON All', replacing the 'JSON Get' node (#4044)
* New nodes: 'Format JSON', 'Query JSON', and 'Query JSON All', replacing the 'JSON Get' node

* Fix bugs
2026-04-24 00:26:29 -07:00
Keavon Chambers 6c0af72053
Add a family of 14 new string processing nodes (#4010)
* Add new string processing nodes

* Remove the IntegerCount = u32 type alias

* Add the 'Format Number' node

* Add "Up To" parameter to the 'String Pad' node

* Fix 'String Capitalization' behavior

* Add 'Map String' and 'Read String' nodes

* Add separator_escaping to 'String Repeat'

* Add 'Regex Replace'

* Add 'Regex Match' node

* Regex Find and Regex Find All

* Code review

* Add the 'Escape String' node

* Improve implementations

* Move nodes from logic.rs to text/src/lib.rs

* Clean up migrations

* Fix #[{hard, soft}_{min, max}(...)] node macro attribute

* Improve Data panel number and text display

* Add the 'Query JSON' and 'Query JSON All' nodes

* Add the 'Lorem Ipsum' node and Ipsum library

* Add the 14 nodes back in their final state

* Add handling for fixed decimal places in number formatting

* Code review fixes
2026-04-23 22:46:20 -07:00
Keavon Chambers 328c4f272b
New node: 'String Capitalization' (#4043)
* New node: 'String Capitalization'

* Clarify comment
2026-04-23 19:12:00 -07:00
Keavon Chambers a59fed9d1c
Move the "Text" category nodes from gcore/src/logic.rs to text/src/lib.rs (#4042)
Move the String category nodes from gcore/src/logic.rs to text/src/lib.rs
2026-04-23 18:12:28 -07:00
Keavon Chambers f42d12da9e
Improve type handling for ints/floats with the #[hard/soft_min/max(...)] node macro parameter attributes (#4041) 2026-04-23 15:49:30 -07:00
Keavon Chambers d3f36a95cf
Rename 'Image Value' node to 'Image' and have its input value be an image not a raster table (#4037)
* Rename 'Image Value' node to 'Image' and have its input value be Image<Color> not Table<Raster<CPU>>

* Add a Properties panel widget labeling "width x height" for images in the Image node

* Add Image<Color> node registry entry for MonitorNode

* Code review
2026-04-22 16:00:03 -07:00
Keavon Chambers da45ab2f87
Add a checkered background to transparent artboards and the infinite canvas (#4022)
* Add checkered transparency rendering to infinite canvas and artboards

* Enable artboard clipping by default

* Make new infinite canvas documents begin with a white background layer

* Remove the export dialog's transparency option now that it's redundant

* Make exporting transparent JPGs use white not black

* Code review
2026-04-10 03:21:21 -07:00
Timon 661e8bc569
Remove surface and window from ApplicationIo (#3941)
* Remove surface and window from ApplicationIo

* Seperate Wasm and Native ApplicationIo

* Fix warnings

* Fix tests

* Remove redundant PlatformApplicationIo::new_offscreen

* Fixup

* Remove unused From implementaitions for ApplicationIo
2026-04-09 20:12:53 +00:00
Keavon Chambers 4360359d60
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>
2026-04-03 20:45:58 -07:00
Keavon Chambers 662691f32a New node: 'Offset Points' 2026-04-01 23:02:59 -07:00
Keavon Chambers 1543d974ac
Fix 'Jitter Points' and 'Sample Polylines' working incorrectly with X or Y scale of 0 content (#3984)
* Fix NaN points produced by Sample Polylines on 0-scaled input

* Fix Jitter Points inverse transform for zero-scale axes and stop resetting stroke transform

* Remove a couple confusing Debug nodes

* Fix edge case

* Update demo art

* Fix order change in Jitter Points causing different results from earlier

* Fix bug in bisect tool

* Break out functionality into helper functions
2026-04-01 22:51:48 -07:00
Keavon Chambers 211b9113a1
Add the "Along Normals" parameter to the 'Jitter Points' node (#3983)
* Add the "Along Normals" parameter to the 'Jitter Points' node

* Fix the edge case of a self-loops
2026-04-01 05:18:56 -07:00
Keavon Chambers a3ea6ab0af
Refactor transform decomposition API with skew support, add 'Decompose Skew' node, and fix stroke transform interpolation (#3973)
* Refactor transform decomposition API with skew support, add Decompose Skew node, and fix stroke transform interpolation

* Fix bug in master with skew changing Area node calculated value

* Code review simplification

* More code review fixes

* Rename cases where "shear" terminology was used in place of "skew"
2026-03-28 20:47:32 -07:00
Keavon Chambers e2a142333f
Fix the Auto-Tangents node for linear polylines, and track colinear handles in manipulator data (#3972)
* Fix the Auto-Tangents node for linear polylines, and track colinear handles in manipulator data

* Simplify
2026-03-28 18:26:08 -07:00
Keavon Chambers 71ff4c937f
Update 'Solidify Stroke' to preserve the original fill (#3971)
* Update 'Solidify Stroke' to preserve the original fill

* Efficiency improvements
2026-03-28 18:11:26 -07:00
Keavon Chambers 50a618ad12
New node: Path is Closed (#3970)
Add the 'Path is Closed' node
2026-03-28 17:37:50 -07:00
Keavon Chambers 17da9ec099
New nodes: 'Decimate' and 'Simplify' (#3851)
* New node: Decimate

* Use preallocated stack to reduce number of allocations and fix double endpoints on closed paths

* Use Kurbo implementation of path-to-polyline sampling

* Add the 'Simplify' node
2026-03-21 17:08:18 -07:00
Keavon Chambers d5d10fe548
Rename /frontend/wasm -> /frontend/wrapper (#3927) 2026-03-21 03:46:47 -07:00
Timon a18b7ff79d
Desktop: Add an 'Enable V-Sync' preference on Mac (#3887)
* add vsync pref

* account for physical scale in pixel preview passthru check

* change allow to expect attr

* Update user-facing v-sync text

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2026-03-11 21:32:37 +00:00
Dennis Kobert 116a4106c4
Add texture pool to render cache node (#3804)
* Add texture pool to render cache node

* Use direct texture copy instead of bitter and fix graphene_cli

* Remove warnings

* Fix wgpu import path

* Code review fixes
2026-03-11 09:44:21 +00:00
Dennis Kobert 90533e656f
Remove the path-bool library (#3882) 2026-03-11 08:55:03 +01:00
jneem 58aae4f87b
Replace the Boolean Operations node's algorithm with the Linesweeper library (#2670)
* Attempt one-shot n-ary ops

* Make it not crash

* Try to remove more path_bool

* Add quantization

* Update to latest

* Nits

* Code review

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2026-03-10 22:00:49 -07:00
Timon 095c2a6d47
Add the Pixel Preview render mode (#3881)
* Add pixel preview render mode

* Fix fmt

* Remove unused sampler

* Remove unnecessary mutex

* Code review

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2026-03-11 02:44:00 +00:00
Keavon Chambers 9f9dd71e91
Fix vector drawing tool transform space handling (#3872)
* Fix vector drawing tool transform space handling

* Review fixes

* Fix test
2026-03-10 00:58:51 -07:00
Dennis Kobert f06983d072
Fix texture cache region size and broken rendering when tilting the viewport (#3867)
* Fix rotation for render cache

* Simplify code and fix zoom not invalidating cache

* Add constant for quantization amount

* fix region size

* print error when splitting oversized region fails

---------

Co-authored-by: Timon <me@timon.zip>
2026-03-09 23:42:38 +00:00