Commit Graph

2815 Commits

Author SHA1 Message Date
Keavon Chambers c4a978009a Fix SVG import treating gamma-encoded colors as linear-light 2026-05-16 05:37:01 -07:00
Keavon Chambers 256dd26b99 Recognize ExtractPosition/InjectPosition in the node macro context analyzer
Also, fix migration missing alias
2026-05-16 01:40:49 -07:00
Keavon Chambers 06e2a049de
Implement dragging layers into the group/new/delete buttons in the Layers panel (#4153) 2026-05-15 15:39:01 -07:00
Keavon Chambers 79df7cfa87
Implement dragging the visibility/lock icons in the Layers panel to toggle each (#4152)
* Implement dragging the visibility/lock icons in the Layers panel to toggle each

* Code review fixes
2026-05-15 15:16:40 -07:00
Keavon Chambers 16c7544d96
Add the Layer > Expand Fill/Stroke menu action (#4151)
* Add the Layer > Expand Fill/Stroke menu action

* Code review feedback
2026-05-15 13:10:50 -07:00
Keavon Chambers a56746c6bf
Deprecate all usages of the Color struct representing gamma space values, fixing round-trip precision bugs (#4149)
* Deprecate all usages of the Color struct representing gamma space values, fixing round-trip precision bugs

* Code review fixes
2026-05-14 22:48:33 -07:00
gamma0987 456a7c868d
Migrate iai-callgrind to the renamed successor gungraun (#4056)
* Add .nvim.lua to gitignore

* Migrate from iai-callgrind to the renamed successor gungraun

---------

Co-authored-by: Dennis Kobert <dennis@kobert.dev>
2026-05-14 08:18:59 +00:00
Keavon Chambers 1c9c19a697
Simplify and standardize how data types are presented in user-facing strings (#4147)
* User-facing type formatting

* Parse unicode not ASCII chars
2026-05-14 00:56:43 -07:00
Keavon Chambers 696b625a3e
Fix hover transfer bugs occurring with the color picker popover (#4146)
* Fix hover transfer bugs occurring with the color picker popover

* Code review fix
2026-05-13 20:19:56 -07:00
Keavon Chambers 4d5dce976e
Replace the control bar's stroke weight with a full stroke properties popover (#4145)
* Replace the control bar's stroke weight with a full stroke properties popover

* Code review
2026-05-13 03:58:12 -07:00
Keavon Chambers 629a1f4b4c
Redesign how the control bar handles fill and stroke colors (#4137)
* Revamp how the control bar handles fill and stroke colors

* Fix bugs

* Code review
2026-05-11 18:13:02 -07:00
Keavon Chambers f6def3b911
Add icons for stroke align, cap, join, and order (#4136) 2026-05-11 03:53:38 -07:00
Timon 98daa75c26
Desktop: Add support for opening files through the already-running instance via a local socket (#4123)
* Desktop: Forward file-open args from a second launch to the running instance

Also adds socket infrastructure that can be used in the future to allow dispatching actions from another process

* Use socket instead of ipc terminologie

* Fix

* Fix

* Better pipe name on windows
2026-05-09 18:11:44 +00:00
Keavon Chambers a28b9437aa
Rename the "Table" type to "List" everywhere (#4133)
* Rename the "Table" type to "List" everywhere

* Fix a few missed ones

* Re-save demo artwork
2026-05-09 01:33:39 -07:00
Keavon Chambers 6b3e4757de
Rename the Table type's "rows" -> "items" and "columns" -> "attributes" everywhere (#4130)
* Rename TableRow -> Item

* Rename row -> item and column -> attribute throughout

* Fix a few missed ones

* Format
2026-05-08 23:11:33 -07:00
Keavon Chambers cb21e5960b
Remove serialization from Table<T> and make TaggedValue only store tooling/widget node inputs (#4129)
* Add TaggedValue::TypeDefault to avoid baking placeholder Tables into saved documents

* Add TaggedValue::TypeDefault to avoid baking placeholder Tables into saved documents

* Migrate empty Vector/Raster/Graphic/Artboard placeholder values to TypeDefault on load

Documents written before the TypeDefault mechanism existed have empty Table<Vector>/<Raster>/<Graphic>/<Artboard> values baked into every unwired exposed input. Walk each migrated node's inputs and rewrite any such placeholder NodeInput::Value into the equivalent NodeInput::type_default, so re-saved documents shed the placeholder payloads. Marked with a TODO for eventual removal once enough documents have been re-saved.

* Re-save demo artwork

* Remove Graphic and Artboard placeholder containers from TaggedValue

* Remove Raster placeholder TaggedValue variant

* Simplify document migration

* Remove Vector placeholder TaggedValue variant

* Remove NodeIdTable from the TaggedValue

* Remove StringTable from the TaggedValue

* Remove F64Table in place of F64Array in TaggedValue

* Replace TaggedValue::Color(Table<Color>) with ::Color(Option<Color>)

* Replace TaggedValue::GradientTable(Table<GradientStops>) with ::Gradient(GradientStops)

* Replace TaggedValue::BrushStrokeTable(Table<BrushStroke>) with ::BrushStrokes(Vec<BrushStroke>)

* Make TaggedValue::DocumentNode runtime-only with TypeDefault placeholder

* Make TaggedValue::ContextFeatures runtime-only

* Remove Serialize/Deserialize from Table<T>

* Add a widget for TaggedValue::BrushStrokes to visualize strokes and samples

* Define a reusable list of TaggedValue::TypeDefault types for its generated methods

* Re-save demo artwork
2026-05-08 16:11:25 -07:00
Timon d97fe835b5
Desktop: Focus app window when loading a document (#4124) 2026-05-08 15:00:20 +00:00
Keavon Chambers 9d876ab27d
Add support for opening multiple selected files from disk (#4128) 2026-05-07 21:21:45 -07:00
Keavon Chambers dff8ac5511
Remove code for the deprecated and unused Curve type (#4127)
* Remove the unused Curve type

* Fix frontend
2026-05-07 16:16:19 -07:00
Keavon Chambers 0834bff2da
Make the Brush node store its cache as internal #[data] state instead of a serialized node input (#4126)
* Make the Brush node store its cache as internal #[data] state instead of a serialized node input

* Remove BrushCacheImpl::unique_id
2026-05-07 15:34:21 -07:00
Keavon Chambers 525e49f7e9
Make the Shape tool's modes' parameter controls sync with the selected shape layer (#4121)
* Make the Shape tool's modes' parameter controls sync with the selected shape layer

* Fix populating the Shape tool mode selection list
2026-05-07 02:42:39 -07:00
Keavon Chambers 1596469e92
Make the drawing tools' Weight control sync with the selected layer (#4120) 2026-05-07 02:12:38 -07:00
Keavon Chambers 9512f7df41
Make the Gradient tool default to the primary/secondary working colors as its initial gradient (#4119)
* Make the Gradient tool default to the primary/secondary working colors as its initial gradient

* Fix drawing direction
2026-05-07 01:41:01 -07:00
Keavon Chambers 24c857ddc7
Make the Text tool control bar font family, style, and size sync with the selected layer (#4118)
* Fix contenteditable preview alignment

* Make the Text tool control bar font family, style, and size sync with the selected layer

* Tidying up
2026-05-06 20:50:41 -07:00
Keavon Chambers 2ae35a67e7 Add icons for text alignment/justification 2026-05-06 19:26:26 -07:00
Jatin Bharti c0a8241f50
Add text last-line alignment modes for "Justify Center", "Justify Right", and "Justify All" (#4024)
* feat: Add justify proper alignments(right/left/centre/all)

* chore: fmt

* chore: refactor

* Cleanup

* Fix crash when changing selected layer's alignment from the Text tool control bar

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2026-05-06 19:16:19 -07:00
Timon 1c2ac19b16
Desktop: Register the Graphite app as a file handler on Mac (#4106)
* Desktop: Implement native file open handler

* Desktop: Register file types on Mac

* Review
2026-05-06 13:05:30 +00:00
Timon 8ae8c47fe1
Fix the Fix > Close All action not resulting in the welcome screen being shown (#4107)
Fix missing welcome panel after closing all documents

Closing all documents left the Welcome panel as the only tab, but the old active document index could still point to a tab that no longer existed. The fix is to reset it to 0 when the document list becomes empty.
2026-05-06 12:03:14 +00:00
Keavon Chambers 023cf1bedd
Fix the 'Flatten Vector' node losing child layer transforms for the editor tools (#4116) 2026-05-06 04:35:23 -07:00
Keavon Chambers d106bedecd
Fix Pen tool regression that broke dragging a sharp tangent out of the last-placed anchor (#4115) 2026-05-06 03:16:24 -07:00
Keavon Chambers ecf94258fa
Fix tool overlays and snap targets to use upstream Path node geometry, not downstream final geometry (#4114)
* Fix tool overlays and snap targets to use upstream Path node geometry not downstream final geometry

* Snap to upstream Path free points, dedupe the lookup via a helper
2026-05-06 03:00:38 -07:00
Keavon Chambers 22a6e0d767
Preserve editor:layer_path through Table<Vector>::into_graphic_table() (#4113) 2026-05-06 02:21:45 -07:00
Keavon Chambers 9565d43481
Include stroke thickness in the bounds of document exports sized to fit "All Artwork" or "Selection" (#4112)
* Include stroke thickness in the bounds of document exports sized to fit "All Artwork" or "Selection"

* Code review fixes
2026-05-06 02:05:19 -07:00
Keavon Chambers 05f6138b65 Fix 'Offset Path' node crash on empty or zero-scaled geometry 2026-05-06 01:33:11 -07:00
Keavon Chambers 39a7c45ccd
Fix rendering semi-opaque paths with "Outside" stroke alignment (#4110) 2026-05-06 01:26:43 -07:00
Keavon Chambers 269a217cf9
Fix Vello renderer cropping open paths with Inside-aligned strokes and an opacity or blend mode set (#4109)
* Fix blend layers wrongly cropping Inside-aligned strokes on open paths

* Skip the closed-subpath check when stroke alignment can't apply

* Compute `can_draw_aligned_stroke` once and share it with the blend layer

* Use the actual axis scale, not the column-vector diagonal, when sizing stroke clip rects

* Fix under skew
2026-05-06 00:28:51 -07:00
Keavon Chambers 5becf132e7
Fix Vello renderer cropping wide miter joins and square caps (#4108)
* Fix renderer compositing layers cropping wide miter joins and square caps

* Fix double-scaled inflation on the Vello blend layer's clip rect
2026-05-05 22:02:02 -07:00
Keavon Chambers 644e9cf91e
New nodes: 'Attach Attribute' and 'Read Attribute *' (#4100)
* New nodes: 'Zip Attribute' and 'Read Attribute {Vector, Number, Bool, String, Transform, Color, Blend Mode, Gradient Type, Spread Method}

* Cleanup

* Reduce type explosion
2026-05-05 04:03:41 -07:00
Keavon Chambers 9db91a1ac4
Use the SpectrumInput widget for the adjustment node Properties panel layouts (#4105) 2026-05-05 03:42:44 -07:00
Keavon Chambers e59612c4ce
Port the color picker popover to a Rust-defined layout (#4102)
* Break out VisualColorPickersInput.svelte

* Break out ColorComparisonInput.svelte and ColorPresetsInput.svelte

* Add backend definitions and plumbing for the 4 new widgets

* Port the ColorPicker.svelte layout and business logic to Rust

* Port more ColorComparisonInput.svelte logic to Rust

* Port more SpectrumInput.svelte logic to Rust

* Port more frontend logic to Rust

* Code review

* Code review

* Fix some CSS
2026-05-05 02:47:53 -07:00
Keavon Chambers 62203cb171 Fix the 'Solidify Stroke' node to snapshot its merged children 2026-05-03 21:30:49 -07:00
Keavon Chambers 21e5e06b0b
Clean up document message wrappers around proto nodes so they're now used directly (#4101)
* Rename the 'Identity' node to 'Passthrough' internally

* Rename the 'Memoize'  node to 'Cache' internally

* Let skip_impl proto nodes auto-generate as document node definitions

* Remove the wrapper 'Passthrough' node from document_node_definitions.rs

* Remove the wrapper 'Cache' node from document_node_definitions.rs

* Remove the wrapper 'Monitor' node from document_node_definitions.rs

* Remove the wrapper 'Noise Pattern' node from document_node_definitions.rs

* Remove the wrapper 'Brush' node from document_node_definitions.rs

* Remove the wrapper 'Transform' node from document_node_definitions.rs

* Code review improvements

* Rename Cache node back to Memoize

* More code review
2026-05-03 19:26:36 -07:00
Keavon Chambers b27b4c6be7
Remove gaps between text glyph bounding box click targets so selection is more reliable (#4098)
* Remove gaps between text glyph bounding box click targets so selection is more reliable

* Code review
2026-05-02 21:53:33 -07:00
Keavon Chambers ebdb835890
Properly track the Text node's text frame via the attribute system to fix misalignment (#4097)
* Compensate for upstream row-0 transform absorption in viewport-space 'TransformSet'

* Add 'editor:text_frame' row attribute so the Text tool's drag cage tracks multi-row text

* "Separate Glyph Elements" -> "Separate Glyphs"

* Improve artboard migration robustness from older documents

* Code review

* Make the tools visualize the text frame based on attribute not upstream node
2026-05-02 21:04:30 -07:00
Keavon Chambers de2ae29edd
Improve click targets to use compound paths so interior negative space is excluded (#4096)
* Add ClickTargetType::CompoundPath variant for fill-rule-aware compound shape hit testing

* Generate one compound click target per Vector so glyph holes aren't treated as filled

* Fix insidenss logic
2026-05-02 18:47:43 -07:00
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 ab7f59ca61 Prep for the RC5 release of the desktop app 2026-05-01 21:58:16 -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 485bac89e5 Fix regression with the color picker in the Properties panel being broken 2026-05-01 19:55:50 -07:00