pub struct ShapeScale {
pub none: f64,
pub extra_small: f64,
pub small: f64,
pub medium: f64,
pub large: f64,
pub large_increased: f64,
pub extra_large: f64,
pub extra_large_increased: f64,
pub extra_extra_large: f64,
pub full: f64,
}Expand description
The 10 Material 3 corner-radius tokens, dp (logical px). full is
represented as f64::INFINITY rather than a separate enum variant —
resolve it against a concrete box size with ShapeScale::resolve,
which clamps an infinite radius to half the box’s shorter side (a pill
shape) and passes any finite radius through unchanged.
Fields§
§none: f64§extra_small: f64§small: f64§medium: f64§large: f64§large_increased: f64§extra_large: f64§extra_large_increased: f64§extra_extra_large: f64§full: f64Always f64::INFINITY — resolve with ShapeScale::resolve.
Implementations§
Source§impl ShapeScale
impl ShapeScale
Sourcepub const fn neutral() -> Self
pub const fn neutral() -> Self
The neutral, design-language-free shape scale — see the module docs for why these are the M3 numbers reused verbatim.
Sourcepub fn resolve(radius: f64, width: f64, height: f64) -> f64
pub fn resolve(radius: f64, width: f64, height: f64) -> f64
Resolves a corner radius against a box’s shorter side (min(width, height)), clamping an infinite (ShapeScale::full) radius to a
pill shape (shorter_side / 2.0) and any finite radius to itself
(already-finite tokens never need clamping in the M3 scale, but a
caller-supplied custom radius larger than the box would produce a
visually broken corner, so this also caps at the pill radius as a
safety net).
Sourcepub fn concentric_inner(outer_radius: f64, inset: f64) -> f64
pub fn concentric_inner(outer_radius: f64, inset: f64) -> f64
Computes the inner corner radius for a concentrically-nested element.
The concentric-corner principle (Liquid Glass, iOS 26+; see WWDC
2025 session 219 and Apple HIG) defines inner and outer shapes’
rounded corners as sharing the same geometric center, with the inner
radius derived from the outer radius minus the inset depth. This
applies when a glass container (outer, radius outer_radius) nests a
child container (inner, inset by inset on all sides); the child’s
corner radius is max(outer_radius - inset, 0.0).
§Formula
- If
outer_radiusis infinite (f64::INFINITY), return infinite (a full pill shape has no inner maximum). - Otherwise, return
max(outer_radius - inset, 0.0)(clamped at zero to prevent negative radii).
§Examples
use frust_theme::ShapeScale;
// Normal nesting: glass bar (outer r=20) with inner pill (inset 4)
assert_eq!(ShapeScale::concentric_inner(20.0, 4.0), 16.0);
// Inset larger than outer: clamp at zero
assert_eq!(ShapeScale::concentric_inner(8.0, 12.0), 0.0);
// Infinite outer radius stays infinite (no clamping)
assert!(ShapeScale::concentric_inner(f64::INFINITY, 4.0).is_infinite());