summaryrefslogtreecommitdiff
path: root/src/helpers/MonitorZoomController.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/helpers/MonitorZoomController.cpp')
-rw-r--r--src/helpers/MonitorZoomController.cpp21
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);
}