#pragma once #include "UiEventArgs.h" #include namespace cru::ui::events { // 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 CRU_UI_API 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&; IEvent* Direct() { return &direct_; } IEvent* Bubble() { return &bubble_; } IEvent* Tunnel() { return &tunnel_; } private: Event direct_; Event bubble_; Event tunnel_; }; } // namespace cru::ui::event