aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/cru/osx/gui/Window.hpp44
-rw-r--r--src/osx/gui/Window.mm20
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<graphics::IPainter> BeginPaint() override;
- IEvent<std::nullptr_t>* DestroyEvent() override;
- IEvent<std::nullptr_t>* PaintEvent() override;
- IEvent<Size>* ResizeEvent() override;
- IEvent<FocusChangeType>* FocusEvent() override;
- IEvent<MouseEnterLeaveType>* MouseEnterLeaveEvent() override;
- IEvent<Point>* MouseMoveEvent() override;
- IEvent<NativeMouseButtonEventArgs>* MouseDownEvent() override;
- IEvent<NativeMouseButtonEventArgs>* MouseUpEvent() override;
- IEvent<NativeMouseWheelEventArgs>* MouseWheelEvent() override;
- IEvent<NativeKeyEventArgs>* KeyDownEvent() override;
- IEvent<NativeKeyEventArgs>* KeyUpEvent() override;
+ IEvent<std::nullptr_t>* DestroyEvent() override { return &destroy_event_; }
+ IEvent<std::nullptr_t>* PaintEvent() override { return &paint_event_; }
+ IEvent<Size>* ResizeEvent() override { return &resize_event_; }
+ IEvent<FocusChangeType>* FocusEvent() override { return &focus_event_; }
+ IEvent<MouseEnterLeaveType>* MouseEnterLeaveEvent() override {
+ return &mouse_enter_leave_event_;
+ }
+ IEvent<Point>* MouseMoveEvent() override { return &mouse_move_event_; }
+ IEvent<NativeMouseButtonEventArgs>* MouseDownEvent() override {
+ return &mouse_down_event_;
+ }
+ IEvent<NativeMouseButtonEventArgs>* MouseUpEvent() override {
+ return &mouse_up_event_;
+ }
+ IEvent<NativeMouseWheelEventArgs>* MouseWheelEvent() override {
+ return &mouse_wheel_event_;
+ }
+ IEvent<NativeKeyEventArgs>* KeyDownEvent() override {
+ return &key_down_event_;
+ }
+ IEvent<NativeKeyEventArgs>* KeyUpEvent() override { return &key_up_event_; }
IInputMethodContext* GetInputMethodContext() override;
@@ -68,5 +78,17 @@ class OsxWindow : public OsxGuiResource, public INativeWindow {
private:
std::unique_ptr<details::OsxWindowPrivate> p_;
+
+ Event<std::nullptr_t> destroy_event_;
+ Event<std::nullptr_t> paint_event_;
+ Event<Size> resize_event_;
+ Event<FocusChangeType> focus_event_;
+ Event<MouseEnterLeaveType> mouse_enter_leave_event_;
+ Event<Point> mouse_move_event_;
+ Event<NativeMouseButtonEventArgs> mouse_down_event_;
+ Event<NativeMouseButtonEventArgs> mouse_up_event_;
+ Event<NativeMouseWheelEventArgs> mouse_wheel_event_;
+ Event<NativeKeyEventArgs> key_down_event_;
+ Event<NativeKeyEventArgs> 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 <AppKit/NSWindow.h>
#include <memory>
+@interface WindowDelegate : NSObject <NSWindowDelegate>
+- (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 {