Skip to main content

FlexMeasurePolicy

Struct FlexMeasurePolicy 

Source
pub struct FlexMeasurePolicy {
    pub axis: Axis,
    pub main_axis_arrangement: LinearArrangement,
    pub cross_axis_alignment: CrossAxisAlignment,
}
Expand description

Unified Flex layout policy that powers both Row and Column.

This policy implements Jetpack Compose’s flex layout semantics:

  • Measures children with proper loose constraints (min = 0 on both axes)
  • Supports weighted distribution of remaining space
  • Handles bounded/unbounded main axis correctly
  • Implements correct intrinsics for both axes

§Overflow Behavior

Like Jetpack Compose, this policy allows children to overflow their container bounds:

  • Children can be positioned outside the parent’s measured size
  • Overflowing content is rendered (unless clipped by a modifier)
  • When content overflows, distribution arrangements switch to Start to avoid negative spacing
  • SpacedBy keeps its fixed inter-child spacing even when content overflows

Example: A Row with 300px of content in a 200px container will:

  1. Measure children at their natural sizes
  2. Detect overflow (300px > 200px)
  3. Switch to Start arrangement (pack children at the start)
  4. Position last children beyond the 200px boundary

To prevent overflow:

  • Use weights for flexible sizing: .weight(1.0, true)
  • Use fillMaxWidth()/fillMaxHeight() modifiers
  • Design UI to fit within available space
  • Add a clip modifier to hide overflowing content

§Weighted Children

When the main axis is bounded and children have weights:

  1. Fixed children (no weight) are measured first
  2. Remaining space is distributed proportionally to weights
  3. Each weighted child gets: remaining * (weight / total_weight)
  4. If fill=true, child gets tight constraints; if fill=false, loose constraints

When the main axis is unbounded, weights are ignored (all children wrap content).

Fields§

§axis: Axis

Main axis direction (Horizontal for Row, Vertical for Column)

§main_axis_arrangement: LinearArrangement

Arrangement along the main axis

§cross_axis_alignment: CrossAxisAlignment

Alignment along the cross axis (used as default for children without explicit alignment)

Implementations§

Source§

impl FlexMeasurePolicy

Source

pub fn new( axis: Axis, main_axis_arrangement: LinearArrangement, cross_axis_alignment: CrossAxisAlignment, ) -> Self

Source

pub fn row( horizontal_arrangement: LinearArrangement, vertical_alignment: VerticalAlignment, ) -> Self

Creates a FlexMeasurePolicy for Row (horizontal main axis).

Source

pub fn column( vertical_arrangement: LinearArrangement, horizontal_alignment: HorizontalAlignment, ) -> Self

Creates a FlexMeasurePolicy for Column (vertical main axis).

Trait Implementations§

Source§

impl Clone for FlexMeasurePolicy

Source§

fn clone(&self) -> FlexMeasurePolicy

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 Debug for FlexMeasurePolicy

Source§

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

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

impl MeasurePolicy for FlexMeasurePolicy

Source§

fn measure( &self, measurables: &[Box<dyn Measurable>], constraints: Constraints, ) -> MeasureResult

Runs the measurement pass with the provided children and constraints.
Source§

fn measure_into( &self, measurables: &[Box<dyn Measurable>], constraints: Constraints, placements: &mut Vec<Placement>, ) -> Size

Runs measurement into caller-owned placement storage. Read more
Source§

fn min_intrinsic_width( &self, measurables: &[Box<dyn Measurable>], height: f32, ) -> f32

Computes the minimum intrinsic width of this policy.
Source§

fn max_intrinsic_width( &self, measurables: &[Box<dyn Measurable>], height: f32, ) -> f32

Computes the maximum intrinsic width of this policy.
Source§

fn min_intrinsic_height( &self, measurables: &[Box<dyn Measurable>], width: f32, ) -> f32

Computes the minimum intrinsic height of this policy.
Source§

fn max_intrinsic_height( &self, measurables: &[Box<dyn Measurable>], width: f32, ) -> f32

Computes the maximum intrinsic height of this policy.
Source§

impl PartialEq for FlexMeasurePolicy

Source§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · 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 StructuralPartialEq for FlexMeasurePolicy

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