fix: allow sw force rendering like hl

c505eb55ff
This commit is contained in:
Virt 2025-04-29 09:44:57 +02:00
commit 461f9a3fd2
3 changed files with 7 additions and 7 deletions

View file

@ -60,7 +60,7 @@ CDynamicCursors::~CDynamicCursors() {
Reimplements rendering of the software cursor. Reimplements rendering of the software cursor.
Is also largely identical to hyprlands impl, but uses our custom rendering to rotate the cursor. Is also largely identical to hyprlands impl, but uses our custom rendering to rotate the cursor.
*/ */
void CDynamicCursors::renderSoftware(CPointerManager* pointers, SP<CMonitor> pMonitor, const Time::steady_tp& now, CRegion& damage, std::optional<Vector2D> overridePos) { void CDynamicCursors::renderSoftware(CPointerManager* pointers, SP<CMonitor> pMonitor, const Time::steady_tp& now, CRegion& damage, std::optional<Vector2D> overridePos, bool forceRender) {
static auto* const* PNEAREST = (Hyprlang::INT* const*) getConfig(CONFIG_HIGHRES_NEAREST); static auto* const* PNEAREST = (Hyprlang::INT* const*) getConfig(CONFIG_HIGHRES_NEAREST);
if (!pointers->hasCursor()) if (!pointers->hasCursor())
@ -69,7 +69,7 @@ void CDynamicCursors::renderSoftware(CPointerManager* pointers, SP<CMonitor> pMo
auto state = pointers->stateFor(pMonitor); auto state = pointers->stateFor(pMonitor);
auto zoom = resultShown.scale; auto zoom = resultShown.scale;
if ((!state->hardwareFailed && state->softwareLocks <= 0)) { if (!state->hardwareFailed && state->softwareLocks <= 0 && !forceRender) {
if (pointers->currentCursorImage.surface) if (pointers->currentCursorImage.surface)
pointers->currentCursorImage.surface->resource()->frame(now); pointers->currentCursorImage.surface->resource()->frame(now);

View file

@ -25,7 +25,7 @@ class CDynamicCursors {
void onTick(CPointerManager* pointers); void onTick(CPointerManager* pointers);
/* hook on renderSoftwareCursorsFor */ /* hook on renderSoftwareCursorsFor */
void renderSoftware(CPointerManager* pointers, SP<CMonitor> pMonitor, const Time::steady_tp& now, CRegion& damage, std::optional<Vector2D> overridePos); void renderSoftware(CPointerManager* pointers, SP<CMonitor> pMonitor, const Time::steady_tp& now, CRegion& damage, std::optional<Vector2D> overridePos, bool forceRender);
/* hook on damageIfSoftware*/ /* hook on damageIfSoftware*/
void damageSoftware(CPointerManager* pointers); void damageSoftware(CPointerManager* pointers);
/* hook on renderHWCursorBuffer */ /* hook on renderHWCursorBuffer */

View file

@ -17,11 +17,11 @@
#include "src/managers/PointerManager.hpp" #include "src/managers/PointerManager.hpp"
#include "src/version.h" #include "src/version.h"
typedef void (*origRenderSofwareCursorsFor)(void*, SP<CMonitor>, const Time::steady_tp&, CRegion&, std::optional<Vector2D>); typedef void (*origRenderSofwareCursorsFor)(void*, SP<CMonitor>, const Time::steady_tp&, CRegion&, std::optional<Vector2D>, bool);
inline CFunctionHook* g_pRenderSoftwareCursorsForHook = nullptr; inline CFunctionHook* g_pRenderSoftwareCursorsForHook = nullptr;
void hkRenderSoftwareCursorsFor(void* thisptr, SP<CMonitor> pMonitor, const Time::steady_tp& now, CRegion& damage, std::optional<Vector2D> overridePos) { void hkRenderSoftwareCursorsFor(void* thisptr, SP<CMonitor> pMonitor, const Time::steady_tp& now, CRegion& damage, std::optional<Vector2D> overridePos, bool forceRender) {
if (isEnabled()) g_pDynamicCursors->renderSoftware((CPointerManager*) thisptr, pMonitor, now, damage, overridePos); if (isEnabled()) g_pDynamicCursors->renderSoftware((CPointerManager*) thisptr, pMonitor, now, damage, overridePos, forceRender);
else (*(origRenderSofwareCursorsFor)g_pRenderSoftwareCursorsForHook->m_pOriginal)(thisptr, pMonitor, now, damage, overridePos); else (*(origRenderSofwareCursorsFor)g_pRenderSoftwareCursorsForHook->m_pOriginal)(thisptr, pMonitor, now, damage, overridePos, forceRender);
} }
typedef void (*origDamageIfSoftware)(void*); typedef void (*origDamageIfSoftware)(void*);