Transform touchscreen coordinates according to randr rotation.

git-svn-id: svn://svn.openwrt.org/openwrt/packages@14559 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
lars 2009-02-18 22:15:20 +00:00
parent 800593d385
commit aedaf1fe56

View File

@ -0,0 +1,51 @@
commit b80f653bf33ed0ec23223a9877068cba97850ed1
Author: Lars-Peter Clausen <lars@metafoo.de>
Date: Wed Feb 18 23:08:14 2009 +0100
Transform touchscreen coordinates according to randr rotation.
diff --git a/src/tslib.c b/src/tslib.c
index 3eba078..6091006 100644
--- a/src/tslib.c
+++ b/src/tslib.c
@@ -48,6 +48,7 @@
#include <exevents.h> /* Needed for InitValuator/Proximity stuff */
#include <X11/keysym.h>
#include <mipointer.h>
+#include <randrstr.h>
#include <tslib.h>
@@ -128,6 +129,8 @@ static void ReadInput (LocalDevicePtr local)
struct ts_sample samp;
int ret;
int x,y;
+ ScrnInfoPtr pScrn = xf86Screens[priv->screen_num];
+ Rotation rotation = RRGetRotation(pScrn->pScreen);
ret = ts_read(priv->ts, &samp, 1);
@@ -154,6 +157,23 @@ static void ReadInput (LocalDevicePtr local)
default: break;
}
+ tmp_x = samp.x;
+
+ switch(rotation) {
+ case RR_Rotate_90:
+ samp.x = (priv->height - samp.y - 1) * priv->width / priv->height;
+ samp.y = tmp_x * priv->height / priv->width;
+ break;
+ case RR_Rotate_180:
+ samp.x = priv->width - samp.x - 1;
+ samp.y = priv->height - samp.y - 1;
+ break;
+ case RR_Rotate_270:
+ samp.x = samp.y * priv->width / priv->height;
+ samp.y = (priv->width - tmp_x - 1) * priv->height / priv->width;
+ break;
+ }
+
priv->lastx = samp.x;
priv->lasty = samp.y;
x = samp.x;