From 3a8abe0aed9bb72ed64cbfe9f2f83a0db285e14c Mon Sep 17 00:00:00 2001 From: 杨宇千 Date: Sun, 11 Aug 2019 17:31:20 +0800 Subject: ... --- include/cru/ui/event/ui_event.hpp | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) (limited to 'include/cru') diff --git a/include/cru/ui/event/ui_event.hpp b/include/cru/ui/event/ui_event.hpp index f36e40a2..b962ff76 100644 --- a/include/cru/ui/event/ui_event.hpp +++ b/include/cru/ui/event/ui_event.hpp @@ -6,6 +6,7 @@ #include #include +#include namespace cru::platform::graph { class Painter; @@ -45,22 +46,28 @@ class RoutedEvent { public: static_assert(std::is_base_of_v, "TEventArgs must be subclass of UiEventArgs."); + static_assert(!std::is_reference_v, + "TEventArgs must not be reference."); using EventArgs = TEventArgs; - RoutedEvent() - : direct(new Event()), - bubble(new Event()), - tunnel(new Event()) {} + RoutedEvent() = default; RoutedEvent(const RoutedEvent& other) = delete; RoutedEvent(RoutedEvent&& other) = delete; RoutedEvent& operator=(const RoutedEvent& other) = delete; RoutedEvent& operator=(RoutedEvent&& other) = delete; ~RoutedEvent() = default; - const std::unique_ptr> direct; - const std::unique_ptr> bubble; - const std::unique_ptr> tunnel; + IEvent* Direct() { return &direct_; } + + IEvent* Bubble() { return &bubble_; } + + IEvent* Tunnel() { return &tunnel_; } + + private: + Event direct_; + Event bubble_; + Event tunnel_; }; class MouseEventArgs : public UiEventArgs { -- cgit v1.2.3