diff options
Diffstat (limited to 'src/helpers/MonitorZoomController.cpp')
| -rw-r--r-- | src/helpers/MonitorZoomController.cpp | 21 |
1 files changed, 18 insertions, 3 deletions
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); } |
