Skip to main content

Theme

Struct Theme 

Source
pub struct Theme {
    pub design_system: DesignSystem,
    pub fallback: DesignSystem,
    pub color_scheme: ColorScheme,
    pub adaptive: bool,
    pub fonts: [u32; 9],
    pub palette: Option<&'static Palette>,
}
Expand description

A design system choice plus how it reacts to the host platform.

Fields§

§design_system: DesignSystem§fallback: DesignSystem§color_scheme: ColorScheme§adaptive: bool§fonts: [u32; 9]

The font asset each type role resolves to, or zero for the system font.

Per theme and not per node. A node that could name its own font would be a node deciding typography, and the whole point of roles is that it does not: an application changes what Display is made of, and every title changes with it.

Indexed by the role’s wire tag minus one, so the array and the enum cannot drift apart without the compiler saying so.

§palette: Option<&'static Palette>

The application’s own colours, laid over whichever design system is chosen.

A reference to something that lives for the whole program, so that a theme stays Copy and can still be built in a const. The same palette goes onto every system an adaptive theme may pick, because a brand colour does not change with the platform. A palette built while the application runs is handed to use_theme, which owns it, so application code never has to give it that lifetime itself.

Implementations§

Source§

impl Theme

Source

pub const fn unified(design_system: DesignSystem) -> Self

The same design system on every platform.

Source

pub const fn adaptive(fallback: DesignSystem) -> Self

Follows the host platform. The fallback is required, so no platform is left undecided.

Source

pub const fn with_color_scheme(self, color_scheme: ColorScheme) -> Self

Source

pub const fn with_font(self, role: TypeRole, asset: u32) -> Self

Resolves one type role to a registered font, leaving every other role alone.

The asset has to be registered before the theme that names it reaches the Renderer, the same way a picture does. An id that names nothing is reported and the role falls back to the system font, because a screen in the wrong typeface is better than no screen.

Source

pub const fn with_palette(self, palette: &'static Palette) -> Self

Lays the application’s own colours over the design system.

Only colour roles change. Shape, type, spacing, elevation, motion and how each component is drawn stay the design system’s, so the same brand colour reads as that system’s button rather than as a copy of another’s. Both schemes go to the Renderer at once, so a switch between light and dark never asks the Host.

Source

pub const fn font(&self, role: TypeRole) -> Option<u32>

The font this role resolves to, or None for the system font.

Trait Implementations§

Source§

impl Clone for Theme

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 Theme

Source§

impl Debug for Theme

Source§

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

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

impl Default for Theme

Saying nothing follows the host platform, with Material 3 where the platform has no look of its own. The default used to be unified(Material3), on the theory that a default looking the same everywhere is more predictable. In practice that meant macOS showed a Material screen with no configuration, which is the wrong first impression for a toolkit that claims native desktop UI, and it meant nothing on the default path ever exercised platform adaptation. A default that can be broken without anyone noticing is not predictability. An application that wants one design system everywhere says Theme::unified(..), which is a clearer statement of that intent than silence was.

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Eq for Theme

Source§

impl PartialEq for Theme

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 Theme

Auto Trait Implementations§

§

impl Freeze for Theme

§

impl RefUnwindSafe for Theme

§

impl Send for Theme

§

impl Sync for Theme

§

impl Unpin for Theme

§

impl UnsafeUnpin for Theme

§

impl UnwindSafe for Theme

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