From 0e35b2c022599bca2df61488945f07e4d6b4eb35 Mon Sep 17 00:00:00 2001 From: 杨宇千 Date: Sun, 11 Aug 2019 01:09:49 +0800 Subject: ... --- include/cru/ui/event/ui_event.hpp | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) (limited to 'include/cru/ui/event/ui_event.hpp') 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 #include 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 class RoutedEvent { public: @@ -45,16 +48,19 @@ class RoutedEvent { using EventArgs = TEventArgs; - RoutedEvent() = default; + RoutedEvent() + : direct(new Event()), + bubble(new Event()), + tunnel(new Event()) {} 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; + const std::unique_ptr> direct; + const std::unique_ptr> bubble; + const std::unique_ptr> 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; -- cgit v1.2.3