randr: Fix logic in RRPointerToNearestCrtc
RRPointerToNearestCrtc is suppose to snap to the nearest Crtc, but best_x and best_y is always positive, hence when calling SetCursorPosition it will make the cursor even further away. Correct delta x/y to allow negative values and also use "width/height -1" in the calculation. Also choose the closest Crtc by setting the "best" value. Signed-off-by: David Ung <davidu@nvidia.com> Reviewed-by: Keith Packard <keithp@keithp.com> Signed-off-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
parent
90803042bc
commit
b063a185ab
|
@ -77,21 +77,22 @@ RRPointerToNearestCrtc(DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y,
|
|||
|
||||
if (x < crtc->x)
|
||||
dx = crtc->x - x;
|
||||
else if (x > crtc->x + scan_width)
|
||||
dx = x - (crtc->x + scan_width);
|
||||
else if (x > crtc->x + scan_width - 1)
|
||||
dx = crtc->x + (scan_width - 1) - x;
|
||||
else
|
||||
dx = 0;
|
||||
if (y < crtc->y)
|
||||
dy = crtc->y - y;
|
||||
else if (y > crtc->y + scan_height)
|
||||
dy = y - (crtc->y + scan_height);
|
||||
else if (y > crtc->y + scan_height - 1)
|
||||
dy = crtc->y + (scan_height - 1) - y;
|
||||
else
|
||||
dy = 0;
|
||||
dist = dx + dy;
|
||||
dist = dx * dx + dy * dy;
|
||||
if (!nearest || dist < best) {
|
||||
nearest = crtc;
|
||||
best_dx = dx;
|
||||
best_dy = dy;
|
||||
best = dist;
|
||||
}
|
||||
}
|
||||
if (best_dx || best_dy)
|
||||
|
|
Loading…
Reference in New Issue