[PATCH] Adjust transformed cursor position to account for hotspot

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


---
 hw/xfree86/modes/xf86Cursors.c |    9 +++++++++
 1 files changed, 9 insertions(+), 0 deletions(-)

diff --git a/hw/xfree86/modes/xf86Cursors.c b/hw/xfree86/modes/xf86Cursors.c
index a7ed5c4..7bf9265 100644
--- a/hw/xfree86/modes/xf86Cursors.c
+++ b/hw/xfree86/modes/xf86Cursors.c
@@ -37,6 +37,7 @@
 #include "xf86Crtc.h"
 #include "xf86Modes.h"
 #include "xf86RandR12.h"
+#include "xf86CursorPriv.h"
 #include "X11/extensions/render.h"
 #define DPMS_SERVER
 #include "X11/extensions/dpms.h"
@@ -321,10 +322,18 @@ xf86_crtc_set_cursor_position (xf86CrtcPtr crtc, int x, int y)
      */
     if (crtc->transform_in_use)
     {
+	ScreenPtr	screen = scrn->pScreen;
+	xf86CursorScreenPtr ScreenPriv =
+	    (xf86CursorScreenPtr)dixLookupPrivate(&screen->devPrivates,
+						  xf86CursorScreenKey);
 	PictVector	v;
+	x += ScreenPriv->HotX;
+	y += ScreenPriv->HotY;
 	v.vector[0] = IntToxFixed (x); v.vector[1] = IntToxFixed (y); v.vector[2] = IntToxFixed(1);
 	PictureTransformPoint (&crtc->framebuffer_to_crtc, &v);
 	x = xFixedToInt (v.vector[0]); y = xFixedToInt (v.vector[1]);
+	x -= ScreenPriv->HotX;
+	y -= ScreenPriv->HotY;
     }
     else
     {
-- 
1.5.6.5




More information about the xorg mailing list