diff options
| author | vaxerski <vaxry@vaxry.net> | 2023-08-18 22:40:23 +0200 |
|---|---|---|
| committer | vaxerski <vaxry@vaxry.net> | 2023-08-18 22:40:23 +0200 |
| commit | 942ee943f5b0f3f9611b2ff5481dacf19aed6a17 (patch) | |
| tree | 7948429ac0dab0295b21406b3d88352c5c8e829e /src/managers/input/InputManager.cpp | |
| parent | 14f20a737221f09a601d846c2b37b969afe2e725 (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.cpp | 48 |
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; |
