#pragma once #include "Resource.hpp" #include "cru/platform/gui/Base.hpp" #include "cru/platform/gui/Window.hpp" #include namespace cru::platform::gui::osx { namespace details { class OsxWindowPrivate; } class OsxUiApplication; class OsxWindow : public OsxGuiResource, public INativeWindow { friend details::OsxWindowPrivate; public: OsxWindow(OsxUiApplication* ui_application, INativeWindow* parent, bool frame); CRU_DELETE_COPY(OsxWindow) CRU_DELETE_MOVE(OsxWindow) ~OsxWindow() override; public: void Close() override; INativeWindow* GetParent() override; bool IsVisible() override; void SetVisible(bool is_visible) override; Size GetClientSize() override; void SetClientSize(const Size& size) override; Rect GetWindowRect() override; void SetWindowRect(const Rect& rect) override; Point GetMousePosition() override; bool CaptureMouse() override; bool ReleaseMouse() override; void SetCursor(std::shared_ptr cursor) override; void RequestRepaint() override; std::unique_ptr BeginPaint() 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; private: void CreateWindow(); 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