[PATCH] Fix rotated/reflected cursor positions.

Keith Packard keithp at keithp.com
Fri Nov 14 14:12:53 PST 2008


Doing projective transforms required repositioning the cursor using the
hotspot, but that requires relocating the upper left corner in terms of said
hotspot.
---
 hw/xfree86/modes/xf86Cursors.c |   22 +++++++++++-----------
 1 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/hw/xfree86/modes/xf86Cursors.c b/hw/xfree86/modes/xf86Cursors.c
index 4065789..cd4f9e8 100644
--- a/hw/xfree86/modes/xf86Cursors.c
+++ b/hw/xfree86/modes/xf86Cursors.c
@@ -330,23 +330,23 @@ xf86_crtc_set_cursor_position (xf86CrtcPtr crtc, int x, int y)
 
 	v.v[0] = x + ScreenPriv->HotX; v.v[1] = y + ScreenPriv->HotY; v.v[2] = 1;
 	pict_f_transform_point (&crtc->f_framebuffer_to_crtc, &v);
-	x = floor (v.v[0] + 0.5) - ScreenPriv->HotX;
-	y = floor (v.v[1] + 0.5) - ScreenPriv->HotY;
+	x = floor (v.v[0] + 0.5);
+	y = floor (v.v[1] + 0.5);
+	/*
+	 * Transform position of cursor upper left corner
+	 */
+	xf86_crtc_rotate_coord_back (crtc->rotation,
+				     cursor_info->MaxWidth,
+				     cursor_info->MaxHeight,
+				     ScreenPriv->HotX, ScreenPriv->HotY, &dx, &dy);
+	x -= dx;
+	y -= dy;
    }
     else
     {
 	x -= crtc->x;
 	y -= crtc->y;
     }
-    /*
-     * Transform position of cursor upper left corner
-     */
-    xf86_crtc_rotate_coord_back (crtc->rotation,
-				 cursor_info->MaxWidth,
-				 cursor_info->MaxHeight,
-				 0, 0, &dx, &dy);
-    x -= dx;
-    y -= dy;
 
     /*
      * Disable the cursor when it is outside the viewport
-- 
1.5.6.5




More information about the xorg mailing list