From 08833937da98a7119195f980e82762becb563e28 Mon Sep 17 00:00:00 2001 From: crupest Date: Sun, 3 Oct 2021 13:48:15 +0800 Subject: ... --- include/cru/osx/gui/Window.hpp | 44 +++++++++++++++++++++++++++++++----------- src/osx/gui/Window.mm | 20 +++++++++++++++++++ 2 files changed, 53 insertions(+), 11 deletions(-) diff --git a/include/cru/osx/gui/Window.hpp b/include/cru/osx/gui/Window.hpp index 6bb6b747..a247c79e 100644 --- a/include/cru/osx/gui/Window.hpp +++ b/include/cru/osx/gui/Window.hpp @@ -49,17 +49,27 @@ class OsxWindow : public OsxGuiResource, public INativeWindow { std::unique_ptr BeginPaint() override; - IEvent* DestroyEvent() override; - IEvent* PaintEvent() override; - IEvent* ResizeEvent() override; - IEvent* FocusEvent() override; - IEvent* MouseEnterLeaveEvent() override; - IEvent* MouseMoveEvent() override; - IEvent* MouseDownEvent() override; - IEvent* MouseUpEvent() override; - IEvent* MouseWheelEvent() override; - IEvent* KeyDownEvent() override; - IEvent* KeyUpEvent() override; + IEvent* DestroyEvent() override { return &destroy_event_; } + IEvent* PaintEvent() override { return &paint_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_; } IInputMethodContext* GetInputMethodContext() override; @@ -68,5 +78,17 @@ class OsxWindow : public OsxGuiResource, public INativeWindow { private: std::unique_ptr p_; + + Event destroy_event_; + Event paint_event_; + Event resize_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_; }; } // namespace cru::platform::gui::osx diff --git a/src/osx/gui/Window.mm b/src/osx/gui/Window.mm index 239e175a..3ff94f68 100644 --- a/src/osx/gui/Window.mm +++ b/src/osx/gui/Window.mm @@ -7,6 +7,13 @@ #include #include +@interface WindowDelegate : NSObject +- (void)windowWillClose:(NSNotification*)notification; +- (void)windowDidExpose:(NSNotification*)notification; +- (void)windowDidUpdate:(NSNotification*)notification; +- (void)windowDidResize:(NSNotification*)notification; +@end + namespace cru::platform::gui::osx { namespace details { class OsxWindowPrivate { @@ -20,6 +27,12 @@ class OsxWindowPrivate { ~OsxWindowPrivate() = default; + public: + void OnWindowWillClose(); + void OnWindowDidExpose(); + void OnWindowDidUpdate(); + void OnWindowDidResize(); + private: OsxWindow* osx_window_; @@ -30,6 +43,13 @@ class OsxWindowPrivate { NSWindow* window_; }; + +void OsxWindowPrivate::OnWindowWillClose() { osx_window_->destroy_event_.Raise(nullptr); } +void OsxWindowPrivate::OnWindowDidExpose() { [window_ update]; } +void OsxWindowPrivate::OnWindowDidUpdate() { osx_window_->paint_event_.Raise(nullptr); } +void OsxWindowPrivate::OnWindowDidResize() { + osx_window_->resize_event_.Raise(osx_window_->GetClientSize()); +} } namespace { -- cgit v1.2.3