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 constraints –
min == max, forcing the child to a specific size. Created withBoxConstraints::tight. - Loose constraints –
min == 0, giving the child freedom to be smaller than the max. Created withBoxConstraints::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 constraintsFields§
§min_w: f32Minimum width the child must occupy.
max_w: f32Maximum width the child may occupy. Can be f32::INFINITY for unbounded.
min_h: f32Minimum height the child must occupy.
max_h: f32Maximum height the child may occupy. Can be f32::INFINITY for unbounded.
Implementations§
Source§impl BoxConstraints
impl BoxConstraints
Sourcepub fn tight(size: LayoutSize) -> BoxConstraints
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.
Sourcepub fn loose(max_w: f32, max_h: f32) -> BoxConstraints
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.
Sourcepub fn is_width_bounded(&self) -> bool
pub fn is_width_bounded(&self) -> bool
Returns true if the maximum width is finite (not f32::INFINITY).
Sourcepub fn is_height_bounded(&self) -> bool
pub fn is_height_bounded(&self) -> bool
Returns true if the maximum height is finite (not f32::INFINITY).
Sourcepub fn constrain(&self, size: LayoutSize) -> LayoutSize
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.
Sourcepub fn smallest(&self) -> LayoutSize
pub fn smallest(&self) -> LayoutSize
Returns the smallest size that satisfies these constraints: (min_w, min_h).
Sourcepub fn deflate(&self, padding: [f32; 4]) -> BoxConstraints
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.
Sourcepub fn tighten(&self, width: Option<f32>, height: Option<f32>) -> BoxConstraints
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.
Sourcepub fn apply_min_max(
&self,
min_w: Option<f32>,
max_w: Option<f32>,
min_h: Option<f32>,
max_h: Option<f32>,
) -> BoxConstraints
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.
Sourcepub fn loosen(&self) -> BoxConstraints
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
impl Clone for BoxConstraints
Source§fn clone(&self) -> BoxConstraints
fn clone(&self) -> BoxConstraints
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for BoxConstraints
impl Debug for BoxConstraints
Source§impl PartialEq for BoxConstraints
impl PartialEq for BoxConstraints
impl Copy for BoxConstraints
impl StructuralPartialEq for BoxConstraints
Auto Trait Implementations§
impl Freeze for BoxConstraints
impl RefUnwindSafe for BoxConstraints
impl Send for BoxConstraints
impl Sync for BoxConstraints
impl Unpin for BoxConstraints
impl UnsafeUnpin for BoxConstraints
impl UnwindSafe for BoxConstraints
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,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§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.Source§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.Source§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.Source§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.