Skip to main content

ShapeScale

Struct ShapeScale 

Source
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: f64

Always f64::INFINITY — resolve with ShapeScale::resolve.

Implementations§

Source§

impl ShapeScale

Source

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.

Source

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).

Source

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_radius is 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());

Trait Implementations§

Source§

impl Clone for ShapeScale

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Copy for ShapeScale

Source§

impl Debug for ShapeScale

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for ShapeScale

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for ShapeScale

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> StorageAccess<T> for T

Source§

fn as_borrowed(&self) -> &T

Borrows the value.
Source§

fn into_taken(self) -> T

Takes the value.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.