Skip to content

Commit

Permalink
properly software lock cursors with zoom_factor
Browse files Browse the repository at this point in the history
  • Loading branch information
ikalco committed Jun 12, 2024
1 parent 8412ffc commit a60ccf8
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 7 deletions.
16 changes: 16 additions & 0 deletions src/managers/PointerManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,22 @@ CPointerManager::CPointerManager() {
});
}

void CPointerManager::lockSoftwareAll() {
for (auto& state : monitorStates) {
state->softwareLocks++;
}

updateCursorBackend();
}

void CPointerManager::unlockSoftwareAll() {
for (auto& state : monitorStates) {
state->softwareLocks--;
}

updateCursorBackend();
}

void CPointerManager::lockSoftwareForMonitor(SP<CMonitor> mon) {
auto state = stateFor(mon);
state->softwareLocks++;
Expand Down
2 changes: 2 additions & 0 deletions src/managers/PointerManager.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ class CPointerManager {

void lockSoftwareForMonitor(SP<CMonitor> pMonitor);
void unlockSoftwareForMonitor(SP<CMonitor> pMonitor);
void lockSoftwareAll();
void unlockSoftwareAll();

void renderSoftwareCursorsFor(SP<CMonitor> pMonitor, timespec* now, CRegion& damage /* logical */, std::optional<Vector2D> overridePos = {} /* monitor-local */);

Expand Down
18 changes: 11 additions & 7 deletions src/render/Renderer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1253,6 +1253,17 @@ void CHyprRenderer::renderMonitor(CMonitor* pMonitor) {

TRACY_GPU_ZONE("Render");

static bool zoomLock = false;
if (zoomLock && *PZOOMFACTOR == 1.f) {
Debug::log(INFO, "unlocking all under {}!", pMonitor->szName);
g_pPointerManager->unlockSoftwareAll();
zoomLock = false;
} else if (!zoomLock && *PZOOMFACTOR != 1.f) {
Debug::log(INFO, "locking all under {}!", pMonitor->szName);
g_pPointerManager->lockSoftwareAll();
zoomLock = true;
}

if (pMonitor == g_pCompositor->getMonitorFromCursor())
g_pHyprOpenGL->m_RenderData.mouseZoomFactor = std::clamp(*PZOOMFACTOR, 1.f, INFINITY);
else
Expand All @@ -1265,10 +1276,6 @@ void CHyprRenderer::renderMonitor(CMonitor* pMonitor) {
pMonitor->forceFullFrames = 10;
}

bool lockSoftware = pMonitor == g_pCompositor->getMonitorFromCursor() && *PZOOMFACTOR != 1.f;
if (lockSoftware)
g_pPointerManager->lockSoftwareForMonitor(pMonitor->self.lock());

CRegion damage, finalDamage;
if (!beginRender(pMonitor, damage, RENDER_MODE_NORMAL)) {
Debug::log(ERR, "renderer: couldn't beginRender()!");
Expand Down Expand Up @@ -1370,9 +1377,6 @@ void CHyprRenderer::renderMonitor(CMonitor* pMonitor) {

endRender();

if (lockSoftware)
g_pPointerManager->unlockSoftwareForMonitor(pMonitor->self.lock());

TRACY_GPU_COLLECT;

if (!pMonitor->mirrors.empty()) {
Expand Down

0 comments on commit a60ccf8

Please sign in to comment.