summaryrefslogtreecommitdiff
path: root/src/managers/CursorManager.hpp
diff options
context:
space:
mode:
authorVaxry <43317083+vaxerski@users.noreply.github.com>2024-07-21 13:09:54 +0200
committerGitHub <noreply@github.com>2024-07-21 13:09:54 +0200
commit016da234d0e852de3ef20eb2e89ac58d2a85f6e7 (patch)
tree496085987176551b0794fffc069877d44943e2f1 /src/managers/CursorManager.hpp
parentf642fb97df5c69267a03452533de383ff8023570 (diff)
Core: Move to aquamarine (#6608)
Moves Hyprland from wlroots to aquamarine for the backend. --------- Signed-off-by: Vaxry <vaxry@vaxry.net> Co-authored-by: Mihai Fufezan <mihai@fufexan.net> Co-authored-by: Jan Beich <jbeich@FreeBSD.org> Co-authored-by: vaxerski <vaxerski@users.noreply.github.com> Co-authored-by: UjinT34 <41110182+UjinT34@users.noreply.github.com> Co-authored-by: Tom Englund <tomenglund26@gmail.com> Co-authored-by: Ikalco <73481042+ikalco@users.noreply.github.com> Co-authored-by: diniamo <diniamo53@gmail.com>
Diffstat (limited to 'src/managers/CursorManager.hpp')
-rw-r--r--src/managers/CursorManager.hpp70
1 files changed, 45 insertions, 25 deletions
diff --git a/src/managers/CursorManager.hpp b/src/managers/CursorManager.hpp
index 3ee98ca6..4324dfb4 100644
--- a/src/managers/CursorManager.hpp
+++ b/src/managers/CursorManager.hpp
@@ -6,47 +6,51 @@
#include "../includes.hpp"
#include "../helpers/math/Math.hpp"
#include "../helpers/memory/Memory.hpp"
+#include "../macros.hpp"
+#include <aquamarine/buffer/Buffer.hpp>
-struct wlr_buffer;
-struct wlr_xcursor_manager;
class CWLSurface;
+AQUAMARINE_FORWARD(IBuffer);
+
class CCursorManager {
public:
CCursorManager();
~CCursorManager();
- wlr_buffer* getCursorBuffer();
+ SP<Aquamarine::IBuffer> getCursorBuffer();
- void setCursorFromName(const std::string& name);
- void setCursorSurface(SP<CWLSurface> surf, const Vector2D& hotspot);
- void setXCursor(const std::string& name);
+ void setCursorFromName(const std::string& name);
+ void setCursorSurface(SP<CWLSurface> surf, const Vector2D& hotspot);
+ void setXCursor(const std::string& name);
- bool changeTheme(const std::string& name, const int size);
- void updateTheme();
- SCursorImageData dataFor(const std::string& name); // for xwayland
- void setXWaylandCursor();
+ bool changeTheme(const std::string& name, const int size);
+ void updateTheme();
+ SCursorImageData dataFor(const std::string& name); // for xwayland
+ void setXWaylandCursor();
- void tickAnimatedCursor();
+ void tickAnimatedCursor();
- class CCursorBuffer {
+ class CCursorBuffer : public Aquamarine::IBuffer {
public:
CCursorBuffer(cairo_surface_t* surf, const Vector2D& size, const Vector2D& hotspot);
CCursorBuffer(uint8_t* pixelData, const Vector2D& size, const Vector2D& hotspot);
~CCursorBuffer();
- struct SCursorWlrBuffer {
- wlr_buffer base;
- cairo_surface_t* surface = nullptr;
- bool dropped = false;
- CCursorBuffer* parent = nullptr;
- uint8_t* pixelData = nullptr;
- size_t stride = 0;
- } wlrBuffer;
+ virtual Aquamarine::eBufferCapability caps();
+ virtual Aquamarine::eBufferType type();
+ virtual void update(const Hyprutils::Math::CRegion& damage);
+ virtual bool isSynchronous(); // whether the updates to this buffer are synchronous, aka happen over cpu
+ virtual bool good();
+ virtual Aquamarine::SSHMAttrs shm();
+ virtual std::tuple<uint8_t*, uint32_t, size_t> beginDataPtr(uint32_t flags);
+ virtual void endDataPtr();
private:
- Vector2D size;
- Vector2D hotspot;
+ Vector2D hotspot;
+ cairo_surface_t* surface = nullptr;
+ uint8_t* pixelData = nullptr;
+ size_t stride = 0;
friend class CCursorManager;
};
@@ -56,7 +60,7 @@ class CCursorManager {
bool m_bOurBufferConnected = false;
private:
- std::vector<std::unique_ptr<CCursorBuffer>> m_vCursorBuffers;
+ std::vector<SP<CCursorBuffer>> m_vCursorBuffers;
std::unique_ptr<Hyprcursor::CHyprcursorManager> m_pHyprcursor;
@@ -70,8 +74,24 @@ class CCursorManager {
int m_iCurrentAnimationFrame = 0;
Hyprcursor::SCursorShapeData m_sCurrentCursorShapeData;
- // xcursor fallback
- wlr_xcursor_manager* m_pWLRXCursorMgr = nullptr;
+ // gangsta bootleg XCursor impl. Whenever Hyprland has to use
+ // an xcursor, just use the pointer.
+ struct SXCursor {
+ Vector2D size;
+ Vector2D hotspot;
+ std::vector<uint32_t> pixels; // XPixel is a u32
+ };
+
+ struct SXCursorManager {
+ void loadTheme(const std::string& name, int size);
+
+ int lastLoadSize = 0;
+
+ bool themeLoaded = false;
+ std::string themeName = "";
+ SP<SXCursor> defaultCursor;
+ std::unordered_map<std::string, SP<SXCursor>> cursors;
+ } xcursor;
};
inline std::unique_ptr<CCursorManager> g_pCursorManager; \ No newline at end of file