summaryrefslogtreecommitdiff
path: root/src/managers/input/InputManager.cpp
diff options
context:
space:
mode:
authorvaxerski <vaxry@vaxry.net>2023-08-18 22:40:23 +0200
committervaxerski <vaxry@vaxry.net>2023-08-18 22:40:23 +0200
commit942ee943f5b0f3f9611b2ff5481dacf19aed6a17 (patch)
tree7948429ac0dab0295b21406b3d88352c5c8e829e /src/managers/input/InputManager.cpp
parent14f20a737221f09a601d846c2b37b969afe2e725 (diff)
input: unify constraint hint logic
Unifies the constraint hint logic. Previously, ignoring the stupid conditions, unscaled hints were mistaken with scaled coordinates.
Diffstat (limited to 'src/managers/input/InputManager.cpp')
-rw-r--r--src/managers/input/InputManager.cpp48
1 files changed, 23 insertions, 25 deletions
diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp
index c4490f3c..bda2e5ee 100644
--- a/src/managers/input/InputManager.cpp
+++ b/src/managers/input/InputManager.cpp
@@ -1177,31 +1177,8 @@ void CInputManager::constrainMouse(SMouse* pMouse, wlr_pointer_constraint_v1* co
pMouse->hyprListener_commitConstraint.removeCallback();
if (pMouse->currentConstraint) {
- if (!constraint) {
- // warpe to hint
-
- if (constraint->current.committed & WLR_POINTER_CONSTRAINT_V1_STATE_CURSOR_HINT) {
- if (PWINDOW) {
- if (PWINDOW->m_bIsX11) {
- wlr_cursor_warp(g_pCompositor->m_sWLRCursor, nullptr, constraint->current.cursor_hint.x + PWINDOW->m_uSurface.xwayland->x,
- constraint->current.cursor_hint.y + PWINDOW->m_uSurface.xwayland->y);
-
- wlr_seat_pointer_warp(constraint->seat, constraint->current.cursor_hint.x, constraint->current.cursor_hint.y);
- } else {
- wlr_cursor_warp(g_pCompositor->m_sWLRCursor, nullptr, constraint->current.cursor_hint.x + PWINDOW->m_vRealPosition.vec().x,
- constraint->current.cursor_hint.y + PWINDOW->m_vRealPosition.vec().y);
-
- wlr_seat_pointer_warp(constraint->seat, constraint->current.cursor_hint.x, constraint->current.cursor_hint.y);
- }
- }
-
- const auto PCONSTRAINT = constraintFromWlr(constraint);
- if (PCONSTRAINT) { // should never be null but who knows
- PCONSTRAINT->positionHint = Vector2D(constraint->current.cursor_hint.x, constraint->current.cursor_hint.y);
- PCONSTRAINT->hintSet = true;
- }
- }
- }
+ if (constraint && constraint->current.committed & WLR_POINTER_CONSTRAINT_V1_STATE_CURSOR_HINT)
+ warpMouseToConstraintMiddle(constraintFromWlr(constraint));
wlr_pointer_constraint_v1_send_deactivated(pMouse->currentConstraint);
}
@@ -1224,6 +1201,27 @@ void CInputManager::constrainMouse(SMouse* pMouse, wlr_pointer_constraint_v1* co
Debug::log(LOG, "Constrained mouse to %lx", pMouse->currentConstraint);
}
+void CInputManager::warpMouseToConstraintMiddle(SConstraint* pConstraint) {
+
+ if (!pConstraint)
+ return;
+
+ pConstraint->positionHint = Vector2D(pConstraint->constraint->current.cursor_hint.x, pConstraint->constraint->current.cursor_hint.y);
+ pConstraint->hintSet = true;
+
+ const auto PWINDOW = g_pCompositor->getWindowFromSurface(pConstraint->constraint->surface);
+
+ if (PWINDOW) {
+ const auto RELATIVETO = PWINDOW->m_bIsX11 ?
+ g_pXWaylandManager->xwaylandToWaylandCoords({PWINDOW->m_uSurface.xwayland->x, PWINDOW->m_uSurface.xwayland->y}) / PWINDOW->m_fX11SurfaceScaledBy :
+ PWINDOW->m_vRealPosition.goalv();
+ const auto HINTSCALE = PWINDOW->m_fX11SurfaceScaledBy;
+
+ wlr_cursor_warp(g_pCompositor->m_sWLRCursor, nullptr, RELATIVETO.x + pConstraint->positionHint.x / HINTSCALE, RELATIVETO.y + pConstraint->positionHint.y / HINTSCALE);
+ wlr_seat_pointer_warp(pConstraint->constraint->seat, pConstraint->constraint->current.cursor_hint.x, pConstraint->constraint->current.cursor_hint.y);
+ }
+}
+
void CInputManager::unconstrainMouse() {
if (!g_pCompositor->m_sSeat.mouse || !g_pCompositor->m_sSeat.mouse->currentConstraint)
return;