Edges

Struct Edges 

Source
#[repr(C)]
pub struct Edges<T: Clone + Debug + Default + PartialEq> { pub top: T, pub right: T, pub bottom: T, pub left: T, }
Expand description

Represents the edges of a box in a 2D space, such as padding or margin.

Each field represents the size of the edge on one side of the box: top, right, bottom, and left.

§Examples

let edges = Edges {
    top: 10.0,
    right: 20.0,
    bottom: 30.0,
    left: 40.0,
};

assert_eq!(edges.top, 10.0);
assert_eq!(edges.right, 20.0);
assert_eq!(edges.bottom, 30.0);
assert_eq!(edges.left, 40.0);

Fields§

§top: T

The size of the top edge.

§right: T

The size of the right edge.

§bottom: T

The size of the bottom edge.

§left: T

The size of the left edge.

Implementations§

Source§

impl<T: Clone + Debug + Default + PartialEq> Edges<T>

Source

pub fn all(value: T) -> Self

Constructs Edges where all sides are set to the same specified value.

This function creates an Edges instance with the top, right, bottom, and left fields all initialized to the same value provided as an argument. This is useful when you want to have uniform edges around a box, such as padding or margin with the same size on all sides.

§Arguments
  • value - The value to set for all four sides of the edges.
§Returns

An Edges instance with all sides set to the given value.

§Examples
let uniform_edges = Edges::all(10.0);
assert_eq!(uniform_edges.top, 10.0);
assert_eq!(uniform_edges.right, 10.0);
assert_eq!(uniform_edges.bottom, 10.0);
assert_eq!(uniform_edges.left, 10.0);
Source

pub fn map<U>(&self, f: impl Fn(&T) -> U) -> Edges<U>
where U: Clone + Debug + Default + PartialEq,

Applies a function to each field of the Edges, producing a new Edges<U>.

This method allows for converting an Edges<T> to an Edges<U> by specifying a closure that defines how to convert between the two types. The closure is applied to each field (top, right, bottom, left), resulting in new edges of the desired type.

§Arguments
  • f - A closure that takes a reference to a value of type T and returns a value of type U.
§Returns

Returns a new Edges<U> with each field mapped by the provided function.

§Examples
let edges = Edges { top: 10, right: 20, bottom: 30, left: 40 };
let edges_float = edges.map(|&value| value as f32 * 1.1);
assert_eq!(edges_float, Edges { top: 11.0, right: 22.0, bottom: 33.0, left: 44.0 });
Source

pub fn any<F: Fn(&T) -> bool>(&self, predicate: F) -> bool

Checks if any of the edges satisfy a given predicate.

This method applies a predicate function to each field of the Edges and returns true if any field satisfies the predicate.

§Arguments
  • predicate - A closure that takes a reference to a value of type T and returns a bool.
§Returns

Returns true if the predicate returns true for any of the edge values, false otherwise.

§Examples
let edges = Edges {
    top: 10,
    right: 0,
    bottom: 5,
    left: 0,
};

assert!(edges.any(|value| *value == 0));
assert!(edges.any(|value| *value > 0));
assert!(!edges.any(|value| *value > 10));
Source§

impl Edges<Length>

Source

pub fn auto() -> Self

Sets the edges of the Edges struct to auto, which is a special value that allows the layout engine to automatically determine the size of the edges.

This is typically used in layout contexts where the exact size of the edges is not important, or when the size should be calculated based on the content or container.

§Returns

Returns an Edges<Length> with all edges set to Length::Auto.

§Examples
let auto_edges = Edges::auto();
assert_eq!(auto_edges.top, Length::Auto);
assert_eq!(auto_edges.right, Length::Auto);
assert_eq!(auto_edges.bottom, Length::Auto);
assert_eq!(auto_edges.left, Length::Auto);
Source

pub fn zero() -> Self

Sets the edges of the Edges struct to zero, which means no size or thickness.

This is typically used when you want to specify that a box (like a padding or margin area) should have no edges, effectively making it non-existent or invisible in layout calculations.

§Returns

Returns an Edges<Length> with all edges set to zero length.

§Examples
let no_edges = Edges::<Length>::zero();
assert_eq!(no_edges.top, Length::Definite(DefiniteLength::from(Pixels::ZERO)));
assert_eq!(no_edges.right, Length::Definite(DefiniteLength::from(Pixels::ZERO)));
assert_eq!(no_edges.bottom, Length::Definite(DefiniteLength::from(Pixels::ZERO)));
assert_eq!(no_edges.left, Length::Definite(DefiniteLength::from(Pixels::ZERO)));
Source§

impl Edges<DefiniteLength>

Source

pub fn zero() -> Self

Sets the edges of the Edges struct to zero, which means no size or thickness.

