From 3985d423204217a1f072fa6e0145cba547f79a97 Mon Sep 17 00:00:00 2001 From: Søren Hauberg Date: Wed, 1 Oct 2008 11:07:57 +0930 Subject: Add support for axis inversion. --- src/evdev.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) (limited to 'src/evdev.c') diff --git a/src/evdev.c b/src/evdev.c index 149f95d..b24dc50 100644 --- a/src/evdev.c +++ b/src/evdev.c @@ -348,8 +348,13 @@ EvdevReadInput(InputInfoPtr pInfo) } } - if (dx != 0 || dy != 0) + if (dx != 0 || dy != 0) { + if (pEvdev->invert_x) + dx *= -1; + if (pEvdev->invert_y) + dy *= -1; xf86PostMotionEvent(pInfo->dev, FALSE, 0, 2, dx, dy); + } /* * Some devices only generate valid abs coords when BTN_DIGI is @@ -361,8 +366,15 @@ EvdevReadInput(InputInfoPtr pInfo) * just works. */ if (abs && pEvdev->tool) { - xf86PostMotionEvent(pInfo->dev, TRUE, 0, 2, - pEvdev->abs_x, pEvdev->abs_y); + int abs_x, abs_y; + abs_x = pEvdev->abs_x; + abs_y = pEvdev->abs_y; + if (pEvdev->invert_x) + abs_x = pEvdev->max_x - abs_x; + if (pEvdev->invert_y) + abs_y = pEvdev->max_y - abs_y; + + xf86PostMotionEvent(pInfo->dev, TRUE, 0, 2, abs_x, abs_y); } } @@ -1337,6 +1349,9 @@ EvdevPreInit(InputDriverPtr drv, IDevPtr dev, int flags) pEvdev->noXkb = noXkbExtension; /* parse the XKB options during kbd setup */ + pEvdev->invert_x = xf86SetBoolOption(pInfo->options, "InvertX", FALSE); + pEvdev->invert_y = xf86SetBoolOption(pInfo->options, "InvertY", FALSE); + if (EvdevProbe(pInfo)) { close(pInfo->fd); xf86DeleteInput(pInfo, 0); -- cgit v1.2.3