mirror of
https://github.com/hyprwm/Hyprland
synced 2024-12-25 17:29:50 +01:00
940ed3d525
using a unordered_set means its store based on a hash_value meaning currently it can end up loading inherited themes before the actual theme itself depending on the hash of the theme name used, reason for using set at all over vector is to keep unique members and not foreverever looping broken inherit themeing.
49 lines
1.5 KiB
C++
49 lines
1.5 KiB
C++
#pragma once
|
|
#include <string>
|
|
#include <vector>
|
|
#include <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, float scale);
|
|
SP<SXCursors> getShape(std::string const& shape, int size, float scale);
|
|
void syncGsettings();
|
|
|
|
private:
|
|
SP<SXCursors> createCursor(std::string const& shape, XcursorImages* xImages);
|
|
std::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;
|
|
float lastLoadScale = 0;
|
|
std::string themeName = "";
|
|
SP<SXCursors> defaultCursor;
|
|
SP<SXCursors> hyprCursor;
|
|
std::vector<SP<SXCursors>> cursors;
|
|
};
|