This is typically used when you want to specify that a box (like a padding or margin area) should have no edges, effectively making it non-existent or invisible in layout calculations.

§Returns

Returns an Edges<DefiniteLength> with all edges set to zero length.

§Examples
let no_edges = Edges::<DefiniteLength>::zero();
assert_eq!(no_edges.top, DefiniteLength::from(px(0.)));
assert_eq!(no_edges.right, DefiniteLength::from(px(0.)));
assert_eq!(no_edges.bottom, DefiniteLength::from(px(0.)));
assert_eq!(no_edges.left, DefiniteLength::from(px(0.)));
Source

pub fn to_pixels( self, parent_size: Size<AbsoluteLength>, rem_size: Pixels, ) -> Edges<Pixels>

Converts the DefiniteLength to Pixels based on the parent size and the REM size.

This method allows for a DefiniteLength value to be converted into pixels, taking into account the size of the parent element (for percentage-based lengths) and the size of a rem unit (for rem-based lengths).

§Arguments
  • parent_size - Size<AbsoluteLength> representing the size of the parent element.
  • rem_size - Pixels representing the size of one REM unit.
§Returns

Returns an Edges<Pixels> representing the edges with lengths converted to pixels.

§Examples
let edges = Edges {
    top: DefiniteLength::Absolute(AbsoluteLength::Pixels(px(10.0))),
    right: DefiniteLength::Fraction(0.5),
    bottom: DefiniteLength::Absolute(AbsoluteLength::Rems(rems(2.0))),
    left: DefiniteLength::Fraction(0.25),
};
let parent_size = Size {
    width: AbsoluteLength::Pixels(px(200.0)),
    height: AbsoluteLength::Pixels(px(100.0)),
};
let rem_size = px(16.0);
let edges_in_pixels = edges.to_pixels(parent_size, rem_size);

assert_eq!(edges_in_pixels.top, px(10.0)); // Absolute length in pixels
assert_eq!(edges_in_pixels.right, px(100.0)); // 50% of parent width
assert_eq!(edges_in_pixels.bottom, px(32.0)); // 2 rems
assert_eq!(edges_in_pixels.left, px(50.0)); // 25% of parent width
Source§

impl Edges<AbsoluteLength>

Source

pub fn zero() -> Self

Sets the edges of the Edges struct to zero, which means no size or thickness.

This is typically used when you want to specify that a box (like a padding or margin area) should have no edges, effectively making it non-existent or invisible in layout calculations.

§Returns

Returns an Edges<AbsoluteLength> with all edges set to zero length.

§Examples
let no_edges = Edges::<AbsoluteLength>::zero();
assert_eq!(no_edges.top, AbsoluteLength::Pixels(Pixels::ZERO));
assert_eq!(no_edges.right, AbsoluteLength::Pixels(Pixels::ZERO));
assert_eq!(no_edges.bottom, AbsoluteLength::Pixels(Pixels::ZERO));
assert_eq!(no_edges.left, AbsoluteLength::Pixels(Pixels::ZERO));
Source

pub fn to_pixels(self, rem_size: Pixels) -> Edges<Pixels>

Converts the AbsoluteLength to Pixels based on the rem_size.

If the AbsoluteLength is already in pixels, it simply returns the corresponding Pixels value. If the AbsoluteLength is in rems, it multiplies the number of rems by the rem_size to convert it to pixels.

§Arguments
  • rem_size - The size of one rem unit in pixels.
§Returns

Returns an Edges<Pixels> representing the edges with lengths converted to pixels.

§Examples
let edges = Edges {
    top: AbsoluteLength::Pixels(px(10.0)),
    right: AbsoluteLength::Rems(rems(1.0)),
    bottom: AbsoluteLength::Pixels(px(20.0)),
    left: AbsoluteLength::Rems(rems(2.0)),
};
let rem_size = px(16.0);
let edges_in_pixels = edges.to_pixels(rem_size);

assert_eq!(edges_in_pixels.top, px(10.0)); // Already in pixels
assert_eq!(edges_in_pixels.right, px(16.0)); // 1 rem converted to pixels
assert_eq!(edges_in_pixels.bottom, px(20.0)); // Already in pixels
assert_eq!(edges_in_pixels.left, px(32.0)); // 2 rems converted to pixels
Source§

impl Edges<Pixels>

Source

pub fn scale(&self, factor: f32) -> Edges<ScaledPixels>

Scales the Edges<Pixels> by a given factor, returning Edges<ScaledPixels>.

This method is typically used for adjusting the edge sizes for different display densities or scaling factors.

§Arguments
  • factor - The scaling factor to apply to each edge.
§Returns

Returns a new Edges<ScaledPixels> where each edge is the result of scaling the original edge by the given factor.

