Skip to main content

SizeConstraints

Struct SizeConstraints 

Source
pub struct SizeConstraints {
    pub min: Size,
    pub preferred: Size,
    pub max: Option<Size>,
}
Expand description

Size constraints returned by measure operations.

Captures the full sizing semantics for a widget:

  • min: Minimum usable size (content clips below this)
  • preferred: Ideal size for content display
  • max: Maximum useful size (no benefit beyond this)

§Invariants

The following must hold:

  • min.width <= preferred.width <= max.map_or(u16::MAX, |m| m.width)
  • min.height <= preferred.height <= max.map_or(u16::MAX, |m| m.height)

§Example

use ftui_core::geometry::Size;
use ftui_widgets::SizeConstraints;

// A 10x3 text block with some flexibility
let constraints = SizeConstraints {
    min: Size::new(5, 1),       // Can shrink to 5 chars, 1 line
    preferred: Size::new(10, 3), // Ideal display
    max: Some(Size::new(20, 5)), // No benefit beyond this
};

// Clamp an allocation to these constraints
let allocated = Size::new(8, 2);
let clamped = constraints.clamp(allocated);
assert_eq!(clamped, Size::new(8, 2)); // Within range, unchanged

Fields§

§min: Size

Minimum size below which the widget is unusable or clips content.

§preferred: Size

Preferred size that best displays content.

§max: Option<Size>

Maximum useful size. None means unbounded (widget can use all available space).

Implementations§

Source§

impl SizeConstraints

Source

pub const ZERO: Self

Zero constraints (no minimum, no preferred, unbounded maximum).

This is the default for widgets that fill available space.

Source

pub const fn exact(size: Size) -> Self

Create constraints with exact sizing (min = preferred = max).

Use this for widgets with a fixed, known size.

Source

pub const fn at_least(min: Size, preferred: Size) -> Self

Create constraints with a minimum and preferred size, unbounded maximum.

Source

pub fn clamp(&self, size: Size) -> Size

Clamp a given size to these constraints.

The result will be:

  • At least min.width x min.height
  • At most max.width x max.height (if max is set)
§Example
use ftui_core::geometry::Size;
use ftui_widgets::SizeConstraints;

let c = SizeConstraints {
    min: Size::new(5, 2),
    preferred: Size::new(10, 5),
    max: Some(Size::new(20, 10)),
};

// Below minimum
assert_eq!(c.clamp(Size::new(3, 1)), Size::new(5, 2));

// Within range
assert_eq!(c.clamp(Size::new(15, 7)), Size::new(15, 7));

// Above maximum
assert_eq!(c.clamp(Size::new(30, 20)), Size::new(20, 10));
Source

pub fn is_satisfied_by(&self, size: Size) -> bool

Check if these constraints are satisfied by the given size.

Returns true if size is within the min/max bounds.

Source

pub fn intersect(&self, other: &SizeConstraints) -> SizeConstraints

Combine two constraints by taking the maximum minimums and minimum maximums.

Useful when a widget has multiple children and needs to satisfy all constraints.

Trait Implementations§

Source§

impl Clone for SizeConstraints

Source§

fn clone(&self) -> SizeConstraints

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 SizeConstraints

Source§

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

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

impl Default for SizeConstraints

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Hash for SizeConstraints

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for SizeConstraints

Source§

fn eq(&self, other: &SizeConstraints) -> 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 SizeConstraints

Source§

impl Eq for SizeConstraints

Source§

impl StructuralPartialEq for SizeConstraints

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<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more