[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