Struct rerun::external::eframe::egui::ScrollArea

pub struct ScrollArea {
Show 13 fields scroll_enabled: Vec2b, auto_shrink: Vec2b, max_size: Vec2, min_scrolled_size: Vec2, scroll_bar_visibility: ScrollBarVisibility, scroll_bar_rect: Option<Rect>, id_salt: Option<Id>, offset_x: Option<f32>, offset_y: Option<f32>, scrolling_enabled: bool, drag_to_scroll: bool, stick_to_end: Vec2b, animated: bool,
}
Expand description

Add vertical and/or horizontal scrolling to a contained Ui.

By default, scroll bars only show up when needed, i.e. when the contents is larger than the container. This is controlled by Self::scroll_bar_visibility.

There are two flavors of scroll areas: solid and floating. Solid scroll bars use up space, reducing the amount of space available to the contents. Floating scroll bars float on top of the contents, covering it. You can change the scroll style by changing the crate::style::Spacing::scroll.

§Coordinate system

  • content: size of contents (generally large; that’s why we want scroll bars)
  • outer: size of scroll area including scroll bar(s)
  • inner: excluding scroll bar(s). The area we clip the contents to.

If the floating scroll bars settings is turned on then inner == outer.

§Example

egui::ScrollArea::vertical().show(ui, |ui| {
    // Add a lot of widgets here.
});

You can scroll to an element using crate::Response::scroll_to_me, Ui::scroll_to_cursor and Ui::scroll_to_rect.

Fields§

§scroll_enabled: Vec2b§auto_shrink: Vec2b§max_size: Vec2§min_scrolled_size: Vec2§scroll_bar_visibility: ScrollBarVisibility§scroll_bar_rect: Option<Rect>§id_salt: Option<Id>§offset_x: Option<f32>§offset_y: Option<f32>§scrolling_enabled: bool§drag_to_scroll: bool§stick_to_end: Vec2b§animated: bool

Implementations§

§

impl ScrollArea

pub fn horizontal() -> ScrollArea

Create a horizontal scroll area.

pub fn vertical() -> ScrollArea

Create a vertical scroll area.

pub fn both() -> ScrollArea

Create a bi-directional (horizontal and vertical) scroll area.

pub fn neither() -> ScrollArea

Create a scroll area where both direction of scrolling is disabled. It’s unclear why you would want to do this.

pub fn new(scroll_enabled: impl Into<Vec2b>) -> ScrollArea

Create a scroll area where you decide which axis has scrolling enabled. For instance, ScrollArea::new([true, false]) enables horizontal scrolling.

pub fn max_width(self, max_width: f32) -> ScrollArea

The maximum width of the outer frame of the scroll area.

Use f32::INFINITY if you want the scroll area to expand to fit the surrounding Ui (default).

See also Self::auto_shrink.

pub fn max_height(self, max_height: f32) -> ScrollArea

The maximum height of the outer frame of the scroll area.

Use f32::INFINITY if you want the scroll area to expand to fit the surrounding Ui (default).

See also Self::auto_shrink.

pub fn min_scrolled_width(self, min_scrolled_width: f32) -> ScrollArea

The minimum width of a horizontal scroll area which requires scroll bars.

The ScrollArea will only become smaller than this if the content is smaller than this (and so we don’t require scroll bars).

Default: 64.0.

pub fn min_scrolled_height(self, min_scrolled_height: f32) -> ScrollArea

The minimum height of a vertical scroll area which requires scroll bars.

The ScrollArea will only become smaller than this if the content is smaller than this (and so we don’t require scroll bars).

Default: 64.0.

pub fn scroll_bar_visibility( self, scroll_bar_visibility: ScrollBarVisibility ) -> ScrollArea

Set the visibility of both horizontal and vertical scroll bars.

With ScrollBarVisibility::VisibleWhenNeeded (default), the scroll bar will be visible only when needed.

pub fn scroll_bar_rect(self, scroll_bar_rect: Rect) -> ScrollArea

Specify within which screen-space rectangle to show the scroll bars.

This can be used to move the scroll bars to a smaller region of the ScrollArea, for instance if you are painting a sticky header on top of it.

pub fn id_source(self, id_salt: impl Hash) -> ScrollArea

👎Deprecated: Renamed id_salt

A source for the unique Id, e.g. .id_source("second_scroll_area") or .id_source(loop_index).

