pub struct UniformListScrollHandle(pub Rc<RefCell<UniformListScrollState>>);Expand description
A handle that reads and sets the scroll position of a UniformList.
Store it on your view, and pass it to UniformList::track_scroll when you build the list
each frame. Clones share the same state.
Scroll requests (scroll_to_*) take effect during the next prepaint, not immediately. A
request does nothing until a list tracks the handle.
Tuple Fields§
§0: Rc<RefCell<UniformListScrollState>>Implementations§
Source§impl UniformListScrollHandle
impl UniformListScrollHandle
Sourcepub fn new() -> Self
pub fn new() -> Self
Creates a handle that isn’t attached to a list yet.
Pass it to UniformList::track_scroll when you build the list.
Sourcepub fn scroll_to_item(&self, ix: usize, strategy: ScrollStrategy)
pub fn scroll_to_item(&self, ix: usize, strategy: ScrollStrategy)
Scrolls the least amount that brings row ix fully into view, placed by strategy.
This is non-strict: a row that is already fully visible doesn’t move the list, so
ScrollStrategy::Top does nothing for a visible row. Use Self::scroll_to_item_strict
to place the row every time. The scroll takes effect on the next prepaint.
§Examples
struct Rows {
scroll: UniformListScrollHandle,
}
impl Render for Rows {
fn render(&mut self, _window: &mut Window, _cx: &mut Context<Self>) -> impl IntoElement {
div().h(px(320.)).child(
uniform_list("rows", 100, |range, _window, _cx| {
range
.map(|ix| div().id(ix).h(px(32.)).child(format!("Row {ix}")))
.collect::<Vec<_>>()
})
.track_scroll(&self.scroll)
.size_full(),
)
}
}
window.update(|rows, _, _| rows.scroll.scroll_to_item(3, ScrollStrategy::Top));
window.draw();
// Row 3 is already in the 320px viewport, so the list didn't move.
window.read(|rows, _| assert_eq!(rows.scroll.0.borrow().base_handle.offset().y, px(0.)));
window.update(|rows, _, _| rows.scroll.scroll_to_item_strict(3, ScrollStrategy::Top));
window.draw();
// The strict form puts row 3 at the top: 3 rows of 32px scrolled past.
window.read(|rows, _| assert_eq!(rows.scroll.0.borrow().base_handle.offset().y, px(-96.)));Sourcepub fn scroll_to_item_strict(&self, ix: usize, strategy: ScrollStrategy)
pub fn scroll_to_item_strict(&self, ix: usize, strategy: ScrollStrategy)
Places row ix where strategy says, even when the row is already visible.
Unlike Self::scroll_to_item, this forces the requested placement when the strategy
supports one. With ScrollStrategy::Nearest, a visible row still doesn’t move. Use it
when a row must land at a fixed position, such as the top after a keyboard jump. The scroll
takes effect on the next prepaint; see Self::scroll_to_item for an example.
Sourcepub fn scroll_to_item_with_offset(
&self,
ix: usize,
strategy: ScrollStrategy,
offset: usize,
)
pub fn scroll_to_item_with_offset( &self, ix: usize, strategy: ScrollStrategy, offset: usize, )
Scrolls like Self::scroll_to_item, and keeps offset rows clear at the top of the viewport.
offset shrinks the viewport by that many rows from the top, and strategy places the
row in what remains:
ScrollStrategy::Topputs the row just below the cleared rows.ScrollStrategy::Centercenters the row in the rows below the cleared rows.ScrollStrategy::Bottomplaces the row at the bottom of the viewport.offsetaffects only whether the row counts as already visible, not where it lands.
This is non-strict, so a row that is visible below the cleared rows doesn’t move the list.
Sourcepub fn scroll_to_item_strict_with_offset(
&self,
ix: usize,
strategy: ScrollStrategy,
offset: usize,
)
pub fn scroll_to_item_strict_with_offset( &self, ix: usize, strategy: ScrollStrategy, offset: usize, )
Places row ix like Self::scroll_to_item_with_offset, even when the row is already visible.
The offset rules are the same as for Self::scroll_to_item_with_offset.
Sourcepub fn y_flipped(&self) -> bool
pub fn y_flipped(&self) -> bool
Returns whether item 0 is at the bottom of the list, as set by UniformList::y_flipped
on the last frame.
Sourcepub fn logical_scroll_top_index(&self) -> usize
pub fn logical_scroll_top_index(&self) -> usize
Returns the index of the first visible row.
If a scroll request is pending, this returns the row that request targets instead, so the value is right after a request and one frame later. It is zero before the first prepaint.
Only available with the test-support feature, or in GPUI’s own tests.
Sourcepub fn is_scrollable(&self) -> bool
pub fn is_scrollable(&self) -> bool
Returns whether the rows are taller than the viewport, as of the last prepaint.
Returns false before the first prepaint.
Sourcepub fn is_scrolled_to_end(&self) -> Option<bool>
pub fn is_scrolled_to_end(&self) -> Option<bool>
Returns whether the list shows its last row, or None if the list isn’t scrollable.
None is also returned before the first prepaint.
Sourcepub fn scroll_to_bottom(&self)
pub fn scroll_to_bottom(&self)
Scrolls to the last row, as a request for the next prepaint.
Trait Implementations§
Source§impl Clone for UniformListScrollHandle
impl Clone for UniformListScrollHandle
Source§impl Debug for UniformListScrollHandle
impl Debug for UniformListScrollHandle
Auto Trait Implementations§
impl !RefUnwindSafe for UniformListScrollHandle
impl !Send for UniformListScrollHandle
impl !Sync for UniformListScrollHandle
impl !UnwindSafe for UniformListScrollHandle
impl Freeze for UniformListScrollHandle
impl Unpin for UniformListScrollHandle
impl UnsafeUnpin for UniformListScrollHandle
Blanket Implementations§
Source§impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
Source§fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
replaced by palette::chromatic_adaptation::AdaptIntoUnclamped
Source§fn adapt_into(self) -> D
fn adapt_into(self) -> D
replaced by palette::chromatic_adaptation::AdaptIntoUnclamped
Source§impl<T, C> AdaptIntoUnclamped<T> for Cwhere
T: AdaptFromUnclamped<C>,
impl<T, C> AdaptIntoUnclamped<T> for Cwhere
T: AdaptFromUnclamped<C>,
Source§type Scalar = <T as AdaptFromUnclamped<C>>::Scalar
type Scalar = <T as AdaptFromUnclamped<C>>::Scalar
Source§fn adapt_into_unclamped_with<M>(self) -> Twhere
M: LmsToXyz<<C as AdaptIntoUnclamped<T>>::Scalar> + XyzToLms<<C as AdaptIntoUnclamped<T>>::Scalar>,
fn adapt_into_unclamped_with<M>(self) -> Twhere
M: LmsToXyz<<C as AdaptIntoUnclamped<T>>::Scalar> + XyzToLms<<C as AdaptIntoUnclamped<T>>::Scalar>,
Source§impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
Source§fn arrays_from(colors: C) -> T
fn arrays_from(colors: C) -> T
Source§impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
Source§fn arrays_into(self) -> C
fn arrays_into(self) -> C
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
Source§type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
parameters when converting.Source§fn cam16_into_unclamped(
self,
parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>,
) -> T
fn cam16_into_unclamped( self, parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>, ) -> T
self into C, using the provided parameters.impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
Source§fn components_from(colors: C) -> T
fn components_from(colors: C) -> T
Source§impl<T, C> ComponentsInto<C> for T
impl<T, C> ComponentsInto<C> for T
Source§fn components_into(self) -> C
fn components_into(self) -> C
Source§impl<T> FromAngle<T> for T
impl<T> FromAngle<T> for T
Source§fn from_angle(angle: T) -> T
fn from_angle(angle: T) -> T
angle.Source§impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
Source§fn from_stimulus(other: U) -> T
fn from_stimulus(other: U) -> T
other into Self, while performing the appropriate scaling,
rounding and clamping.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
Source§fn into_angle(self) -> U
fn into_angle(self) -> U
T.Source§impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
Source§type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
parameters when converting.Source§fn into_cam16_unclamped(
self,
parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>,
) -> T
fn into_cam16_unclamped( self, parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>, ) -> T
self into C, using the provided parameters.Source§impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
Source§fn into_color(self) -> U
fn into_color(self) -> U
Source§impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
Source§fn into_color_unclamped(self) -> U
fn into_color_unclamped(self) -> U
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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 moreSource§impl<T> IntoStimulus<T> for T
impl<T> IntoStimulus<T> for T
Source§fn into_stimulus(self) -> T
fn into_stimulus(self) -> T
self into T, while performing the appropriate scaling,
rounding and clamping.Source§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<R, P> ReadPrimitive<R> for P
impl<R, P> ReadPrimitive<R> for P
Source§fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
ReadEndian::read_from_little_endian().Source§impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
Source§type Error = <C as TryFromComponents<T>>::Error
type Error = <C as TryFromComponents<T>>::Error
try_into_colors fails to cast.Source§fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
Source§impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
Source§fn try_into_color(self) -> Result<U, OutOfBounds<U>>
fn try_into_color(self) -> Result<U, OutOfBounds<U>>
OutOfBounds error is returned which contains
the unclamped color. Read more