ferroui_controls/
size_changed_event_args.rs1use ferroui_base::interactivity::{RoutedEvent, RoutedEventArgs};
2use ferroui_base::layout::LayoutHelper;
3use ferroui_base::utilities::MathUtilities;
4use ferroui_base::{ferro_routed_event_args, FerroObject, Nullable, Size};
5
6#[derive(Clone, Default)]
8pub struct SizeChangedEventArgs {
9 base: RoutedEventArgs,
10 new_size: Size,
11 previous_size: Size,
12}
13
14ferro_routed_event_args!(SizeChangedEventArgs: RoutedEventArgs);
15
16impl SizeChangedEventArgs {
17 pub fn with_event<T: ?Sized>(routed_event: &RoutedEvent<T>) -> Self {
19 Self { base: RoutedEventArgs::with_event(routed_event), ..Self::default() }
20 }
21
22 pub fn with_event_and_source<T: ?Sized>(
24 routed_event: &RoutedEvent<T>,
25 source: impl Into<Nullable<FerroObject>>,
26 ) -> Self {
27 Self { base: RoutedEventArgs::with_event_and_source(routed_event, source), ..Self::default() }
28 }
29
30 pub fn new<T: ?Sized>(
33 routed_event: &RoutedEvent<T>,
34 source: impl Into<Nullable<FerroObject>>,
35 previous_size: Size,
36 new_size: Size,
37 ) -> Self {
38 Self { base: RoutedEventArgs::with_event_and_source(routed_event, source), new_size, previous_size }
39 }
40
41 pub fn height_changed(&self) -> bool {
50 !MathUtilities::are_close_eps(self.new_size.height, self.previous_size.height, LayoutHelper::LAYOUT_EPSILON)
51 }
52
53 pub fn new_size(&self) -> Size {
55 self.new_size
56 }
57
58 pub fn previous_size(&self) -> Size {
60 self.previous_size
61 }
62
63 pub fn width_changed(&self) -> bool {
68 !MathUtilities::are_close_eps(self.new_size.width, self.previous_size.width, LayoutHelper::LAYOUT_EPSILON)
69 }
70}