§Examples
let edges = Edges {
    top: Pixels::from(10.0),
    right: Pixels::from(20.0),
    bottom: Pixels::from(30.0),
    left: Pixels::from(40.0),
};
let scaled_edges = edges.scale(2.0);
assert_eq!(scaled_edges.top, ScaledPixels::from(20.0));
assert_eq!(scaled_edges.right, ScaledPixels::from(40.0));
assert_eq!(scaled_edges.bottom, ScaledPixels::from(60.0));
assert_eq!(scaled_edges.left, ScaledPixels::from(80.0));
Source

pub fn max(&self) -> Pixels

Returns the maximum value of any edge.

§Returns

The maximum Pixels value among all four edges.

Trait Implementations§

Source§

impl<T: Clone + Clone + Debug + Default + PartialEq> Clone for Edges<T>

Source§

fn clone(&self) -> Edges<T>

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<T: Debug + Clone + Debug + Default + PartialEq> Debug for Edges<T>

Source§

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

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

impl<T: Default + Clone + Debug + Default + PartialEq> Default for Edges<T>

Source§

fn default() -> Edges<T>

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

impl<T: Clone + Debug + Default + PartialEq> From<EdgesRefinement<T>> for Edges<T>
where Option<T>: Clone,

Source§

fn from(value: EdgesRefinement<T>) -> Self

Converts to this type from the input type.
Source§

impl From<Pixels> for Edges<Pixels>

Source§

fn from(val: Pixels) -> Self

Converts to this type from the input type.
Source§

impl From<f32> for Edges<Pixels>

Source§

fn from(val: f32) -> Self

Converts to this type from the input type.
Source§

impl<T> Mul for Edges<T>
where T: Mul<Output = T> + Clone + Debug + Default + PartialEq,

Source§

type Output = Edges<T>

The resulting type after applying the * operator.
Source§

fn mul(self, rhs: Self) -> Self::Output

Performs the * operation. Read more
Source§

impl<T, S> MulAssign<S> for Edges<T>
where T: Mul<S, Output = T> + Clone + Debug + Default + PartialEq, S: Clone,

Source§

fn mul_assign(&mut self, rhs: S)

Performs the *= operation. Read more
Source§

impl<T: PartialEq + Clone + Debug + Default + PartialEq> PartialEq for Edges<T>

Source§

fn eq(&self, other: &Edges<T>) -> 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<T: Clone + Debug + Default + PartialEq> Refineable for Edges<T>
where Option<T>: Clone,

Source§

type Refinement = EdgesRefinement<T>

Source§

fn refine(&mut self, refinement: &Self::Refinement)

Applies the given refinement to this instance, modifying it in place. Read more
Source§

fn refined(self, refinement: Self::Refinement) -> Self

Returns a new instance with the refinement applied, equivalent to cloning self and calling refine on it.
Source§

fn is_superset_of(&self, refinement: &Self::Refinement) -> bool

Returns true if this instance would contain all values from the refinement. Read more
Source§

fn subtract(&self, refinement: &Self::Refinement) -> Self::Refinement

Returns a refinement that represents the difference between this instance and the given refinement. Read more
Source§

fn from_cascade(cascade: &Cascade<Self>) -> Self
where Self: Sized + Default,

Creates an instance from a cascade by merging all refinements atop the default value.
Source§

impl<T: Clone + Debug + Default + PartialEq + Copy> Copy for Edges<T>

Source§

impl<T: Eq + Clone + Debug + Default + PartialEq> Eq for Edges<T>

Source§

impl<T: Clone + Debug + Default + PartialEq> StructuralPartialEq for Edges<T>

Auto Trait Implementations§

§

impl<T> Freeze for Edges<T>
where T: Freeze,

§

impl<T> RefUnwindSafe for Edges<T>
where T: RefUnwindSafe,

§

impl<T> Send for Edges<T>
where T: Send,

§

impl<T> Sync for Edges<T>
where T: Sync,

§

impl<T> Unpin for Edges<T>
where T: Unpin,

§

impl<T> UnwindSafe for Edges<T>
where T: UnwindSafe,

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 + Sync + Send>

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> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

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

Checks if this value is equivalent to the given key. 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<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

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

Checks if this value is equivalent to the given key. 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

Checks if this value is equivalent to the given key. Read more
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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> NoneValue for T
where T: Default,

Source§

type NoneType = T

Source§

fn null_value() -> T

The none-equivalent value.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<R, P> ReadPrimitive<R> for P
where R: Read + ReadEndian<P>, P: Default,

Source§

fn read_from_little_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_little_endian().
Source§

fn read_from_big_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_big_endian().
Source§

fn read_from_native_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_native_endian().
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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