Hemu
b645871dbc
Fix duplicated dropdown selection styling when multiple entries have identical labels ( #4180 )
...
* Fix dropdown select if options have identical labels
* update other uses of label in favor of value
* simplify null checks
2026-06-07 17:53:58 -07:00
Keavon Chambers
85ee5e41b9
Fix strokes with inside/outside alignment not being selectable when above other layers ( #4207 )
2026-06-07 17:08:04 -07:00
Dennis Kobert
d5c67eeb55
Drop MemoHash's std Hash impl and route cache-identity hashing through CacheHash ( #4209 )
2026-06-07 17:49:56 +00:00
Keavon Chambers
2c29d2c406
Fix Gradient tool inserting new nodes in the wrong position when updating a Fill node's gradient chain ( #4203 )
...
* Fix Gradient tool inserting new nodes in the wrong position when updating a Fill node's gradient chain
* Improve robustness
2026-06-05 21:02:42 -07:00
YohYamasaki
a3b62dac00
Make the Gradient tool work with gradient node chains feeding a Fill node ( #4177 )
...
* Add Gradient node
* Add support of new Gradient node for Gradient tool
* Adapt gemini reviews
* Add tests
* Bring back visibility check
* Remove the 'Gradient' node since it's unwanted after all
* Formatting
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com >
2026-06-06 03:23:14 +00:00
Timon
9d2071ce6a
Desktop: Disable UI acceleration by default on Linux ( #4201 )
2026-06-05 22:16:37 +00:00
Dennis Kobert
6fe1af3afe
Add document-container crate ( #4191 )
...
* Add document-container crate: container backends and archive codecs
* Address PR review: path/prefix split, safe size casts, OPFS stream aborts
* Address PR review round 2: mmap read check, UTF8 entry names, prefix normalization
* Make MmappedBytes::new fallible so mmap reads can't silently degrade
* Address PR review round 3: backend contract uniformity (symlinks, remove, list)
* Apply symlink-component check to FolderBackend listing paths
* Address PR review: idempotent OPFS delete logging, tar default-features, shared entry-size cap
* Fix validate_path doc: dotfiles pass, CurDir/ParentDir rejected
* Omit symlink entries from FolderBackend listings for consistency with resolve
* Preserve zip I/O errors and reject non-canonical paths in validate_path
* Extend archive apis to return the archive writer
* Rename document/document-container directory to document/container
* Add archive format sniffing and deserialize_auto
* Drop temporal hedge from checked_entry_size comment
* Tighten verbose doc comments in document-container
* Coalesce consecutive same-path OPFS appends to avoid O(n^2) file copies
* Review
* Update document-container for the deserialize/store_non_blocking renames
---------
Co-authored-by: Timon <me@timon.zip >
2026-06-05 13:28:02 -04:00
Timon
08c6d02e5b
Introduce network request handler ( #4194 )
...
* Impl NetworkMessageHandler
* Repalce Frontend fetch like messages with NetworkMessage
* Reimpl resource loading with NetworkMessage
* Fix wasm
* dedublicate resource requests
* Embedd font resources created by migration
* Fixup
* Fix tests
* Fix font catalog not loading
* Cleanup
* Fix layouts not updating when font catalog is loaded
* Review
* Review
* Cleanup
2026-06-05 13:27:45 -04:00
Timon
cd8ea1f554
Migrate fonts to be stored as resources ( #4165 )
...
* Good start
* Impl
* allow responses.add(async { Message::NoOp });
* Fix
* Cache font blob in text node
* Refactor font handling to use Font struct direcly
* Fix fmt
* Embedd Font Resources by default
* Review
* Review
* Cache font info based on ResourceHash
2026-06-05 13:27:25 -04:00
Dennis Kobert
7b9c480a8d
Make ResourceStorage trait &self-based and remove 'static requirement ( #4188 )
...
* Make ResourceStorage trait &self-based with elided-lifetime ResourceFuture
* Adress review comments
2026-06-01 10:37:05 +00:00
Timon
e32ff4b7f0
Make Resource aware of its own hash ( #4187 )
...
* Fix future message handler field name
* Add Resource::hash()
* Move all remaining resource types from core-types to graphene-resources
* Review
2026-05-31 23:08:01 +00:00
Dennis Kobert
78679a5ba2
Implement editor level future message handler ( #4182 )
...
* Implement proper editor level async message handler
* Take application_io and wake callback as Editor::new arguments
* Rename AsyncMessage -> FutureMessage
* add DesktopWrapperMessage::Wake
---------
Co-authored-by: Timon <me@timon.zip >
2026-05-31 21:26:29 +00:00
Timon
51427bef5f
Fix CI profiling compile failure ( #4184 )
2026-05-31 20:32:34 +00:00
Timon
a40e0d2887
Use ResourceId for referring to Resources ( #4176 )
...
* Use ResourceId for referring to Resources
* Use Doc
* use error for preprocessor ResourceId replacement failure
* Keep hashes in DocumentInfo
* Migrate with less mem copy
* Global ResourceMessage -> ResourceStorageMessage
* Add document ResourceMessage
* Move embedding logic
* Fix
* Cleanup
* Review
* Fix
2026-05-29 10:56:32 +00:00
Timon
bbbe04903f
Define data types for ID-based resource handling ( #4168 )
...
* Add resource lib
* rename ResourceSource to ResourceInput
* Rename ResourceInput -> DataSource and improve API
* Review
---------
Co-authored-by: Dennis Kobert <dennis@kobert.dev >
2026-05-25 10:50:57 +00:00
Keavon Chambers
d0d9a350c7
Add new May 2026 release update video to website home page
2026-05-23 02:04:59 -04:00
Keavon Chambers
9dccc526bb
Add the May 2026 release message to the welcome screen
2026-05-23 01:41:42 -04:00
Keavon Chambers
96be4ec351
Add an "Initializing Renderer…" overlay when Vello shader compilation is slow on web
2026-05-23 01:07:26 -04:00
Keavon Chambers
62287d7893
Add a recovery path for autosaved documents that don't open successfully ( #4157 )
...
* Add a recovery path for autosaved documents that don't open successfully
* Fix file naming edge case
* Add edge cases for Windows zip names
* Simplify comments and remove desktop portion
2026-05-22 21:14:28 -07:00
Timon
c3b0c87cfe
Antialias checkered artboard background edges ( #4163 )
...
* Antialias checkered artboard background edges
* Review
2026-05-22 16:48:05 +00:00
Timon
2770df7567
Implement content-addressed resource storage for raster images ( #4148 )
...
* Implement content-addressed resource storage
* Implement OPFS resource storage
* Remove ResourceStorage::read
* Review
2026-05-21 19:31:07 +00:00
Keavon Chambers
21d2994059
Fix 'Solidify Strokes' node to produce dashed segments in an ordered sequence per open subpath ( #3820 )
...
Fix the ordering of dashed segments of open paths with the 'Solidify Stroke' node
2026-05-17 10:56:40 -07:00
Timon
d5f0140f26
Upgrade WGPU and Linebender dependencies ( #4154 )
2026-05-17 15:36:59 +00:00
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