diff options
author | Peter Hutterer <peter.hutterer@who-t.net> | 2011-01-17 12:37:41 +1000 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2011-05-20 14:28:59 +1000 |
commit | 548addb7017cdcaf3accee72c90c4671e03dd09c (patch) | |
tree | 97a4f24e7f0e1c685620ae5cca5f17b82b40fb2a | |
parent | bd68738afc52268f039ff65a87937b54ee164a7d (diff) | |
download | xf86-input-wacom-548addb7017cdcaf3accee72c90c4671e03dd09c.tar.gz |
Clean up wcmVirtualPadding
-rw-r--r-- | src/xf86Wacom.c | 28 |
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; |