Style

Struct Style 

Source
pub struct Style {
Show 38 fields pub display: Display, pub visibility: Visibility, pub overflow: Point<Overflow>, pub scrollbar_width: AbsoluteLength, pub allow_concurrent_scroll: bool, pub restrict_scroll_to_axis: bool, pub position: Position, pub inset: Edges<Length>, pub size: Size<Length>, pub min_size: Size<Length>, pub max_size: Size<Length>, pub aspect_ratio: Option<f32>, pub margin: Edges<Length>, pub padding: Edges<DefiniteLength>, pub border_widths: Edges<AbsoluteLength>, pub align_items: Option<AlignItems>, pub align_self: Option<AlignSelf>, pub align_content: Option<AlignContent>, pub justify_content: Option<JustifyContent>, pub gap: Size<DefiniteLength>, pub flex_direction: FlexDirection, pub flex_wrap: FlexWrap, pub flex_basis: Length, pub flex_grow: f32, pub flex_shrink: f32, pub background: Option<Fill>, pub border_color: Option<Hsla>, pub border_style: BorderStyle, pub corner_radii: Corners<AbsoluteLength>, pub box_shadow: Vec<BoxShadow>, pub text: TextStyleRefinement, pub mouse_cursor: Option<CursorStyle>, pub opacity: Option<f32>, pub grid_cols: Option<u16>, pub grid_rows: Option<u16>, pub grid_location: Option<GridLocation>, pub debug: bool, pub debug_below: bool,
}
Expand description

The CSS styling that can be applied to an element via the Styled trait

Fields§

§display: Display

What layout strategy should be used?

§visibility: Visibility

Should the element be painted on screen?

§overflow: Point<Overflow>

How children overflowing their container should affect layout

§scrollbar_width: AbsoluteLength

How much space (in points) should be reserved for the scrollbars of Overflow::Scroll and Overflow::Auto nodes.

§allow_concurrent_scroll: bool

Whether both x and y axis should be scrollable at the same time.

§restrict_scroll_to_axis: bool

Whether scrolling should be restricted to the axis indicated by the mouse wheel.

This means that:

  • The mouse wheel alone will only ever scroll the Y axis.
  • Holding Shift and using the mouse wheel will scroll the X axis.

§Motivation

On the web when scrolling with the mouse wheel, scrolling up and down will always scroll the Y axis, even when the mouse is over a horizontally-scrollable element.

The only way to scroll horizontally is to hold down Shift while scrolling, which then changes the scroll axis to the X axis.

Currently, GPUI operates differently from the web in that it will scroll an element in either the X or Y axis when scrolling with just the mouse wheel. This causes problems when scrolling in a vertical list that contains horizontally-scrollable elements, as when you get to the horizontally-scrollable elements the scroll will be hijacked.

Ideally we would match the web’s behavior and not have a need for this, but right now we’re adding this opt-in style property to limit the potential blast radius.

§position: Position

What should the position value of this struct use as a base offset?

§inset: Edges<Length>

How should the position of this element be tweaked relative to the layout defined?

§size: Size<Length>

Sets the initial size of the item

§min_size: Size<Length>

Controls the minimum size of the item

§max_size: Size<Length>

Controls the maximum size of the item

§aspect_ratio: Option<f32>

Sets the preferred aspect ratio for the item. The ratio is calculated as width divided by height.

§margin: Edges<Length>

How large should the margin be on each side?

§padding: Edges<DefiniteLength>

How large should the padding be on each side?

§border_widths: Edges<AbsoluteLength>

How large should the border be on each side?

§align_items: Option<AlignItems>

How this node’s children aligned in the cross/block axis?

§align_self: Option<AlignSelf>

How this node should be aligned in the cross/block axis. Falls back to the parents AlignItems if not set

§align_content: Option<AlignContent>

How should content contained within this item be aligned in the cross/block axis

§justify_content: Option<JustifyContent>

How should contained within this item be aligned in the main/inline axis

§gap: Size<DefiniteLength>

How large should the gaps between items in a flex container be?

§flex_direction: FlexDirection

Which direction does the main axis flow in?

§flex_wrap: FlexWrap

Should elements wrap, or stay in a single line?

§flex_basis: Length

Sets the initial main axis size of the item

§flex_grow: f32

The relative rate at which this item grows when it is expanding to fill space, 0.0 is the default value, and this value must be positive.

§flex_shrink: f32

The relative rate at which this item shrinks when it is contracting to fit into space, 1.0 is the default value, and this value must be positive.

§background: Option<Fill>

The fill color of this element

§border_color: Option<Hsla>

The border color of this element

§border_style: BorderStyle

The border style of this element

§corner_radii: Corners<AbsoluteLength>

The radius of the corners of this element

§box_shadow: Vec<BoxShadow>

Box shadow of the element

§text: TextStyleRefinement

The text style of this element

§mouse_cursor: Option<CursorStyle>

The mouse cursor style shown when the mouse pointer is over an element.

§opacity: Option<f32>

The opacity of this element

§grid_cols: Option<u16>

The grid columns of this element Equivalent to the Tailwind grid-cols-<number>

§grid_rows: Option<u16>

The row span of this element Equivalent to the Tailwind grid-rows-<number>

§grid_location: Option<GridLocation>

The grid location of this element

§debug: bool

Whether to draw a red debugging outline around this element

§debug_below: bool

Whether to draw a red debugging outline around this element and all of its conforming children

Implementations§

Source§

impl Style

Source

pub fn has_opaque_background(&self) -> bool

Returns true if the style is visible and the background is opaque.

Source

pub fn text_style(&self) -> Option<&TextStyleRefinement>

Get the text style in this element style.

Source

pub fn overflow_mask( &self, bounds: Bounds<Pixels>, rem_size: Pixels, ) -> Option<ContentMask<Pixels>>

Get the content mask for this element style, based on the given bounds. If the element does not hide its overflow, this will return None.

Source

pub fn paint( &self, bounds: Bounds<Pixels>, window: &mut Window, cx: &mut App, continuation: impl FnOnce(&mut Window, &mut App), )

Paints the background of an element styled with this style.

Trait Implementations§

Source§

impl Clone for Style

Source§

fn clone(&self) -> Style

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 Style

Source§

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

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

impl Default for Style

Source§

fn default() -> Self

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

impl From<StyleRefinement> for Style

Source§

fn from(value: StyleRefinement) -> Self

Converts to this type from the input type.
Source§

impl Refineable for Style

Source§

type Refinement = StyleRefinement

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.

Auto Trait Implementations§

§

impl Freeze for Style

§

impl RefUnwindSafe for Style

§

impl Send for Style

§

impl Sync for Style

§

impl Unpin for Style

§

impl UnwindSafe for Style

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