#pragma once #include "Resource.h" #include "cru/platform/gui/Base.h" #include "cru/platform/gui/InputMethod.h" #include "cru/platform/gui/Window.h" #include namespace cru::platform::gui::osx { namespace details { class OsxWindowPrivate; class OsxInputMethodContextPrivate; } // namespace details class OsxUiApplication; class OsxInputMethodContext; class OsxWindow : public OsxGuiResource, public INativeWindow { friend details::OsxWindowPrivate; friend details::OsxInputMethodContextPrivate; public: OsxWindow(OsxUiApplication* ui_application); CRU_DELETE_COPY(OsxWindow) CRU_DELETE_MOVE(OsxWindow) ~OsxWindow() override; public: void Close() override; INativeWindow* GetParent() override; void SetParent(INativeWindow* parent) override; WindowStyleFlag GetStyleFlag() override; void SetStyleFlag(WindowStyleFlag flag) override; String GetTitle() override; void SetTitle(String title) override; WindowVisibilityType GetVisibility() override; void SetVisibility(WindowVisibilityType visibility) override; Size GetClientSize() override; void SetClientSize(const Size& size) override; Rect GetClientRect() override; void SetClientRect(const Rect& rect) override; Rect GetWindowRect() override; void SetWindowRect(const Rect& rect) override; bool RequestFocus() override; Point GetMousePosition() override; bool CaptureMouse() override; bool ReleaseMouse() override; void SetCursor(std::shared_ptr cursor) override; void SetToForeground() override; void RequestRepaint() override; std::unique_ptr BeginPaint() override; IEvent* CreateEvent() override; IEvent* DestroyEvent() override; IEvent* PaintEvent() override; IEvent* VisibilityChangeEvent() 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; IInputMethodContext* GetInputMethodContext() override; private: std::unique_ptr p_; }; } // namespace cru::platform::gui::osx