ferroui_controls/
scroll_changed_event_args.rs1use crate::ScrollViewer;
2use ferroui_base::interactivity::{RoutedEvent, RoutedEventArgs};
3use ferroui_base::{ferro_routed_event_args, Vector};
4
5#[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 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 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 #[inline]
48 pub fn extent_delta(&self) -> Vector {
49 self.extent_delta
50 }
51
52 #[inline]
54 pub fn offset_delta(&self) -> Vector {
55 self.offset_delta
56 }
57
58 #[inline]
60 pub fn viewport_delta(&self) -> Vector {
61 self.viewport_delta
62 }
63}