diff options
author | Yuqian Yang <crupest@crupest.life> | 2025-09-23 22:37:42 +0800 |
---|---|---|
committer | Yuqian Yang <crupest@crupest.life> | 2025-09-23 22:37:42 +0800 |
commit | 9c7d93cdb85ccc89f0804b4f280eac099c4476c6 (patch) | |
tree | 7ce2dd98c2c61e4da09a6bf750b5f8fd56f929fe /include/cru/platform/gui/xcb/Cursor.h | |
parent | 9737b7966c0b061ee80235d1c7c460efc0610894 (diff) | |
download | cru-9c7d93cdb85ccc89f0804b4f280eac099c4476c6.tar.gz cru-9c7d93cdb85ccc89f0804b4f280eac099c4476c6.tar.bz2 cru-9c7d93cdb85ccc89f0804b4f280eac099c4476c6.zip |
Impl xcb cursor manager.
Diffstat (limited to 'include/cru/platform/gui/xcb/Cursor.h')
-rw-r--r-- | include/cru/platform/gui/xcb/Cursor.h | 25 |
1 files changed, 18 insertions, 7 deletions
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 <xcb/xcb.h> +#include <xcb/xcb_cursor.h> +#include <memory> +#include <string_view> +#include <unordered_map> 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<ICursor> GetSystemCursor(SystemCursorType type) = 0; + public: + explicit XcbCursorManager(XcbUiApplication* application); + ~XcbCursorManager() override; + + std::shared_ptr<ICursor> GetSystemCursor(SystemCursorType type) override; + + private: + std::shared_ptr<XcbCursor> LoadXCursor(std::string_view name); + + private: + XcbUiApplication* application_; + xcb_cursor_context_t* xcb_cursor_context_; + std::unordered_map<SystemCursorType, std::shared_ptr<XcbCursor>> cursors_; }; } // namespace cru::platform::gui::xcb |