diff options
Diffstat (limited to 'include/cru/ui/event/ui_event.hpp')
-rw-r--r-- | include/cru/ui/event/ui_event.hpp | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/include/cru/ui/event/ui_event.hpp b/include/cru/ui/event/ui_event.hpp index 62045808..f36e40a2 100644 --- a/include/cru/ui/event/ui_event.hpp +++ b/include/cru/ui/event/ui_event.hpp @@ -4,6 +4,7 @@ #include "../base.hpp" #include "cru/common/event.hpp" +#include <memory> #include <optional> namespace cru::platform::graph { @@ -37,6 +38,8 @@ class UiEventArgs : public Object { bool handled_; }; +// TEventArgs must not be a reference type. This class help add reference. +// EventArgs must be reference because the IsHandled property must be settable. template <typename TEventArgs> class RoutedEvent { public: @@ -45,16 +48,19 @@ class RoutedEvent { using EventArgs = TEventArgs; - RoutedEvent() = default; + RoutedEvent() + : direct(new Event<TEventArgs&>()), + bubble(new Event<TEventArgs&>()), + tunnel(new Event<TEventArgs&>()) {} 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; + const std::unique_ptr<IEvent<TEventArgs&>> direct; + const std::unique_ptr<IEvent<TEventArgs&>> bubble; + const std::unique_ptr<IEvent<TEventArgs&>> tunnel; }; class MouseEventArgs : public UiEventArgs { @@ -77,9 +83,11 @@ class MouseEventArgs : public UiEventArgs { class MouseButtonEventArgs : public MouseEventArgs { public: MouseButtonEventArgs(Object* sender, Object* original_sender, - const Point& point, - const MouseButton button) + const Point& point, const MouseButton button) : MouseEventArgs(sender, original_sender, point), button_(button) {} + MouseButtonEventArgs(Object* sender, Object* original_sender, + const MouseButton button) + : MouseEventArgs(sender, original_sender), button_(button) {} MouseButtonEventArgs(const MouseButtonEventArgs& other) = default; MouseButtonEventArgs(MouseButtonEventArgs&& other) = default; MouseButtonEventArgs& operator=(const MouseButtonEventArgs& other) = default; |