mirror of
https://github.com/hyprwm/Hyprland
synced 2024-12-27 07:29:48 +01:00
c5feee1e35
gtk scales the cursor size itself since its CSD so if we scale the size its gonna get double scaled. incorporate the scale into xcursormanager to keep track of it.
49 lines
1.6 KiB
C++
49 lines
1.6 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, 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::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;
|
|
float lastLoadScale = 0;
|
|
std::string themeName = "";
|
|
SP<SXCursors> defaultCursor;
|
|
SP<SXCursors> hyprCursor;
|
|
std::vector<SP<SXCursors>> cursors;
|
|
};
|