diff options
Diffstat (limited to 'include/cru/platform/gui/xcb')
-rw-r--r-- | include/cru/platform/gui/xcb/Cursor.h | 25 | ||||
-rw-r--r-- | include/cru/platform/gui/xcb/UiApplication.h | 5 |
2 files changed, 22 insertions, 8 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 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<XcbWindow*> windows_; + + XcbCursorManager* cursor_manager_; }; } // namespace cru::platform::gui::xcb |