From 461f9a3fd2b906a90a9192972afae028bd15809b Mon Sep 17 00:00:00 2001 From: Virt <41426325+VirtCode@users.noreply.github.com> Date: Tue, 29 Apr 2025 09:44:57 +0200 Subject: [PATCH] fix: allow sw force rendering like hl https://github.com/hyprwm/Hyprland/commit/c505eb55ff967f2a0474e88a50803412ba550a61 --- src/cursor.cpp | 4 ++-- src/cursor.hpp | 2 +- src/main.cpp | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/cursor.cpp b/src/cursor.cpp index 4c28e57..819f981 100644 --- a/src/cursor.cpp +++ b/src/cursor.cpp @@ -60,7 +60,7 @@ CDynamicCursors::~CDynamicCursors() { Reimplements rendering of the software cursor. Is also largely identical to hyprlands impl, but uses our custom rendering to rotate the cursor. */ -void CDynamicCursors::renderSoftware(CPointerManager* pointers, SP pMonitor, const Time::steady_tp& now, CRegion& damage, std::optional overridePos) { +void CDynamicCursors::renderSoftware(CPointerManager* pointers, SP pMonitor, const Time::steady_tp& now, CRegion& damage, std::optional overridePos, bool forceRender) { static auto* const* PNEAREST = (Hyprlang::INT* const*) getConfig(CONFIG_HIGHRES_NEAREST); if (!pointers->hasCursor()) @@ -69,7 +69,7 @@ void CDynamicCursors::renderSoftware(CPointerManager* pointers, SP pMo auto state = pointers->stateFor(pMonitor); auto zoom = resultShown.scale; - if ((!state->hardwareFailed && state->softwareLocks <= 0)) { + if (!state->hardwareFailed && state->softwareLocks <= 0 && !forceRender) { if (pointers->currentCursorImage.surface) pointers->currentCursorImage.surface->resource()->frame(now); diff --git a/src/cursor.hpp b/src/cursor.hpp index db784a9..c8c8cab 100644 --- a/src/cursor.hpp +++ b/src/cursor.hpp @@ -25,7 +25,7 @@ class CDynamicCursors { void onTick(CPointerManager* pointers); /* hook on renderSoftwareCursorsFor */ - void renderSoftware(CPointerManager* pointers, SP pMonitor, const Time::steady_tp& now, CRegion& damage, std::optional overridePos); + void renderSoftware(CPointerManager* pointers, SP pMonitor, const Time::steady_tp& now, CRegion& damage, std::optional overridePos, bool forceRender); /* hook on damageIfSoftware*/ void damageSoftware(CPointerManager* pointers); /* hook on renderHWCursorBuffer */ diff --git a/src/main.cpp b/src/main.cpp index 3af67de..edeaf85 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -17,11 +17,11 @@ #include "src/managers/PointerManager.hpp" #include "src/version.h" -typedef void (*origRenderSofwareCursorsFor)(void*, SP, const Time::steady_tp&, CRegion&, std::optional); +typedef void (*origRenderSofwareCursorsFor)(void*, SP, const Time::steady_tp&, CRegion&, std::optional, bool); inline CFunctionHook* g_pRenderSoftwareCursorsForHook = nullptr; -void hkRenderSoftwareCursorsFor(void* thisptr, SP pMonitor, const Time::steady_tp& now, CRegion& damage, std::optional overridePos) { - if (isEnabled()) g_pDynamicCursors->renderSoftware((CPointerManager*) thisptr, pMonitor, now, damage, overridePos); - else (*(origRenderSofwareCursorsFor)g_pRenderSoftwareCursorsForHook->m_pOriginal)(thisptr, pMonitor, now, damage, overridePos); +void hkRenderSoftwareCursorsFor(void* thisptr, SP pMonitor, const Time::steady_tp& now, CRegion& damage, std::optional overridePos, bool forceRender) { + if (isEnabled()) g_pDynamicCursors->renderSoftware((CPointerManager*) thisptr, pMonitor, now, damage, overridePos, forceRender); + else (*(origRenderSofwareCursorsFor)g_pRenderSoftwareCursorsForHook->m_pOriginal)(thisptr, pMonitor, now, damage, overridePos, forceRender); } typedef void (*origDamageIfSoftware)(void*);