Skip to main content

ferroui_controls/
scroll_changed_event_args.rs

1use crate::ScrollViewer;
2use ferroui_base::interactivity::{RoutedEvent, RoutedEventArgs};
3use ferroui_base::{ferro_routed_event_args, Vector};
4
5/// Describes a change in scrolling state.
6#[derive(Clone)]
7pub struct ScrollChangedEventArgs {
8    base: RoutedEventArgs,
9    extent_delta: Vector,
10    offset_delta: Vector,
11    viewport_delta: Vector,
12}
13
14ferro_routed_event_args!(ScrollChangedEventArgs: RoutedEventArgs);
15
16impl ScrollChangedEventArgs {
17    /// Creates args for the `ScrollChanged` event of the scroll viewer.
18    pub fn new(extent_delta: Vector, offset_delta: Vector, viewport_delta: Vector) -> Self {
19        Self::with_event(
20            Some(ScrollViewer::scroll_changed_event()),
21            extent_delta,
22            offset_delta,
23            viewport_delta,
24        )
25    }
26
27    /// Creates args for a routed event.
28    pub fn with_event<T: ?Sized>(
29        routed_event: Option<&RoutedEvent<T>>,
30        extent_delta: Vector,
31        offset_delta: Vector,
32        viewport_delta: Vector,
33    ) -> Self {
34        let base = match routed_event {
35            Some(routed_event) => RoutedEventArgs::with_event(routed_event),
36            None => RoutedEventArgs::new(),
37        };
38        Self {
39            base,
40            extent_delta,
41            offset_delta,
42            viewport_delta,
43        }
44    }
45
46    /// Gets the change to the value of the `Extent` of the scroll viewer.
47    #[inline]
48    pub fn extent_delta(&self) -> Vector {
49        self.extent_delta
50    }
51
52    /// Gets the change to the value of the `Offset` of the scroll viewer.
53    #[inline]
54    pub fn offset_delta(&self) -> Vector {
55        self.offset_delta
56    }
57
58    /// Gets the change to the value of the `Viewport` of the scroll viewer.
59    #[inline]
60    pub fn viewport_delta(&self) -> Vector {
61        self.viewport_delta
62    }
63}