aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2021-10-21 17:36:37 +0800
committercrupest <crupest@outlook.com>2021-10-21 17:36:37 +0800
commitfc9cd10a84ea92dd702ac84d302ca46198d17d23 (patch)
tree5125106fdc74c196d33aead15ec4287050aaa5af /src
parent695031ac33acd398bd1492bcce813b8346574ae2 (diff)
downloadcru-fc9cd10a84ea92dd702ac84d302ca46198d17d23.tar.gz
cru-fc9cd10a84ea92dd702ac84d302ca46198d17d23.tar.bz2
cru-fc9cd10a84ea92dd702ac84d302ca46198d17d23.zip
...
Diffstat (limited to 'src')
-rw-r--r--src/osx/gui/Window.mm38
-rw-r--r--src/osx/gui/WindowPrivate.h13
2 files changed, 39 insertions, 12 deletions
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