pub fn id_salt(self, id_salt: impl Hash) -> ScrollArea

A source for the unique Id, e.g. .id_salt("second_scroll_area") or .id_salt(loop_index).

pub fn scroll_offset(self, offset: Vec2) -> ScrollArea

Set the horizontal and vertical scroll offset position.

Positive offset means scrolling down/right.

See also: Self::vertical_scroll_offset, Self::horizontal_scroll_offset, Ui::scroll_to_cursor and Response::scroll_to_me

pub fn vertical_scroll_offset(self, offset: f32) -> ScrollArea

Set the vertical scroll offset position.

Positive offset means scrolling down.

See also: Self::scroll_offset, Ui::scroll_to_cursor and Response::scroll_to_me

pub fn horizontal_scroll_offset(self, offset: f32) -> ScrollArea

Set the horizontal scroll offset position.

Positive offset means scrolling right.

See also: Self::scroll_offset, Ui::scroll_to_cursor and Response::scroll_to_me

pub fn hscroll(self, hscroll: bool) -> ScrollArea

Turn on/off scrolling on the horizontal axis.

pub fn vscroll(self, vscroll: bool) -> ScrollArea

Turn on/off scrolling on the vertical axis.

pub fn scroll(self, scroll_enabled: impl Into<Vec2b>) -> ScrollArea

Turn on/off scrolling on the horizontal/vertical axes.

You can pass in false, true, [false, true] etc.

pub fn scroll2(self, scroll_enabled: impl Into<Vec2b>) -> ScrollArea

👎Deprecated: Renamed to scroll

Turn on/off scrolling on the horizontal/vertical axes.

pub fn enable_scrolling(self, enable: bool) -> ScrollArea

Control the scrolling behavior.

  • If true (default), the scroll area will respond to user scrolling.
  • If false, the scroll area will not respond to user scrolling.

This can be used, for example, to optionally freeze scrolling while the user is typing text in a crate::TextEdit widget contained within the scroll area.

This controls both scrolling directions.

pub fn drag_to_scroll(self, drag_to_scroll: bool) -> ScrollArea

Can the user drag the scroll area to scroll?

This is useful for touch screens.

If true, the ScrollArea will sense drags.

Default: true.

pub fn auto_shrink(self, auto_shrink: impl Into<Vec2b>) -> ScrollArea

For each axis, should the containing area shrink if the content is small?

  • If true, egui will add blank space outside the scroll area.
  • If false, egui will add blank space inside the scroll area.

Default: true.

pub fn animated(self, animated: bool) -> ScrollArea

Should the scroll area animate scroll_to_* functions?

Default: true.

pub fn stick_to_right(self, stick: bool) -> ScrollArea

The scroll handle will stick to the rightmost position even while the content size changes dynamically. This can be useful to simulate text scrollers coming in from right hand side. The scroll handle remains stuck until user manually changes position. Once “unstuck” it will remain focused on whatever content viewport the user left it on. If the scroll handle is dragged all the way to the right it will again become stuck and remain there until manually pulled from the end position.

pub fn stick_to_bottom(self, stick: bool) -> ScrollArea

The scroll handle will stick to the bottom position even while the content size changes dynamically. This can be useful to simulate terminal UIs or log/info scrollers. The scroll handle remains stuck until user manually changes position. Once “unstuck” it will remain focused on whatever content viewport the user left it on. If the scroll handle is dragged to the bottom it will again become stuck and remain there until manually pulled from the end position.

§

impl ScrollArea

pub fn show<R>( self, ui: &mut Ui, add_contents: impl FnOnce(&mut Ui) -> R ) -> ScrollAreaOutput<R>

Show the ScrollArea, and add the contents to the viewport.

If the inner area can be very long, consider using Self::show_rows instead.

pub fn show_rows<R>( self, ui: &mut Ui, row_height_sans_spacing: f32, total_rows: usize, add_contents: impl FnOnce(&mut Ui, Range<usize>) -> R ) -> ScrollAreaOutput<R>

Efficiently show only the visible part of a large number of rows.

let text_style = egui::TextStyle::Body;
let row_height = ui.text_style_height(&text_style);
// let row_height = ui.spacing().interact_size.y; // if you are adding buttons instead of labels.
let total_rows = 10_000;
egui::ScrollArea::vertical().show_rows(ui, row_height, total_rows, |ui, row_range| {
    for row in row_range {
        let text = format!("Row {}/{}", row + 1, total_rows);
        ui.label(text);
    }
});

