summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2011-01-17 12:37:41 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2011-05-20 14:28:59 +1000
commit548addb7017cdcaf3accee72c90c4671e03dd09c (patch)
tree97a4f24e7f0e1c685620ae5cca5f17b82b40fb2a
parentbd68738afc52268f039ff65a87937b54ee164a7d (diff)
downloadxf86-input-wacom-548addb7017cdcaf3accee72c90c4671e03dd09c.tar.gz
Clean up wcmVirtualPadding
-rw-r--r--src/xf86Wacom.c28
1 files changed, 20 insertions, 8 deletions
diff --git a/src/xf86Wacom.c b/src/xf86Wacom.c
index bcbb2e1..228e954 100644
--- a/src/xf86Wacom.c
+++ b/src/xf86Wacom.c
@@ -253,7 +253,10 @@ static int wcmInitArea(LocalDevicePtr local)
void wcmVirtualTabletPadding(LocalDevicePtr local)
{
WacomDevicePtr priv = (WacomDevicePtr)local->private;
- int i;
+
+ /* in multi-screen settings, add the left/top offset given the
+ * current multimonitor setup.
+ */
priv->leftPadding = 0;
priv->topPadding = 0;
@@ -262,16 +265,25 @@ void wcmVirtualTabletPadding(LocalDevicePtr local)
if ((priv->screen_no != -1) || (priv->twinview != TV_NONE) || (!priv->wcmMMonitor))
{
- i = priv->currentScreen;
+ double width, height; /* tablet width in device coords */
+ double sw, sh; /* screen width/height in screen coords */
+ double offset; /* screen x/y offset in screen coords */
+ int screen; /* screen number */
- priv->leftPadding = priv->bottomX - priv->topX -priv->tvoffsetX;
- priv->topPadding = priv->bottomY - priv->topY - priv->tvoffsetY;
+ screen = priv->currentScreen;
- priv->leftPadding = (int)(((double)priv->screenTopX[i] * priv->leftPadding )
- / ((double)(priv->screenBottomX[i] - priv->screenTopX[i])) + 0.5);
+ width = priv->bottomX - priv->topX -priv->tvoffsetX;
+ height = priv->bottomY - priv->topY - priv->tvoffsetY;
+ sw = priv->screenBottomX[screen] - priv->screenTopX[screen];
+ sh = priv->screenBottomY[screen] - priv->screenTopY[screen];
+
+ offset = priv->screenTopX[screen];
+
+ priv->leftPadding = (int)(offset * width / sw + 0.5);
+
+ offset = priv->screenTopY[screen];
- priv->topPadding = (int)((double)(priv->screenTopY[i] * priv->topPadding)
- / ((double)(priv->screenBottomY[i] - priv->screenTopY[i])) + 0.5);
+ priv->topPadding = (int)(offset * height / sh + 0.5);
}
DBG(10, priv, "x=%d y=%d \n", priv->leftPadding, priv->topPadding);
return;