diff options
author | 杨宇千 <crupest@outlook.com> | 2018-11-28 19:32:58 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-11-28 19:32:58 +0800 |
commit | dd75868a05cfc9d71b26f1197022c03ba481fe33 (patch) | |
tree | 6f50579da8be5b6be8792b0d832b76ba822c2760 /src/ui/events/ui_event.hpp | |
parent | ee22597122612cd75fe62f5d808cb51478373fad (diff) | |
parent | d98e9ef82be277190c883e4ee7547516dbd620b6 (diff) | |
download | cru-dd75868a05cfc9d71b26f1197022c03ba481fe33.tar.gz cru-dd75868a05cfc9d71b26f1197022c03ba481fe33.tar.bz2 cru-dd75868a05cfc9d71b26f1197022c03ba481fe33.zip |
Merge pull request #30 from crupest/routed-event
Develop routed events.
Diffstat (limited to 'src/ui/events/ui_event.hpp')
-rw-r--r-- | src/ui/events/ui_event.hpp | 45 |
1 files changed, 31 insertions, 14 deletions
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 <typename TEventArgs> + class RoutedEvent + { + public: + static_assert(std::is_base_of_v<UiEventArgs, TEventArgs>, "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<TEventArgs> direct; + Event<TEventArgs> bubble; + Event<TEventArgs> tunnel; + }; class MouseEventArgs : public UiEventArgs { @@ -327,17 +357,4 @@ namespace cru::ui::events private: wchar_t c_; }; - - using UiEvent = Event<UiEventArgs>; - using MouseEvent = Event<MouseEventArgs>; - using MouseButtonEvent = Event<MouseButtonEventArgs>; - using MouseWheelEvent = Event<MouseWheelEventArgs>; - using DrawEvent = Event<DrawEventArgs>; - using PositionChangedEvent = Event<PositionChangedEventArgs>; - using SizeChangedEvent = Event<SizeChangedEventArgs>; - using FocusChangeEvent = Event<FocusChangeEventArgs>; - using ToggleEvent = Event<ToggleEventArgs>; - using WindowNativeMessageEvent = Event<WindowNativeMessageEventArgs>; - using KeyEvent = Event<KeyEventArgs>; - using CharEvent = Event<CharEventArgs>; } |