aboutsummaryrefslogtreecommitdiff
path: root/include/cru/platform/gui/xcb/Window.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/cru/platform/gui/xcb/Window.h')
-rw-r--r--include/cru/platform/gui/xcb/Window.h45
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_;