pub struct BoxConstraints {
pub min_w: LayoutUnit,
pub max_w: LayoutUnit,
pub min_h: LayoutUnit,
pub max_h: LayoutUnit,
}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: LayoutUnitMinimum width the child must occupy.
max_w: LayoutUnitMaximum width the child may occupy. Can be f32::INFINITY for unbounded.
min_h: LayoutUnitMinimum height the child must occupy.
max_h: LayoutUnitMaximum height the child may occupy. Can be f32::INFINITY for unbounded.
Implementations§
Source§impl BoxConstraints
impl BoxConstraints
Sourcepub fn tight(size: LayoutSize) -> Self
pub fn tight(size: LayoutSize) -> Self
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: LayoutUnit, max_h: LayoutUnit) -> Self
pub fn loose(max_w: LayoutUnit, max_h: LayoutUnit) -> Self
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: [LayoutUnit; 4]) -> Self
pub fn deflate(&self, padding: [LayoutUnit; 4]) -> Self
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<LayoutUnit>,
height: Option<LayoutUnit>,
) -> Self
pub fn tighten( &self, width: Option<LayoutUnit>, height: Option<LayoutUnit>, ) -> Self
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<LayoutUnit>,
max_w: Option<LayoutUnit>,
min_h: Option<LayoutUnit>,
max_h: Option<LayoutUnit>,
) -> Self
pub fn apply_min_max( &self, min_w: Option<LayoutUnit>, max_w: Option<LayoutUnit>, min_h: Option<LayoutUnit>, max_h: Option<LayoutUnit>, ) -> Self
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.
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 more