Skip to main content

BoxConstraints

Struct BoxConstraints 

Source
pub struct BoxConstraints {
    pub min_w: f32,
    pub max_w: f32,
    pub min_h: f32,
    pub max_h: f32,
}
Expand description

Minimum and maximum width/height bounds passed from parent to child during layout.

BoxConstraints is the fundamental mechanism for top-down size negotiation. A parent creates constraints describing the space available to a child, and the child returns a LayoutSize that satisfies those constraints.

There are two common patterns:

  • Tight constraintsmin == max, forcing the child to a specific size. Created with BoxConstraints::tight.
  • Loose constraintsmin == 0, giving the child freedom to be smaller than the max. Created with BoxConstraints::loose.

§Example

use fission_layout::{BoxConstraints, LayoutSize};

let constraints = BoxConstraints::loose(800.0, 600.0);
assert_eq!(constraints.min_w, 0.0);

let child_wants = LayoutSize::new(300.0, 200.0);
let actual = constraints.constrain(child_wants);
assert_eq!(actual, child_wants); // fits within the constraints

Fields§

§min_w: f32

Minimum width the child must occupy.

§max_w: f32

Maximum width the child may occupy. Can be f32::INFINITY for unbounded.

§min_h: f32

Minimum height the child must occupy.

§max_h: f32

Maximum height the child may occupy. Can be f32::INFINITY for unbounded.

Implementations§

Source§

impl BoxConstraints

Source

pub fn tight(size: LayoutSize) -> BoxConstraints

Creates tight constraints that force a child to exactly size.

Both min and max are set to the given width/height.

Source

pub fn loose(max_w: f32, max_h: f32) -> BoxConstraints

Creates loose constraints: min is zero, max is the given values.

The child can be anywhere from zero to max_w x max_h.

Source

pub fn is_width_bounded(&self) -> bool

Returns true if the maximum width is finite (not f32::INFINITY).

Source

pub fn is_height_bounded(&self) -> bool

Returns true if the maximum height is finite (not f32::INFINITY).

Source

pub fn constrain(&self, size: LayoutSize) -> LayoutSize

Clamps size so it falls within these constraints.

The returned width is max(min_w, min(size.width, max_w)), and likewise for height.

Source

pub fn smallest(&self) -> LayoutSize

Returns the smallest size that satisfies these constraints: (min_w, min_h).

Source

pub fn deflate(&self, padding: [f32; 4]) -> BoxConstraints

Returns new constraints shrunk inward by padding.

Padding is [left, right, top, bottom]. Horizontal padding reduces the width bounds; vertical padding reduces the height bounds. Bounds are clamped to zero.

Source

pub fn tighten(&self, width: Option<f32>, height: Option<f32>) -> BoxConstraints

Makes the constraints tighter by fixing the width and/or height.

If width is Some, both min_w and max_w are set to that value (clamped to the current bounds). Same for height.

Source

pub fn apply_min_max( &self, min_w: Option<f32>, max_w: Option<f32>, min_h: Option<f32>, max_h: Option<f32>, ) -> BoxConstraints

Applies additional min/max constraints on top of the current ones.

Each Some value further restricts the corresponding bound. None values leave the bound unchanged. After adjustment, max is clamped to be at least min.

Source

pub fn loosen(&self) -> BoxConstraints

Returns loose constraints with the same maximums but zeroed minimums.

Useful when a parent wants to let a child be as small as it likes while still capping its maximum size.

Trait Implementations§

Source§

impl Clone for BoxConstraints

Source§

fn clone(&self) -> BoxConstraints

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for BoxConstraints

Source§

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

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

impl PartialEq for BoxConstraints

Source§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

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

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for BoxConstraints

Source§

impl StructuralPartialEq for BoxConstraints

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> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert 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.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
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 = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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.