#pragma once #include #include #include #include #include #include #include "helpers/memory/Memory.hpp" extern "C" { #include } // gangsta bootleg XCursor impl. adidas balkanized struct SXCursorImage { Vector2D size; Vector2D hotspot; std::vector pixels; // XPixel is a u32 uint32_t delay; // animation delay to next frame (ms) }; struct SXCursors { std::vector images; std::string shape; }; class CXCursorManager { public: CXCursorManager(); ~CXCursorManager() = default; void loadTheme(const std::string& name, int size, float scale); SP getShape(std::string const& shape, int size, float scale); void syncGsettings(); private: SP createCursor(std::string const& shape, XcursorImages* xImages); std::unordered_set themePaths(std::string const& theme); std::string getLegacyShapeName(std::string const& shape); std::vector> loadStandardCursors(std::string const& name, int size); std::vector> loadAllFromDir(std::string const& path, int size); int lastLoadSize = 0; float lastLoadScale = 0; std::string themeName = ""; SP defaultCursor; SP hyprCursor; std::vector> cursors; };