GlassVariantConstants class

Per-variant rendering constants (lengths in logical px).

Annotations

Constructors

GlassVariantConstants({required double blurSigma, double blurSizeRef = 0, double frostWideSigma = 0, double frostWideMixEdge = 0, double frostWideMixCentre = 0, double frostWideSizeRef = 0, double frostWideSizeDrop = 0, List<double> toneKnots = identityToneKnots, List<double> smallToneKnots = identityToneKnots, double smallSizeLo = 0, double smallSizeHi = 0, double postJacobianMax = 4, double ambientMix = 0, double ambientReach = 0, double toneLumaMix = 0, double glowStrength = 0.25, double postBlurShare = 0, double normalRadiusScale = 1, double lensEdge = 0, double lensEdgeDecay = 0.6, double rimMix = 0, double rimMixWidth = 1.5, double rimMixCut = 1, double rimMixLumaFloor = 1, double toneLift = 0, double blurAspectPower = 0, double rimBack = 0.35, double lensVertical = 0, double rimTint = 0, double rimHue = 0, double toneLiftKnee = 0.5, double toneLiftSizeRef = 0, required double lensBand, required double lensStrength, required double lensDecay, required double lensSizeRef, required double dispersion, required double rimWidth, required double rimIntensity, required Color fillColor, required double fillOpacity, double fillSizeRef = 0, double fillSizeDrop = 0, required double saturation, required double dim, required double shadowRadius, required double shadowOpacity, required double tintStrength})
Creates variant constants.
const
GlassVariantConstants.fromJson(Map<String, Object?> j, GlassVariantConstants base)
Reads keys present in j; missing keys come from base.
factory

Properties

