pub struct ScrollArea {
    has_bar: [bool; 2],
    auto_shrink: [bool; 2],
    max_size: Vec2,
    min_scrolled_size: Vec2,
    scroll_bar_visibility: ScrollBarVisibility,
    id_source: Option<Id>,
    offset_x: Option<f32>,
    offset_y: Option<f32>,
    scrolling_enabled: bool,
    drag_to_scroll: bool,
    stick_to_end: [bool; 2],
}
Expand description

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

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

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

Fields§

§has_bar: [bool; 2]

Do we have horizontal/vertical scrolling?

§auto_shrink: [bool; 2]§max_size: Vec2§min_scrolled_size: Vec2§scroll_bar_visibility: ScrollBarVisibility§id_source: Option<Id>§offset_x: Option<f32>§offset_y: Option<f32>§scrolling_enabled: bool

If false, we ignore scroll events.

§drag_to_scroll: bool§stick_to_end: [bool; 2]

If true for vertical or horizontal the scroll wheel will stick to the end position until user manually changes position. It will become true again once scroll handle makes contact with end.

Implementations§

source§

impl ScrollArea

source

pub fn horizontal() -> Self

Create a horizontal scroll area.

source

pub fn vertical() -> Self

Create a vertical scroll area.

source

pub fn both() -> Self

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

source

pub fn neither() -> Self

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

source

pub fn new(has_bar: [bool; 2]) -> Self

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

source

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

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.

source

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

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.

source

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

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.

source

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

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.

source

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

Set the visibility of both horizontal and vertical scroll bars.

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

source

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

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

source

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

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

source

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

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

source

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

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

source

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

Turn on/off scrolling on the horizontal axis.

source

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

Turn on/off scrolling on the vertical axis.

source

pub fn scroll2(self, has_bar: [bool; 2]) -> Self

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

source

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

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 TextEdit widget contained within the scroll area.

This controls both scrolling directions.

source

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

Can the user drag the scroll area to scroll?

This is useful for touch screens.

If true, the ScrollArea will sense drags.

Default: true.

source

pub fn auto_shrink(self, auto_shrink: [bool; 2]) -> Self

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; 2].

source

pub(crate) fn has_any_bar(&self) -> bool

source

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

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.

source

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

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.

source§

impl ScrollArea

source

fn begin(self, ui: &mut Ui) -> Prepared

source

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.

source

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);
    }
});
source

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

source

fn show_viewport_dyn<'c, R>( self, ui: &mut Ui, add_contents: Box<dyn FnOnce(&mut Ui, Rect) -> R + 'c> ) -> ScrollAreaOutput<R>

Trait Implementations§

source§

impl Clone for ScrollArea

source§

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

impl Debug for ScrollArea

source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. 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 Twhere 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 Twhere 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 Twhere 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 Twhere 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> SerializableAny for Twhere T: 'static + Any + Clone + Send + Sync,