Introduce RelativeOffset type in scrollable
This commit is contained in:
parent
9f85e0c721
commit
624a4ada79
6 changed files with 75 additions and 69 deletions
|
|
@ -1,19 +1,18 @@
|
|||
//! Operate on widgets that can be scrolled.
|
||||
use crate::widget::{Id, Operation};
|
||||
use iced_core::Point;
|
||||
|
||||
/// The internal state of a widget that can be scrolled.
|
||||
pub trait Scrollable {
|
||||
/// Snaps the scroll of the widget to the given `percentage` along the horizontal & vertical axis.
|
||||
fn snap_to(&mut self, percentage: Point);
|
||||
fn snap_to(&mut self, offset: RelativeOffset);
|
||||
}
|
||||
|
||||
/// Produces an [`Operation`] that snaps the widget with the given [`Id`] to
|
||||
/// the provided `percentage`.
|
||||
pub fn snap_to<T>(target: Id, percentage: Point) -> impl Operation<T> {
|
||||
pub fn snap_to<T>(target: Id, offset: RelativeOffset) -> impl Operation<T> {
|
||||
struct SnapTo {
|
||||
target: Id,
|
||||
percentage: Point,
|
||||
offset: RelativeOffset,
|
||||
}
|
||||
|
||||
impl<T> Operation<T> for SnapTo {
|
||||
|
|
@ -27,10 +26,29 @@ pub fn snap_to<T>(target: Id, percentage: Point) -> impl Operation<T> {
|
|||
|
||||
fn scrollable(&mut self, state: &mut dyn Scrollable, id: Option<&Id>) {
|
||||
if Some(&self.target) == id {
|
||||
state.snap_to(self.percentage);
|
||||
state.snap_to(self.offset);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SnapTo { target, percentage }
|
||||
SnapTo { target, offset }
|
||||
}
|
||||
|
||||
/// The amount of offset in each direction of a [`Scrollable`].
|
||||
///
|
||||
/// A value of `0.0` means start, while `1.0` means end.
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Default)]
|
||||
pub struct RelativeOffset {
|
||||
/// The amount of horizontal offset
|
||||
pub x: f32,
|
||||
/// The amount of vertical offset
|
||||
pub y: f32,
|
||||
}
|
||||
|
||||
impl RelativeOffset {
|
||||
/// A relative offset that points to the top-left of a [`Scrollable`].
|
||||
pub const START: Self = Self { x: 0.0, y: 0.0 };
|
||||
|
||||
/// A relative offset that points to the bottom-right of a [`Scrollable`].
|
||||
pub const END: Self = Self { x: 1.0, y: 1.0 };
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue