[PATCH] randr: Fix logic in RRPointerToNearestCrtc
walter harms
wharms at bfs.de
Tue Jul 29 04:48:26 PDT 2014
Am 29.07.2014 02:54, schrieb David Ung:
> 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 at nvidia.com>
> Reviewed-by: Keith Packard <keithp at keithp.com>
> ---
> randr/rrpointer.c | 11 ++++++-----
> 1 file changed, 6 insertions(+), 5 deletions(-)
>
> diff --git a/randr/rrpointer.c b/randr/rrpointer.c
> index eb6b677..ab8f9a0 100644
> --- a/randr/rrpointer.c
> +++ b/randr/rrpointer.c
> @@ -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 = abs(dx) + abs(dy);
nitpicking ...
distance is normally defined with sqrt(dx*dx+dy*dy)
perhaps you can use dx*dx instead of abs() to avoid
confusion about dist ?
re,
wh
> if (!nearest || dist < best) {
> nearest = crtc;
> best_dx = dx;
> best_dy = dy;
> + best = dist;
> }
> }
> if (best_dx || best_dy)
More information about the xorg-devel
mailing list