#[repr(u32)]pub enum QuadKind {
Solid = 0,
GlyphMask = 1,
GlyphColor = 2,
Image = 3,
GlyphSubpixel = 4,
Shadow = 5,
Segment = 6,
Fragment = 7,
Texture = 8,
Backdrop = 9,
}Variants§
Solid = 0
Rounded rect with optional border; ignores uv.
GlyphMask = 1
Alpha-mask glyph: atlas alpha times color.
GlyphColor = 2
Color bitmap glyph (emoji): atlas rgb, alpha times color.a.
Image = 3
Registered image blitted into the atlas: atlas rgba tinted by
color (white = as-is), rounded by radius like a solid.
border_w is the sampling flag — 0 linear, 1 nearest — a slot this
kind had no other use for; blur is 0.
GlyphSubpixel = 4
LCD subpixel glyph: atlas rgb is per-channel coverage (times
color.a), color.rgb the text color. Needs per-channel (dual
source) blending; a backend without it treats the atlas alpha as a
plain mask.
Shadow = 5
Drop shadow: color filling a rounded rect inset from rect by
blur on every side, its edge ramped over blur px. The core
emits it just before the node’s own quads, already offset and
spread, so a backend only has to soften the SDF it already
computes. Ignores uv, border_color and border_w.
Segment = 6
A round-capped stroke between two endpoints.
uv holds the endpoints
as [x0, y0, x1, y1] in physical px, each an f32 stored through
to_bits — Quad::segment_ends reads them back — border_w is
the stroke width and color the stroke. rect is the bounding
box, the endpoints inflated by half the width plus two logical px
so the edge ramp is never cut by the quad’s own edge. A backend
evaluates an SDF capsule against the fragment’s position. Ignores
radius, border_color and blur.
Fragment = 7
A box a host-registered WGSL function paints.
uv[0] indexes DisplayList::fragments, which carries the
handle and the sixteen parameters; the other three words of uv
are zero. rect, radius, clip and clip_radius are the
node’s and mean what they mean everywhere else — the backend
rounds and clips a fragment exactly as it rounds and clips a
solid. color carries the group opacity in its alpha and nothing
else (rgb is zero), because a fragment returns its own colour
and a faded subtree still has to fade it. border_color,
border_w and blur are zero and ignored. A backend that cannot
draw one — anything predating this kind — draws nothing, which is
what a missing handle does too.
Texture = 8
A registered image drawn from a texture of its own rather than the
atlas: one that did
not fit a page, or whose pixels the app has replaced. uv[0]
indexes DisplayList::textures, which carries the handle and the
texel rect in that texture; the other three words of uv are
zero. Everything else is what an Image quad’s is — rect,
radius, clip, color as a tint (white = as-is) with the group
opacity in its alpha, and border_w the sampling flag. A backend
binds the texture in place of the atlas for the run and draws it
as an Image; one that predates the kind draws nothing.
Backdrop = 9
Blur what is already drawn beneath rect — CSS’s
backdrop-filter: blur(), a node’s backdrop_blur (backlog
F129). blur is the radius in physical px; radius, clip and
the clip’s radii shape the region as they shape a solid; color
carries the group opacity in its alpha (rgb zero), how much of
the blurred picture replaces the sharp one. The core emits it just
before the node’s own background, so what the node paints lies on
top of the blur. It paints nothing of its own: a backend reads back
the pixels drawn so far under the rect (plus a margin of blur so
the edge pulls in what lies outside it), blurs them, and writes
them back inside the shape. A backend that cannot read its target —
the CPU raster, anything predating the kind — draws nothing, which
leaves the node over an unblurred backdrop.
Implementations§
Trait Implementations§
impl Copy for QuadKind
impl Eq for QuadKind
impl StructuralPartialEq for QuadKind
Auto Trait Implementations§
impl Freeze for QuadKind
impl RefUnwindSafe for QuadKind
impl Send for QuadKind
impl Sync for QuadKind
impl Unpin for QuadKind
impl UnsafeUnpin for QuadKind
impl UnwindSafe for QuadKind
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
impl<S, T> Duplex<S> for Twhere
T: FromSample<S> + ToSample<S>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.