* New node: 'Color Lookup' for applying .cube, .3dl, .look, .csp, and .icc LUT files
* Add LUT ingest to the UI
* Add caching to the parsed LUT
* More code review fixes
* Add a dropdown for resource selection and adopt it in the Image node
* Route every image upload through a new ResourceUpload handler with desktop support and migrate wired 'Image' node inputs
* Show each resource's user count in the resource picker dropdown
* Send a picked resource file to the document that requested it, list every non-font resource in the picker, and link sibling message docs
* Add a 'Use Tint' toggle to the 'Black & White' node and give its tint the Luminosity blend's clipping
* Fix the Black & White migration for a wired tint and gray out the tint when unused
* Add colorize and six hue ranges to the 'Hue/Saturation' node
* Hide the 'Hue/Saturation' range rows while colorize is on, note the +100 saturation rule, and tidy two lints and a tooltip
* Add per-channel records and a gamma midtones value to the 'Levels' node, with a channel selector in its Properties panel
* Migrate the old 'Levels' midtones through its output range and bound a lone midtone marker by the track edges
* 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
* 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
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
* Make Data panel scalars selectable inline, denoise float display, and move breadcrumb truncation to Rust
* Code review fixes
* Remove denoising from f32
* Decide branching mesh fill insideness by winding, normalizing drawn direction at the Path node
* Fix dead connector click targets by explicitly closing the kurbo ellipse port paths
* Fix hole subtraction when a hole vertex is snapped exactly onto its covering contour
* Classify embedded negative space by its single surrounding face so fully enclosed mesh cells still fill
* Port all remaining Subpath producers to BezPath and delete the legacy subpath module
* Reset contour state at each MoveTo so an open contour's segments don't leak into the next region
* Give the polygon and star constructors a true center and radius instead of compensated arguments
* Let the Fill and Stroke paint inputs take Item<Graphic>, replacing the IntoPaint trait
* Rename the FIll node's "fill" input to "paint"
* Let the graphic-consuming nodes take List<Graphic> directly, relying on the embedding adapters
* Remove outdated todo comments
* Re-save the demo art