pub struct Length {
pub base: LengthBase,
pub min_px: Option<f32>,
pub max_px: Option<f32>,
}Expand description
A size or distance value that may be expressed in absolute pixels or
relative to the rendering surface. Every widget API that used to take
f32 for a size, padding, spacing or font height now takes
impl Into<Length>, so existing call sites keep compiling unchanged
while new code can switch to viewport-relative units for layouts that
must scale across screen sizes (portrait phone, landscape tablet,
4K desktop) without per-target tweaks.
Resolution requires a viewport — passed in as (width, height) in
logical pixels — and an em_base (the body-text font size that
Em is a multiple of). All resolution funnels through
Length::resolve, so widgets can stay backend-agnostic.
Construct directly via the LengthBase variants
(Length::vmin( 18.0 ), Length::px( 24.0 ), …) or implicitly from
f32/i32/u32 for the px case so legacy .size( 24.0 ) style
keeps compiling unchanged. Optionally chain .clamp( min_px, max_px )
to bound a relative value into a safe range.
Fields§
§base: LengthBase§min_px: Option<f32>Lower bound in absolute logical px. None means unbounded.
max_px: Option<f32>Upper bound in absolute logical px. None means unbounded.
Implementations§
Source§impl Length
impl Length
Sourcepub const EM_BASE_DEFAULT: f32 = 16f32
pub const EM_BASE_DEFAULT: f32 = 16f32
Default font-size that LengthBase::Em is a multiple of. Matches
the typography::BODY constant of the default theme.
pub const fn from_base(base: LengthBase) -> Self
Sourcepub const fn px(v: f32) -> Self
pub const fn px(v: f32) -> Self
Shorthand constructors. Length::vmin( 18.0 ) reads better than
Length::from_base( LengthBase::Vmin( 18.0 ) ) at every call site
and the brevity matters when these appear in tight view code.
pub const fn vw(v: f32) -> Self
pub const fn vh(v: f32) -> Self
pub const fn vmin(v: f32) -> Self
pub const fn vmax(v: f32) -> Self
pub const fn em(v: f32) -> Self
Sourcepub fn dp(px: f32) -> Self
pub fn dp(px: f32) -> Self
“Design pixel”: px interpreted at the reference vmin set via
set_design_reference (defaults to 412 px — the eydos mobile
reference width). The result is a Vmin value clamped to
[px * 0.7, px * 1.5], so the layout scales with the screen
without collapsing on tiny surfaces or ballooning on 4K.
Sourcepub fn resolve(&self, viewport: (f32, f32), em_base: f32) -> f32
pub fn resolve(&self, viewport: (f32, f32), em_base: f32) -> f32
Resolve to a concrete logical-pixel value given a viewport and an
em_base (the root font size that Em is a fraction of).
Sourcepub fn clamp(self, min_px: f32, max_px: f32) -> Length
pub fn clamp(self, min_px: f32, max_px: f32) -> Length
Cap the resolved value to [min_px, max_px]. Bounds are
absolute px because the typical use is “this Vmin should never
shrink past readable nor balloon past comfortable”; bounding
a relative value with another relative value is rare enough to
not justify boxing the type. If you swap min/max the resolver
tolerates it instead of panicking.
Sourcepub fn at_least(self, min_px: f32) -> Length
pub fn at_least(self, min_px: f32) -> Length
One-sided bound: never resolve below min_px. Named at_least
(rather than min) to avoid clashing visually with f32::min,
which has the opposite semantics (“return the smaller of two”).
Sourcepub fn at_most(self, max_px: f32) -> Length
pub fn at_most(self, max_px: f32) -> Length
One-sided bound: never resolve above max_px. Counterpart to
Self::at_least.
Trait Implementations§
Source§impl From<LengthBase> for Length
impl From<LengthBase> for Length
Source§fn from(base: LengthBase) -> Self
fn from(base: LengthBase) -> Self
impl Copy for Length
impl StructuralPartialEq for Length
Auto Trait Implementations§
impl Freeze for Length
impl RefUnwindSafe for Length
impl Send for Length
impl Sync for Length
impl Unpin for Length
impl UnwindSafe for Length
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§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.§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.§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.§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.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more