mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2026-04-29 22:10:43 +02:00
cursor: Revise edge cases for the pointer moving towards barriers
Since barriers block the invisible line between pixels, that means that we need to explicitly check the boundaries, or else we'll have a potential off-by-one error. This fixes issues when trying to move down or right across a barrier and having the pointer visibly bounce. Signed-off-by: Jasper St. Pierre <jstpierre@mecheye.net> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
1712a45422
commit
a51b2c3913
1 changed files with 10 additions and 2 deletions
|
|
@ -1093,7 +1093,11 @@ barrier_is_blocking(const struct PointerBarrier * barrier,
|
|||
if (dir & BarrierNegativeX && x1 == (barrier->x1 - 1))
|
||||
return FALSE;
|
||||
/* startpoint adjacent to barrier, moving towards -> block */
|
||||
if (x1 == barrier->x1 && y1 >= barrier->y1 && y1 <= barrier->y2) {
|
||||
if (dir & BarrierPositiveX && x1 == (barrier->x1 - 1) && y1 >= barrier->y1 && y1 <= barrier->y2) {
|
||||
*distance = 0;
|
||||
return TRUE;
|
||||
}
|
||||
if (dir & BarrierNegativeX && x1 == barrier->x1 && y1 >= barrier->y1 && y1 <= barrier->y2) {
|
||||
*distance = 0;
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -1105,7 +1109,11 @@ barrier_is_blocking(const struct PointerBarrier * barrier,
|
|||
if (dir & BarrierNegativeY && y1 == (barrier->y1 - 1))
|
||||
return FALSE;
|
||||
/* startpoint adjacent to barrier, moving towards -> block */
|
||||
if (y1 == barrier->y1 && x1 >= barrier->x1 && x1 <= barrier->x2) {
|
||||
if (dir & BarrierPositiveY && y1 == (barrier->y1 - 1) && x1 >= barrier->x1 && x1 <= barrier->x2) {
|
||||
*distance = 0;
|
||||
return TRUE;
|
||||
}
|
||||
if (dir & BarrierNegativeY && y1 == barrier->y1 && x1 >= barrier->x1 && x1 <= barrier->x2) {
|
||||
*distance = 0;
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue