From 376d5bfe0f3b9658cbf2d4ca9b00c0600341ee85 Mon Sep 17 00:00:00 2001 From: Yuqian Yang Date: Tue, 25 Nov 2025 17:15:16 +0800 Subject: Clean code. Clean events of native window. --- include/cru/base/Base.h | 7 ++++- include/cru/base/Event.h | 7 +++++ include/cru/platform/gui/Window.h | 21 +++++++++++++++ include/cru/platform/gui/win/Window.h | 50 ++--------------------------------- 4 files changed, 36 insertions(+), 49 deletions(-) (limited to 'include') diff --git a/include/cru/base/Base.h b/include/cru/base/Base.h index fda45f66..3cd04f8c 100644 --- a/include/cru/base/Base.h +++ b/include/cru/base/Base.h @@ -137,12 +137,17 @@ class CRU_BASE_API Exception : public std::exception { std::shared_ptr inner_; }; +class CRU_BASE_API NotImplementedException : public Exception { + public: + using Exception::Exception; // inherit constructors +}; + class CRU_BASE_API PlatformException : public Exception { public: using Exception::Exception; // inherit constructors }; -class ErrnoException : public Exception { +class CRU_BASE_API ErrnoException : public Exception { public: ErrnoException(); explicit ErrnoException(int error_code); diff --git a/include/cru/base/Event.h b/include/cru/base/Event.h index bdaf3ea6..71c0ac6b 100644 --- a/include/cru/base/Event.h +++ b/include/cru/base/Event.h @@ -141,6 +141,13 @@ class Event : public EventBase, public IEvent { public: \ ::cru::IEvent* name##Event() { return &name##Event_; } +#define CRU_DEFINE_EVENT_OVERRIDE(name, arg_type) \ + private: \ + ::cru::Event name##Event_; \ + \ + public: \ + ::cru::IEvent* name##Event() override { return &name##Event_; } + namespace details { struct EventHandlerRevokerCaller { void operator()(const EventHandlerRevoker& revoker) { revoker(); } diff --git a/include/cru/platform/gui/Window.h b/include/cru/platform/gui/Window.h index b8973c5a..e04db448 100644 --- a/include/cru/platform/gui/Window.h +++ b/include/cru/platform/gui/Window.h @@ -23,6 +23,10 @@ struct WindowStyleFlags { enum class WindowVisibilityType { Show, Hide, Minimize }; +struct NativePaintEventArgs { + Rect repaint_area; +}; + enum class FocusChangeType { Gain, Lose }; enum class MouseEnterLeaveType { Enter, Leave }; @@ -100,6 +104,7 @@ struct CRU_PLATFORM_GUI_API INativeWindow : virtual IPlatformResource { virtual IEvent* CreateEvent() = 0; virtual IEvent* DestroyEvent() = 0; virtual IEvent* PaintEvent() = 0; + virtual IEvent* Paint1Event(); virtual IEvent* VisibilityChangeEvent() = 0; virtual IEvent* ResizeEvent() = 0; @@ -116,3 +121,19 @@ struct CRU_PLATFORM_GUI_API INativeWindow : virtual IPlatformResource { virtual IInputMethodContext* GetInputMethodContext() = 0; }; } // namespace cru::platform::gui + +#define CRU_DEFINE_CRU_PLATFORM_GUI_I_NATIVE_WINDOW_OVERRIDE_EVENTS() \ + CRU_DEFINE_EVENT_OVERRIDE(Create, std::nullptr_t) \ + CRU_DEFINE_EVENT_OVERRIDE(Destroy, std::nullptr_t) \ + CRU_DEFINE_EVENT_OVERRIDE(Paint, std::nullptr_t) \ + CRU_DEFINE_EVENT_OVERRIDE(Paint1, const NativePaintEventArgs&) \ + CRU_DEFINE_EVENT_OVERRIDE(VisibilityChange, WindowVisibilityType) \ + CRU_DEFINE_EVENT_OVERRIDE(Resize, const Size&) \ + CRU_DEFINE_EVENT_OVERRIDE(Focus, FocusChangeType) \ + CRU_DEFINE_EVENT_OVERRIDE(MouseEnterLeave, MouseEnterLeaveType) \ + CRU_DEFINE_EVENT_OVERRIDE(MouseMove, const Point&) \ + CRU_DEFINE_EVENT_OVERRIDE(MouseDown, const NativeMouseButtonEventArgs&) \ + CRU_DEFINE_EVENT_OVERRIDE(MouseUp, const NativeMouseButtonEventArgs&) \ + CRU_DEFINE_EVENT_OVERRIDE(MouseWheel, const NativeMouseWheelEventArgs&) \ + CRU_DEFINE_EVENT_OVERRIDE(KeyDown, const NativeKeyEventArgs&) \ + CRU_DEFINE_EVENT_OVERRIDE(KeyUp, const NativeKeyEventArgs&) diff --git a/include/cru/platform/gui/win/Window.h b/include/cru/platform/gui/win/Window.h index c7d48ea9..e690ad4e 100644 --- a/include/cru/platform/gui/win/Window.h +++ b/include/cru/platform/gui/win/Window.h @@ -61,38 +61,8 @@ class CRU_WIN_GUI_API WinNativeWindow : public WinNativeResource, void SetToForeground() override; - IEvent* CreateEvent() override { return &create_event_; } - IEvent* DestroyEvent() override { return &destroy_event_; } - IEvent* PaintEvent() override { return &paint_event_; } - IEvent* VisibilityChangeEvent() override { - return &visibility_change_event_; - } - IEvent* ResizeEvent() override { return &resize_event_; } - IEvent* FocusEvent() override { return &focus_event_; } - IEvent* MouseEnterLeaveEvent() override { - return &mouse_enter_leave_event_; - } - IEvent* MouseMoveEvent() override { return &mouse_move_event_; } - IEvent* MouseDownEvent() override { - return &mouse_down_event_; - } - IEvent* MouseUpEvent() override { - return &mouse_up_event_; - } - IEvent* MouseWheelEvent() override { - return &mouse_wheel_event_; - } - - IEvent* KeyDownEvent() override { - return &key_down_event_; - } - IEvent* KeyUpEvent() override { - return &key_up_event_; - } - - IEvent* NativeMessageEvent() { - return &native_message_event_; - } + CRU_DEFINE_CRU_PLATFORM_GUI_I_NATIVE_WINDOW_OVERRIDE_EVENTS() + CRU_DEFINE_EVENT(NativeMessage, WindowNativeMessageEventArgs&) IInputMethodContext* GetInputMethodContext() override; @@ -193,21 +163,5 @@ class CRU_WIN_GUI_API WinNativeWindow : public WinNativeResource, std::shared_ptr cursor_; std::unique_ptr input_method_context_; - - Event create_event_; - Event destroy_event_; - Event paint_event_; - Event resize_event_; - Event visibility_change_event_; - Event focus_event_; - Event mouse_enter_leave_event_; - Event mouse_move_event_; - Event mouse_down_event_; - Event mouse_up_event_; - Event mouse_wheel_event_; - Event key_down_event_; - Event key_up_event_; - - Event native_message_event_; }; } // namespace cru::platform::gui::win -- cgit v1.2.3