aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/cru/osx/gui/Window.hpp44
-rw-r--r--src/osx/gui/Window.mm38
-rw-r--r--src/osx/gui/WindowPrivate.h13
3 files changed, 50 insertions, 45 deletions
diff --git a/include/cru/osx/gui/Window.hpp b/include/cru/osx/gui/Window.hpp
index 24ebabca..e5e77083 100644
--- a/include/cru/osx/gui/Window.hpp
+++ b/include/cru/osx/gui/Window.hpp
@@ -53,27 +53,17 @@ class OsxWindow : public OsxGuiResource, public INativeWindow {
std::unique_ptr<graphics::IPainter> BeginPaint() 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_; }
+ 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;
IInputMethodContext* GetInputMethodContext() override;
@@ -82,17 +72,5 @@ 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 a8f5cd9a..cd1a70e6 100644
--- a/src/osx/gui/Window.mm
+++ b/src/osx/gui/Window.mm
@@ -41,7 +41,7 @@ inline NSWindowStyleMask CalcWindowStyleMask(bool frame) {
namespace details {
void OsxWindowPrivate::OnWindowWillClose() {
- osx_window_->destroy_event_.Raise(nullptr);
+ destroy_event_.Raise(nullptr);
window_ = nil;
CGLayerRelease(draw_layer_);
}
@@ -53,17 +53,17 @@ void OsxWindowPrivate::OnWindowDidResize() {
styleMask:CalcWindowStyleMask(frame_)];
content_rect_ = cru::platform::graphics::osx::quartz::Convert(rect);
- osx_window_->resize_event_.Raise(osx_window_->GetClientSize());
-
CGLayerRelease(draw_layer_);
draw_layer_ = CGLayerCreateWithContext(nullptr, rect.size, nullptr);
Ensures(draw_layer_);
+ resize_event_.Raise(osx_window_->GetClientSize());
+
osx_window_->RequestRepaint();
}
void OsxWindowPrivate::OnMouseEnterLeave(MouseEnterLeaveType type) {
- osx_window_->mouse_enter_leave_event_.Raise(type);
+ mouse_enter_leave_event_.Raise(type);
if (type == MouseEnterLeaveType::Enter) {
mouse_in_ = true;
UpdateCursor();
@@ -72,26 +72,26 @@ void OsxWindowPrivate::OnMouseEnterLeave(MouseEnterLeaveType type) {
}
}
-void OsxWindowPrivate::OnMouseMove(Point p) { osx_window_->mouse_move_event_.Raise(p); }
+void OsxWindowPrivate::OnMouseMove(Point p) { mouse_move_event_.Raise(p); }
void OsxWindowPrivate::OnMouseDown(MouseButton button, Point p, KeyModifier key_modifier) {
- osx_window_->mouse_down_event_.Raise({button, p, key_modifier});
+ mouse_down_event_.Raise({button, p, key_modifier});
}
void OsxWindowPrivate::OnMouseUp(MouseButton button, Point p, KeyModifier key_modifier) {
- osx_window_->mouse_up_event_.Raise({button, p, key_modifier});
+ mouse_up_event_.Raise({button, p, key_modifier});
}
void OsxWindowPrivate::OnMouseWheel(float delta, Point p, KeyModifier key_modifier) {
- osx_window_->mouse_wheel_event_.Raise({delta, p, key_modifier});
+ mouse_wheel_event_.Raise({delta, p, key_modifier});
}
void OsxWindowPrivate::OnKeyDown(KeyCode key, KeyModifier key_modifier) {
- osx_window_->key_down_event_.Raise({key, key_modifier});
+ key_down_event_.Raise({key, key_modifier});
}
void OsxWindowPrivate::OnKeyUp(KeyCode key, KeyModifier key_modifier) {
- osx_window_->key_up_event_.Raise({key, key_modifier});
+ key_up_event_.Raise({key, key_modifier});
}
void OsxWindowPrivate::UpdateCursor() {
@@ -185,8 +185,8 @@ void OsxWindow::SetWindowRect(const Rect& rect) {
void OsxWindow::RequestRepaint() {
if (!p_->draw_timer_) {
p_->draw_timer_ = GetUiApplication()->SetImmediate([this] {
- this->paint_event_.Raise(nullptr);
- this->p_->draw_timer_.Release();
+ p_->paint_event_.Raise(nullptr);
+ p_->draw_timer_.Release();
});
}
}
@@ -240,6 +240,20 @@ void OsxWindow::SetCursor(std::shared_ptr<ICursor> cursor) {
}
}
+IEvent<std::nullptr_t>* OsxWindow::DestroyEvent() { return &p_->destroy_event_; }
+IEvent<std::nullptr_t>* OsxWindow::PaintEvent() { return &p_->paint_event_; }
+IEvent<Size>* OsxWindow::ResizeEvent() { return &p_->resize_event_; }
+IEvent<FocusChangeType>* OsxWindow::FocusEvent() { return &p_->focus_event_; }
+IEvent<MouseEnterLeaveType>* OsxWindow::MouseEnterLeaveEvent() {
+ return &p_->mouse_enter_leave_event_;
+}
+IEvent<Point>* OsxWindow::MouseMoveEvent() { return &p_->mouse_move_event_; }
+IEvent<NativeMouseButtonEventArgs>* OsxWindow::MouseDownEvent() { return &p_->mouse_down_event_; }
+IEvent<NativeMouseButtonEventArgs>* OsxWindow::MouseUpEvent() { return &p_->mouse_up_event_; }
+IEvent<NativeMouseWheelEventArgs>* OsxWindow::MouseWheelEvent() { return &p_->mouse_wheel_event_; }
+IEvent<NativeKeyEventArgs>* OsxWindow::KeyDownEvent() { return &p_->key_down_event_; }
+IEvent<NativeKeyEventArgs>* OsxWindow::KeyUpEvent() { return &p_->key_up_event_; }
+
IInputMethodContext* OsxWindow::GetInputMethodContext() { return p_->input_method_context_.get(); }
}
diff --git a/src/osx/gui/WindowPrivate.h b/src/osx/gui/WindowPrivate.h
index cbb7872d..279859ef 100644
--- a/src/osx/gui/WindowPrivate.h
+++ b/src/osx/gui/WindowPrivate.h
@@ -1,6 +1,7 @@
#pragma once
#include "cru/osx/gui/Window.hpp"
+#include "cru/common/Event.hpp"
#include "cru/osx/gui/Cursor.hpp"
#include "cru/platform/gui/TimerHelper.hpp"
@@ -90,6 +91,18 @@ class OsxWindowPrivate {
std::unique_ptr<OsxInputMethodContext> input_method_context_;
TimerAutoCanceler draw_timer_;
+
+ 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 details
} // namespace cru::platform::gui::osx