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