From f78458173c1baf567cc96880571b380e95a1039a Mon Sep 17 00:00:00 2001 From: crupest Date: Wed, 28 Nov 2018 19:18:00 +0800 Subject: Refactor event system. --- src/ui/events/ui_event.hpp | 45 +++++++++++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 14 deletions(-) (limited to 'src/ui/events') diff --git a/src/ui/events/ui_event.hpp b/src/ui/events/ui_event.hpp index 321e7135..8380827a 100644 --- a/src/ui/events/ui_event.hpp +++ b/src/ui/events/ui_event.hpp @@ -22,7 +22,7 @@ namespace cru::ui::events { public: UiEventArgs(Object* sender, Object* original_sender) - : BasicEventArgs(sender), original_sender_(original_sender) + : BasicEventArgs(sender), original_sender_(original_sender), handled_(false) { } @@ -38,10 +38,40 @@ namespace cru::ui::events return original_sender_; } + bool IsHandled() const + { + return handled_; + } + + void SetHandled(const bool handled = true) + { + handled_ = handled; + } + private: Object* original_sender_; + bool handled_; }; + template + class RoutedEvent + { + public: + static_assert(std::is_base_of_v, "TEventArgs must be subclass of UiEventArgs."); + + using EventArgs = TEventArgs; + + RoutedEvent() = default; + RoutedEvent(const RoutedEvent& other) = delete; + RoutedEvent(RoutedEvent&& other) = delete; + RoutedEvent& operator=(const RoutedEvent& other) = delete; + RoutedEvent& operator=(RoutedEvent&& other) = delete; + ~RoutedEvent() = default; + + Event direct; + Event bubble; + Event tunnel; + }; class MouseEventArgs : public UiEventArgs { @@ -327,17 +357,4 @@ namespace cru::ui::events private: wchar_t c_; }; - - using UiEvent = Event; - using MouseEvent = Event; - using MouseButtonEvent = Event; - using MouseWheelEvent = Event; - using DrawEvent = Event; - using PositionChangedEvent = Event; - using SizeChangedEvent = Event; - using FocusChangeEvent = Event; - using ToggleEvent = Event; - using WindowNativeMessageEvent = Event; - using KeyEvent = Event; - using CharEvent = Event; } -- cgit v1.2.3