commit b80f653bf33ed0ec23223a9877068cba97850ed1 Author: Lars-Peter Clausen 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 /* Needed for InitValuator/Proximity stuff */ #include #include +#include #include @@ -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 = rrGetScrPriv (pScrn->pScreen) ? RRGetRotation(pScrn->pScreen) : RR_Rotate_0; 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;