* 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
* 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
* Collapse duplicated BezPath emission, constants, and Polynomial surface across the vector algorithms
* Fix the quadratic segment length lower bound using a control leg instead of the chord
* 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
* Render a paint from its Graphic directly instead of a single-element List wrapper
* Fix a stale doc comment reference to the moved paint render implementation
* 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
* Split 'To Graphic' and 'Wrap Graphic' into the 'As Graphic' type assertion and 'Into Group' reducer nodes
* Make 'Into Group' reduce List<DVec2> not Item<DVec2>
* Reset the Merge definition for every legacy alias of its coercion nodes
* Improve test
* Add the rank-0 Item leaf variants to the Graphic enum, rendering leaves and list rows through shared per-row logic
* Traverse the rank-0 Graphic leaf variants in the vector node helpers and flattening
* Reach rank-0 vector graphics from the styling and gradient-fitting helpers
* Two code review fixes
* Fix comment
* Make the Artboard and Gradient newtype fields public to match the other list newtypes
* Rename the Graphic enum's self-named Graphic::Graphic variant to Graphic::GraphicList
* Rename the Graphic::Vector variant to Graphic::VectorList
* Rename the Graphic::RasterCPU variant to Graphic::RasterCPUList
* Rename the Graphic::RasterGPU variant to Graphic::RasterGPUList
* Rename the Graphic::Color variant to Graphic::ColorList
* Rename the Graphic::Gradient variant to Graphic::GradientList
* Rename the Graphic::Text variant to Graphic::TextList
* Restore the SVG group tag comment that the variant rename sweep clobbered
* Add the appearance model types and attribute constants
* Dual-write the appearance attribute alongside the fill/stroke pair in all paint-writing nodes
* Read paint from the appearance attribute in the renderer, analysis, metadata, and editor, cascading from ancestors
* Retire the fill/stroke attribute pair and the Vector stroke field in favor of the appearance attribute
* Replace the Stroke node's paint order input with the relative chain order of the Fill and Stroke nodes
* Code review fixes
* Re-save demo art
* Stamp coverages in place and fuse the renderer's per-item appearance reads into single walks
* Treat an empty appearance as the undeclared state so padded rows inherit instead of blocking the cascade
* Update demo art
* Treat padded appearance rows as undeclared in the boolean flatten's group recursion
* Make the 'Solidify Stroke' node preserve graphic structure instead of flattening its input
* Add a shared trait letting element-wise vector modifiers recurse into graphic groups
* Make 20 element-wise vector modifier nodes accept graphic input
* Make 'Separate Subpaths' and 'Points to Polyline' accept graphic input
* Make the 'Map Points' node accept graphic input
* Add TODO comments to the measure nodes deferred until the Graphic lowering refactor
* Honor clipping masks when rendering Vector[] lists, not just Graphic[] groups
* Keep per-layer click targets when a Vector[] round-trips through a Graphic[] wrapper
* Skip the rebuild and the merged-layers snapshot when flattening a lone anonymous graphic wrapper
* Fix a group's bounds excluding its raster children and stretching to the origin
* Fix SVG clipping masks landing in the wrong space when sibling layers differ in transform
* Stop chain node insertion from stranding a node on layers without a chain
* Gate the Layers panel blending controls on whether the layer can host them
* Gate the fill and stroke setters on whether the layer can host paint nodes
* Make the tool options fill and stroke controls treat layers that cannot take paint as unselected
* Remove the unused first_selected_stroke_weight helper
* New nodes: 'Gradient Reverse', 'Gradient Shift', and 'Gradient Stretch' nodes for rearranging a ramp's stops
* Clip a lone out-of-range stop into the bake, and correct the docs that still promised edge-held stops