ambientMix → double
Strength of the ambient colour (item 8): the glass adds this times the chroma (colour minus its luma) of the blurred backdrop's average over the shape, as SwiftUI's large regular glass carries the backdrop's average hue. Off in the small-shape class; 0 = off.
final
ambientReach → double
How far (pt) the ambient colour's average reaches beyond the shape's rect on each side (item 8).
final
blurAspectPower → double
Anisotropic frost (Task 17d, fitted from SwiftUI's directional detail on dark regular capsules: a wide shape keeps more detail along its long axis): sigmaX = σ·(h/w)^power, sigmaY = σ·(w/h)^power. 0 = isotropic.
final
blurSigma → double
Gaussian sigma of the frost blur (logical px).
final
blurSizeRef → double
Shapes whose half shorter side is below this get a proportionally smaller frost blur: σ = blurSigma × min(1, halfMin / blurSizeRef). 0 disables the scaling.
final
dim → double
Darkening applied after the fill (used by clear).
final
dispersion → double
Red/blue split as a fraction of the lens displacement, weighted by the lens profile (so it sits on the outer pixels). SwiftUI shows none. Negative splits red from green and blue together (iOS's tab lens), so a blue tint fringes in shades of blue rather than green.
final
fillColor → Color
Colour the content behind the glass is washed toward (opaque; JSON "#RRGGBB" or an int ARGB).
final
fillOpacity → double
How far the content is mixed toward fillColor (0 = untouched).
final
fillSizeDrop → double
Fraction of fillOpacity lost on a vanishingly small shape (see fillSizeRef).
final
fillSizeRef → double
Shapes whose half shorter side is below this get a weaker fill: fillOpacity × (1 − fillSizeDrop × (1 − min(1, halfMin / fillSizeRef))). 0 disables it.
final
frostWideMixCentre → double
Wide-tail weight where the lens samples at the shape's centre line (sample depth = half the shorter side); see frostWideMixEdge.
final
frostWideMixEdge → double
Wide-tail weight where the lens samples at the outline; with frostWideMixCentre it gives w = mix(edge, centre, sampleDepth / halfMin), minus the size term of frostWideSizeRef, clamped to 0..1. sampleDepth is the depth of the point the lens samples, so the band (which mirrors the interior) gets the interior's weight.
final
frostWideSigma → double
Sigma of the wide frost tail added in the shader on top of the blurSigma core (logical px; 0 disables the tail).
final
frostWideSizeDrop → double
Wide-tail weight lost per unit of 1 − halfMin / frostWideSizeRef.
final
frostWideSizeRef → double
Shapes whose half shorter side is below this lose wide-tail weight: w −= frostWideSizeDrop × (1 − halfMin / frostWideSizeRef). 0 disables the size term.
final
glowStrength → double
Brightness of the touch glow at full press (Task 17d; 0.25 is the pre-17d behaviour, left for the motion fit).
final
hashCode → int
The hash code for this object.
no setteroverride
lensBand → double
Depth inside the outline where the edge lens ends (displacement 0).
final
lensDecay → double
Exponential falloff length of the lens displacement.
final
lensEdge → double
Extra inward lens offset at the outline (logical px), falling off as exp(−depth / lensEdgeDecay) (Task 17d, measured: SwiftUI's lens is steeper in the outer 1–2 pt). 0 disables it.
final
lensEdgeDecay → double
Falloff length of lensEdge (logical px).
final
lensSizeRef → double
Shapes whose half shorter side is below this get a uniformly scaled-down lens (band, decay and displacement × that ratio); 0 disables it.
final
lensStrength → double
Edge displacement as a multiple of lensBand; negative samples inward (SwiftUI: about -2.6, so the outer pixels show content from ~47 pt inside, mirrored and compressed).
final
lensVertical → double
How much the lens (main and edge terms) is limited to where the outline faces up or down: 0 bends all round (the default); 1 leaves the sideways-facing outline unbent, so a horizontal capsule's round ends stay clear (iOS 26's tab lens, fitted to Kept).
final
normalRadiusScale → double
Lens normals follow a rounder outline: each corner radius × this, capped at half the shorter side (Task 17d, measured: 1.5–1.6 on SwiftUI rects). 1 uses the outline itself; capsules and circles are unaffected.
final
postBlurShare → double
Share of the frost blur's variance applied after the lens instead of before it (0..0.9; Task 17d, clear glass). The composed blur becomes σ·√(1 − share) and the shader adds σ·√share in screen space, mapped through the lens, so the refracted band is blurred like SwiftUI's.
final
postJacobianMax → double
Largest stretch of the post-lens blur taps through the lens's Jacobian (fidelity group 4: SwiftUI's clear-glass blur stays ~1.1-1.4 pt into the outer 4 pt of the band). 4 is the original clamp.
final
rimBack → double
Rim strength on the side facing away from the light, relative to the lit side (0.35 = the pre-17d literal, shipped unfitted). Task 9 measured a fixed light with a directional mismatch — the device rim is brightest around 135°, where the model's 315° light is weakest — so this key exists for a bounded refit; it is not itself the measured far/near ratio.
final
rimHue → double
Hue of rimTint, in degrees.
final
rimIntensity → double
Brightness added at the rim.
final
rimMix → double
Isotropic rim: the outer pixels mix toward white by this alpha, ramping to 0 at rimMixWidth and cut at rimMixCut (Task 17d, measured on clear glass). 0 disables it.
final
rimMixCut → double
Depth (logical px) where rimMix is cut off (a 1 px smoothstep).
final
rimMixLumaFloor → double
rimMix is scaled by floor + (1 − floor)·min(1, luma / 0.5) of the glass under it; 1 disables the scaling (dark mode measured 0.05).
final
rimMixWidth → double
Depth (logical px) where the rimMix ramp reaches 0.
final
rimTint → double
How far the isotropic rim (rimMix) turns from white towards rimHue (0 = white, the default; iOS 26's tab lens has a teal rim).
final
rimWidth → double
Width of the specular rim.
final
runtimeType → Type
A representation of the runtime type of the object.
no setterinherited
saturation → double
Saturation of the content behind the glass (1 = unchanged, 0 = grey).
final
shadowOpacity → double
Shadow strength at the shape edge.
final
shadowRadius → double
Shadow falloff radius outside the shape.
final
smallSizeHi → double
Half shorter side (logical px) at and above which smallToneKnots is off; the weight is linear in between. The feature is off when this is <= 0 (Task g13).
final
smallSizeLo → double
Half shorter side (logical px) at and below which smallToneKnots is applied at full weight (Task g13).
final
smallToneKnots → List<double>
Grey tone LUT for small shapes: Task g13: measured on the reference simulator — SwiftUI switches small shapes (half shorter side <= ~32 pt) to a steeper tone response; this LUT is applied after the fill wash and dim, weighted from 1 at smallSizeLo to 0 at smallSizeHi. identityToneKnots disables it.
final
tintStrength → double
How strongly .tint() colours the glass.
final
toneKnots → List<double>
Grey tone curve applied to the frosted backdrop: piecewise linear through these output knots at inputs i / 8, after the saturation and before the fill wash (Task 17d, seeded from flat-grey captures and fitted). identityToneKnots disables it.
final
toneLift → double
Small-shape shadow lift (Task 17d / 8b, fitted on dark regular glass): after the tone LUT each channel gains toneLift × size × max(0, 1 − c / toneLiftKnee)², with size = max(0, 1 − halfMin / toneLiftSizeRef). SwiftUI lifts the dark end behind small dark glass (a capsule over a dark photo reads grey, not black). 0 disables it.
final
toneLiftKnee → double
Input level where toneLift fades to 0.
final
toneLiftSizeRef → double
Half shorter side (logical px) at and above which toneLift is 0; 0 disables the lift.
final
toneLumaMix → double
How far the tone LUT is keyed on luma instead of applied per channel (item 8 round 3): at 1 the LUT moves the frosted backdrop's luma and its chroma rides along unchanged; 0 = per channel, as before.
final

Methods

noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
toJson() → Map<String, Object>
JSON form; fillColor is written as "#RRGGBB".
toString() → String
A string representation of this object.
inherited

Operators

operator ==(Object other) → bool
The equality operator.
override

Constants

identityToneKnots → const List<double>
Grey tone LUT output knots at inputs i / 8, i = 0..8 (identityToneKnots reproduces the input exactly).