* Add a selection mode to the spectrum widget so only the gradient editor keeps a highlighted stop
* Record the drag mode for every drag and require selection for reordering so a non-selecting widget cannot drag the wrong stop
* Add a range slider mode to the spectrum widget and slider rows to node properties
* Reset the weighted strength slider to the node's default of zero and skip markers off the track when picking up the nearest one
* Remove the 'Threshold' node's luminance calculation dropdown so it always compares the Rec. 601 luma
* Find the HSL lightness extremes before encoding and drop a stale luminance TODO
* Switch Color struct back to storing unassociated alpha
* Address review feedback
* Update the Invert node and legacy image migration for straight alpha and add round-trip tests
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Let the Freehand tool continue a selected open path from its endpoint and show endpoint overlays in the Freehand and Spline tools
* Share the closest-point search with the open path endpoint lookup, tally endpoint connections in a single pass, and rename the endpoint overlay function
* Skip hidden layers and use the feeds-aware transform in path point searches, path overlays, and Freehand point placement
* Map the Spline tool's merge goal with the feeds-aware transform so it matches the endpoint candidates
* Highlight the hovered open path endpoint in the Freehand and Spline tools
* Give each Pen tool segment its own history step and keep drawing across undo/redo
* Test that undo during a Pen tool handle transform cancels it and rewinds
* Desktop: Make input routing aware of floating menus
* Desktop: Route mouse input like pen input
* Desktop: Model pointer input routing as a state machine
* Pin cargo-binstall and cargo-about and cross-reference all tool version pins
* Pin the cargo-binstall GitHub Action to its release tag
* Use a version floor for cargo-about and drop the Nix sync notices
Some minor fixes to issues I ran into using devcontainer on this project
with vscode.
- Add `esbenp.prettier-vscode` to the recommended extensions list as
it's already used in `.vscode/settings.json`
- Install `wasm32-unknown-unknown` Rust target in devcontainer
- Add cargo-binstall and pin cargo-about version in devcontainer
- Remove `no-clearly-defined = true` from `about.toml`:
- cargo-about 0.9.1 fails to run if `no-clearly-defined` is present
- cargo-about 0.8.0 already [removed
support](https://github.com/EmbarkStudios/cargo-about/blob/main/CHANGELOG.md#080---2025-09-05)
for clearlydefined.io, so the argument is a no-op
* Revert "Fix corrupted font resource loading in older documents"
This reverts commit 404d9f3047.
* Fix migrations for the Read Vector, Dot Product, Query JSON, and Sample Polyline nodes
* Fix text node migrations
* Provide resource storage to the resource message handler
* Refetch resources whose stored bytes are missing
* Add test for refetching resources with missing bytes
* Draw raster images with pad extension instead of repeat
* Add the GPU basic brush renderer
* Rework the brush tool around the GPU basic brush
* Remove the CPU brush implementation
* Destroy GPU textures when the last reference drops
* Request pooled textures synchronously
* Pool cached textures by format
* Add the owned GPU buffer type
* Route the remaining GPU allocations through the executor
* Add weak texture parking to the texture cache
* Raise the texture cache budget to 1GB for native and 512MB for wasm
* Rename the editor mouse state types to Pointer* and the input_ modules
* Add optional pen attributes to the editor pointer state types
* Desktop: Send tablet pointer clicks to CEF as mouse clicks
* Desktop: End pointer lock and pending window drags on any left-equivalent release
* Desktop: Route pointer input carrying pen attributes directly to the editor
* Desktop: Route wheel and pinch input inside the viewport directly to the editor
* Desktop: Track double clicks on the direct editor route
* Desktop: Move the pointer lock position into InputState
* Restore the input state pointer position when pointer lock ends (review)
* Fix pen input being swallowed by Windows resize helper
* Update winit to 0.31.0-beta.2 from crates.io
* Add event time to the editor pointer states
The brush trace's hot core is position plus per-sample time, and the
frame clock is too coarse for high-rate tablets: several samples share
one timestamp and speed dynamics see dt = 0. The desktop stamps
editor-routed pointer input with a monotonic arrival time since winit
does not surface hardware timestamps; the web path can thread the
PointerEvent timeStamp through later.
* Capture pen input via browser api
* Replay coalesced pointer samples for smoother pen strokes
* Handle missing or empty coalesced pen events
Add event time to the editor pointer states
The brush trace's hot core is position plus per-sample time, and the
frame clock is too coarse for high-rate tablets: several samples share
one timestamp and speed dynamics see dt = 0. The desktop stamps
editor-routed pointer input with a monotonic arrival time since winit
does not surface hardware timestamps; the web path can thread the
PointerEvent timeStamp through later.
* Rename the editor mouse state types to Pointer* and the input_ modules
* Add optional pen attributes to the editor pointer state types
* Desktop: Send tablet pointer clicks to CEF as mouse clicks
* Desktop: End pointer lock and pending window drags on any left-equivalent release
* Desktop: Route pointer input carrying pen attributes directly to the editor
* Desktop: Route wheel and pinch input inside the viewport directly to the editor
* Desktop: Track double clicks on the direct editor route
* Desktop: Move the pointer lock position into InputState
* Restore the input state pointer position when pointer lock ends (review)
* Fix pen input being swallowed by Windows resize helper
* Update winit to 0.31.0-beta.2 from crates.io