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

_______________________________________________
xorg mailing list
xorg@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/xorg

Reply via email to