* cursormgr: reduce duplicated code add a few functions such as setCursorBuffer and setAnimationTimer to reduce duplicated code and also avoid future mishaps of forgetting to clear buffer or disarm timer. and generally reduce spaghetti even tho pasta can be delicious. * xcursormgr: implent inherited themes implent index.theme parsing and inherited themes. * cursormgr: ensure a fallback xcursor exist ensure a xcursor fallback exist otherwise it wont load the proper theme if we at launch have hyprcursor enabled and then set it to false in config and reload. also use the env var when using hyprctl setcursor incase its empty.
47 lines
No EOL
1.5 KiB
C++
47 lines
No EOL
1.5 KiB
C++
#pragma once
|
|
#include <string>
|
|
#include <vector>
|
|
#include <unordered_set>
|
|
#include <array>
|
|
#include <cstdint>
|
|
#include <hyprutils/math/Vector2D.hpp>
|
|
#include "helpers/memory/Memory.hpp"
|
|
|
|
extern "C" {
|
|
#include <X11/Xcursor/Xcursor.h>
|
|
}
|
|
|
|
// gangsta bootleg XCursor impl. adidas balkanized
|
|
struct SXCursorImage {
|
|
Vector2D size;
|
|
Vector2D hotspot;
|
|
std::vector<uint32_t> pixels; // XPixel is a u32
|
|
uint32_t delay; // animation delay to next frame (ms)
|
|
};
|
|
|
|
struct SXCursors {
|
|
std::vector<SXCursorImage> images;
|
|
std::string shape;
|
|
};
|
|
|
|
class CXCursorManager {
|
|
public:
|
|
CXCursorManager();
|
|
~CXCursorManager() = default;
|
|
|
|
void loadTheme(const std::string& name, int size);
|
|
SP<SXCursors> getShape(std::string const& shape, int size);
|
|
|
|
private:
|
|
SP<SXCursors> createCursor(std::string const& shape, XcursorImages* xImages);
|
|
std::unordered_set<std::string> themePaths(std::string const& theme);
|
|
std::string getLegacyShapeName(std::string const& shape);
|
|
std::vector<SP<SXCursors>> loadStandardCursors(std::string const& name, int size);
|
|
std::vector<SP<SXCursors>> loadAllFromDir(std::string const& path, int size);
|
|
|
|
int lastLoadSize = 0;
|
|
std::string themeName = "";
|
|
SP<SXCursors> defaultCursor;
|
|
SP<SXCursors> hyprCursor;
|
|
std::vector<SP<SXCursors>> cursors;
|
|
}; |