pub fn show_viewport<R>( self, ui: &mut Ui, add_contents: impl FnOnce(&mut Ui, Rect) -> R ) -> ScrollAreaOutput<R>

This can be used to only paint the visible part of the contents.

add_contents is given the viewport rectangle, which is the relative view of the content. So if the passed rect has min = zero, then show the top left content (the user has not scrolled).

Trait Implementations§

§

impl Clone for ScrollArea

§

fn clone(&self) -> ScrollArea

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
§

impl Debug for ScrollArea

§

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

Formats the value using the given formatter. Read more

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> Az for T

source§

fn az<Dst>(self) -> Dst
where T: Cast<Dst>,

Casts the value.
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<Src, Dst> CastFrom<Src> for Dst
where Src: Cast<Dst>,

source§

fn cast_from(src: Src) -> Dst

Casts the value.
source§

impl<T> CheckedAs for T

source§

fn checked_as<Dst>(self) -> Option<Dst>
where T: CheckedCast<Dst>,

Casts the value.
source§

impl<Src, Dst> CheckedCastFrom<Src> for Dst
where Src: CheckedCast<Dst>,

source§

fn checked_cast_from(src: Src) -> Option<Dst>

Casts the value.
§

impl<T> Downcast<T> for T

§

fn downcast(&self) -> &T

§

impl<T> Downcast for T
where T: Any,

§

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

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

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

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

impl<T> DowncastSync for T
where T: Any + Send + Sync,

§

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§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> FromRef<T> for T
where T: Clone,

§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
§

impl<T> Instrument for T

§

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

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

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> IntoRequest<T> for T

source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
source§

impl<Src, Dst> LosslessTryInto<Dst> for Src
where Dst: LosslessTryFrom<Src>,

source§

fn lossless_try_into(self) -> Option<Dst>

Performs the conversion.
source§

impl<Src, Dst> LossyInto<Dst> for Src
where Dst: LossyFrom<Src>,

source§

fn lossy_into(self) -> Dst

Performs the conversion.
source§

impl<T> OverflowingAs for T

source§

fn overflowing_as<Dst>(self) -> (Dst, bool)
where T: OverflowingCast<Dst>,

Casts the value.
source§

impl<Src, Dst> OverflowingCastFrom<Src> for Dst
where Src: OverflowingCast<Dst>,

source§

fn overflowing_cast_from(src: Src) -> (Dst, bool)

Casts the value.
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

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

Initializes a with the given initializer. Read more
§

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

Dereferences the given pointer. Read more
§

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

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

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

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T> SaturatingAs for T

source§

fn saturating_as<Dst>(self) -> Dst
where T: SaturatingCast<Dst>,

Casts the value.
source§

impl<Src, Dst> SaturatingCastFrom<Src> for Dst
where Src: SaturatingCast<Dst>,

source§

fn saturating_cast_from(src: Src) -> Dst

Casts the value.
§

impl<T> To for T
where T: ?Sized,

§

fn to<T>(self) -> T
where Self: Into<T>,

Converts to T by calling Into<T>::into.
§

fn try_to<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Tries to convert to T by calling TryInto<T>::try_into.
source§

impl<T> ToOwned for T
where T: Clone,

§

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

§

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

§

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> UnwrappedAs for T

source§

fn unwrapped_as<Dst>(self) -> Dst
where T: UnwrappedCast<Dst>,

Casts the value.
source§

impl<Src, Dst> UnwrappedCastFrom<Src> for Dst
where Src: UnwrappedCast<Dst>,

source§

fn unwrapped_cast_from(src: Src) -> Dst

Casts the value.
§

impl<T> Upcast<T> for T

§

fn upcast(&self) -> Option<&T>

§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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

impl<T> WrappingAs for T

source§

fn wrapping_as<Dst>(self) -> Dst
where T: WrappingCast<Dst>,

Casts the value.
source§

impl<Src, Dst> WrappingCastFrom<Src> for Dst
where Src: WrappingCast<Dst>,

source§

fn wrapping_cast_from(src: Src) -> Dst

Casts the value.
§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,

§

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

§

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

§

impl<T> WasmNotSendSync for T

§

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