From f9723133cc909874999e6181bddf286033070e0c Mon Sep 17 00:00:00 2001 From: Barrett Ruth <62671086+barrettruth@users.noreply.github.com> Date: Fri, 1 May 2026 19:02:01 -0400 Subject: gestures: add live pinch cursor zoom (#14049) --- src/helpers/MonitorZoomController.cpp | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) (limited to 'src/helpers/MonitorZoomController.cpp') diff --git a/src/helpers/MonitorZoomController.cpp b/src/helpers/MonitorZoomController.cpp index c1b6cc6a..b59e1eb2 100644 --- a/src/helpers/MonitorZoomController.cpp +++ b/src/helpers/MonitorZoomController.cpp @@ -7,11 +7,27 @@ #include "desktop/DesktopTypes.hpp" #include "render/Renderer.hpp" +void CMonitorZoomController::pinAnchor(const Vector2D& anchor) { + m_pinnedAnchor = anchor; + m_anchorPinned = true; +} + +void CMonitorZoomController::clearAnchor() { + m_anchorPinned = false; +} + +Vector2D CMonitorZoomController::getAnchor(const PHLMONITORREF& monitor) { + if (m_anchorPinned) + return m_pinnedAnchor; + + return g_pInputManager->getMouseCoordsInternal() - monitor->m_position; +} + void CMonitorZoomController::zoomWithDetachedCamera(CBox& result, const Render::SRenderData& m_renderData) { const auto m = m_renderData.pMonitor; auto monbox = CBox(0, 0, m->m_size.x, m->m_size.y); const auto ZOOM = g_pHyprRenderer->m_renderData.mouseZoomFactor; - const auto MOUSE = g_pInputManager->getMouseCoordsInternal() - m->m_position; + const auto MOUSE = getAnchor(m); if (m_lastZoomLevel != ZOOM) { if (m_resetCameraState) { @@ -83,8 +99,7 @@ void CMonitorZoomController::applyZoomTransform(CBox& monbox, const Render::SRen if (*PZOOMDETACHEDCAMERA && !INITANIM) zoomWithDetachedCamera(monbox, m_renderData); else { - const auto ZOOMCENTER = - g_pHyprRenderer->m_renderData.mouseZoomUseMouse ? (g_pInputManager->getMouseCoordsInternal() - m->m_position) * m->m_scale : m->m_transformedSize / 2.f; + const auto ZOOMCENTER = g_pHyprRenderer->m_renderData.mouseZoomUseMouse ? getAnchor(m) * m->m_scale : m->m_transformedSize / 2.f; monbox.translate(-ZOOMCENTER).scale(ZOOM).translate(*PZOOMRIGID ? m->m_transformedSize / 2.0 : ZOOMCENTER); } -- cgit v1.2.3