use crate::ScrollViewer;
use ferroui_base::interactivity::{RoutedEvent, RoutedEventArgs};
use ferroui_base::{ferro_routed_event_args, Vector};
#[derive(Clone)]
pub struct ScrollChangedEventArgs {
base: RoutedEventArgs,
extent_delta: Vector,
offset_delta: Vector,
viewport_delta: Vector,
}
ferro_routed_event_args!(ScrollChangedEventArgs: RoutedEventArgs);
impl ScrollChangedEventArgs {
pub fn new(extent_delta: Vector, offset_delta: Vector, viewport_delta: Vector) -> Self {
Self::with_event(
Some(ScrollViewer::scroll_changed_event()),
extent_delta,
offset_delta,
viewport_delta,
)
}
pub fn with_event<T: ?Sized>(
routed_event: Option<&RoutedEvent<T>>,
extent_delta: Vector,
offset_delta: Vector,
viewport_delta: Vector,
) -> Self {
let base = match routed_event {
Some(routed_event) => RoutedEventArgs::with_event(routed_event),
None => RoutedEventArgs::new(),
};
Self {
base,
extent_delta,
offset_delta,
viewport_delta,
}
}
#[inline]
pub fn extent_delta(&self) -> Vector {
self.extent_delta
}
#[inline]
pub fn offset_delta(&self) -> Vector {
self.offset_delta
}
#[inline]
pub fn viewport_delta(&self) -> Vector {
self.viewport_delta
}
}