From 9c7d93cdb85ccc89f0804b4f280eac099c4476c6 Mon Sep 17 00:00:00 2001 From: Yuqian Yang Date: Tue, 23 Sep 2025 22:37:42 +0800 Subject: Impl xcb cursor manager. --- include/cru/platform/gui/xcb/Cursor.h | 25 ++++++++++++++++++------- include/cru/platform/gui/xcb/UiApplication.h | 5 ++++- 2 files changed, 22 insertions(+), 8 deletions(-) (limited to 'include') diff --git a/include/cru/platform/gui/xcb/Cursor.h b/include/cru/platform/gui/xcb/Cursor.h index d51c33c1..02ede7dd 100644 --- a/include/cru/platform/gui/xcb/Cursor.h +++ b/include/cru/platform/gui/xcb/Cursor.h @@ -5,17 +5,16 @@ #include "Base.h" #include +#include +#include +#include +#include namespace cru::platform::gui::xcb { class XcbUiApplication; + class XcbCursor : public XcbResource, public virtual ICursor { public: - /** - * Specification at - * https://www.x.org/archive/X11R7.7/doc/man/man3/Xcursor.3.xhtml. - */ - static XcbCursor* LoadXCursor(io::Stream* stream); - XcbCursor(XcbUiApplication* application, xcb_cursor_t cursor, bool auto_free); ~XcbCursor() override; @@ -28,6 +27,18 @@ class XcbCursor : public XcbResource, public virtual ICursor { }; class XcbCursorManager : public XcbResource, public virtual ICursorManager { - virtual std::shared_ptr GetSystemCursor(SystemCursorType type) = 0; + public: + explicit XcbCursorManager(XcbUiApplication* application); + ~XcbCursorManager() override; + + std::shared_ptr GetSystemCursor(SystemCursorType type) override; + + private: + std::shared_ptr LoadXCursor(std::string_view name); + + private: + XcbUiApplication* application_; + xcb_cursor_context_t* xcb_cursor_context_; + std::unordered_map> cursors_; }; } // namespace cru::platform::gui::xcb diff --git a/include/cru/platform/gui/xcb/UiApplication.h b/include/cru/platform/gui/xcb/UiApplication.h index 4fa4ec8d..80995179 100644 --- a/include/cru/platform/gui/xcb/UiApplication.h +++ b/include/cru/platform/gui/xcb/UiApplication.h @@ -12,6 +12,7 @@ namespace cru::platform::gui::xcb { class XcbWindow; +class XcbCursorManager; class XcbUiApplication : public XcbResource, public virtual IUiApplication { friend XcbWindow; @@ -68,7 +69,7 @@ class XcbUiApplication : public XcbResource, public virtual IUiApplication { cru::platform::graphics::IGraphicsFactory* GetGraphicsFactory() override; - virtual ICursorManager* GetCursorManager() = 0; + ICursorManager* GetCursorManager() override; virtual IClipboard* GetClipboard() = 0; @@ -105,5 +106,7 @@ class XcbUiApplication : public XcbResource, public virtual IUiApplication { bool is_quit_on_all_window_closed_; std::vector windows_; + + XcbCursorManager* cursor_manager_; }; } // namespace cru::platform::gui::xcb -- cgit v1.2.3