aboutsummaryrefslogtreecommitdiff
path: root/src/ui/events/ui_event.hpp
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2018-11-28 19:18:00 +0800
committercrupest <crupest@outlook.com>2018-11-28 19:18:00 +0800
commitf78458173c1baf567cc96880571b380e95a1039a (patch)
tree5bf790a573cff30071628329e1457e3affa0c2bc /src/ui/events/ui_event.hpp
parentee22597122612cd75fe62f5d808cb51478373fad (diff)
downloadcru-f78458173c1baf567cc96880571b380e95a1039a.tar.gz
cru-f78458173c1baf567cc96880571b380e95a1039a.tar.bz2
cru-f78458173c1baf567cc96880571b380e95a1039a.zip
Refactor event system.
Diffstat (limited to 'src/ui/events/ui_event.hpp')
-rw-r--r--src/ui/events/ui_event.hpp45
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>;
}