diff options
Diffstat (limited to 'include/cru/platform/gui/xcb/Window.h')
-rw-r--r-- | include/cru/platform/gui/xcb/Window.h | 45 |
1 files changed, 25 insertions, 20 deletions
diff --git a/include/cru/platform/gui/xcb/Window.h b/include/cru/platform/gui/xcb/Window.h index 6d923666..61e4b616 100644 --- a/include/cru/platform/gui/xcb/Window.h +++ b/include/cru/platform/gui/xcb/Window.h @@ -1,5 +1,6 @@ #pragma once +#include "../../GraphicsBase.h" #include "../Window.h" #include "Base.h" @@ -10,6 +11,7 @@ namespace cru::platform::gui::xcb { class XcbUiApplication; +class XcbCursor; class XcbWindow : public XcbResource, public virtual INativeWindow { friend XcbUiApplication; @@ -18,6 +20,7 @@ class XcbWindow : public XcbResource, public virtual INativeWindow { explicit XcbWindow(XcbUiApplication* application); ~XcbWindow() override; + bool IsCreated() override; void Close() override; INativeWindow* GetParent() override; @@ -32,33 +35,27 @@ class XcbWindow : public XcbResource, public virtual INativeWindow { WindowVisibilityType GetVisibility() override; void SetVisibility(WindowVisibilityType visibility) override; - virtual Size GetClientSize() = 0; - virtual void SetClientSize(const Size& size) = 0; + Size GetClientSize() override; + void SetClientSize(const Size& size) override; - virtual Rect GetClientRect() = 0; - virtual void SetClientRect(const Rect& rect) = 0; + Rect GetClientRect() override; + void SetClientRect(const Rect& rect) override; - // Get the rect of the window containing frame. - // The lefttop of the rect is relative to screen lefttop. - virtual Rect GetWindowRect() = 0; + Rect GetWindowRect() override; + void SetWindowRect(const Rect& rect) override; - // Set the rect of the window containing frame. - // The lefttop of the rect is relative to screen lefttop. - virtual void SetWindowRect(const Rect& rect) = 0; + bool RequestFocus() override; - virtual bool RequestFocus() = 0; + Point GetMousePosition() override; - // Relative to client lefttop. - virtual Point GetMousePosition() = 0; + bool CaptureMouse() override; + bool ReleaseMouse() override; - virtual bool CaptureMouse() = 0; - virtual bool ReleaseMouse() = 0; + void SetCursor(std::shared_ptr<ICursor> cursor) override; - virtual void SetCursor(std::shared_ptr<ICursor> cursor) = 0; + void SetToForeground() override; - virtual void SetToForeground() = 0; - - virtual void RequestRepaint() = 0; + void RequestRepaint() override; std::unique_ptr<graphics::IPainter> BeginPaint() override; @@ -78,7 +75,7 @@ class XcbWindow : public XcbResource, public virtual INativeWindow { IEvent<NativeKeyEventArgs>* KeyDownEvent() override; IEvent<NativeKeyEventArgs>* KeyUpEvent() override; - virtual IInputMethodContext* GetInputMethodContext() = 0; + IInputMethodContext* GetInputMethodContext() override; public: std::optional<xcb_window_t> GetXcbWindow(); @@ -91,12 +88,19 @@ class XcbWindow : public XcbResource, public virtual INativeWindow { void DoSetParent(xcb_window_t window); void DoSetStyleFlags(xcb_window_t window); void DoSetTitle(xcb_window_t window); + void DoSetClientRect(xcb_window_t window, const Rect& rect); + void DoSetCursor(xcb_window_t window, XcbCursor* cursor); void* XcbGetProperty(xcb_window_t window, xcb_atom_t property, xcb_atom_t type, std::uint32_t offset, std::uint32_t length, std::uint32_t* out_length = nullptr); + // Relative to screen lefttop. + Point GetXcbWindowPosition(xcb_window_t window); + + std::optional<Thickness> Get_NET_FRAME_EXTENTS(xcb_window_t window); + private: XcbUiApplication* application_; std::optional<xcb_window_t> xcb_window_; @@ -105,6 +109,7 @@ class XcbWindow : public XcbResource, public virtual INativeWindow { WindowStyleFlag style_; std::string title_; bool mapped_; + std::shared_ptr<XcbCursor> cursor_; XcbWindow* parent_; |