xserver/dix
Peter Hutterer d8a09a4b15 dix: pre-scale relative events from abs devices to desktop ratio (#31636)
Absolute devices may send relative events depending on the mode (synaptics
by default, wacom per option). The relative events are added to the previous
position, converted into device coordinates and then scaled into desktop
coordinates for pointer movement.

Because the device range must be mapped into the desktop coordinate range,
this results in uneven scaling depending dimensions, e.g. on a setup with
width == 2 * height, a relative movement of 10/10 in device coordinates
results in a cursor movement of 20/10 (+ acceleration)

Other commonly user-visible results:
* the touchpad changing acceleration once an external monitor as added.
* drawing a circle on a wacom tablet in relative mode gives an ellipsis in
  the same ratio as the desktop dimensions.

Solution: pre-scale the incoming relative x/y coordinates by width/height
ratio of the total desktop size. Then add them to the previous
coordinates and scale back with the previous mapping, which will undo the
pre-scaling and give us the right movement.

X.Org Bug 31636 <http://bugs.freedesktop.org/show_bug.cgi?id=31636>

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Keith Packard <keithp@keithp.com>
(cherry picked from commit 61a99aff9d)
2013-02-18 12:09:55 +10:00
..
.gitignore dix and os: gitignore dix.O and os.O 2011-09-23 17:14:47 -07:00
atom.c Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
buildatoms XFree86 4.3.0.1 2003-11-14 16:49:22 +00:00
BuiltInAtoms R6.6 is the Xorg base-line 2003-11-14 15:54:54 +00:00
colormap.c Use C99 designated initializers in dix Events 2012-07-09 22:52:30 -07:00
cursor.c Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
devices.c End physically active touches when device is disabled 2012-11-07 09:58:38 +10:00
dispatch.c dix: free default colormap before screen deletion 2012-09-04 16:15:52 +10:00
dispatch.h Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
dixfonts.c Use C99 designated initializers in dix Replies 2012-07-09 19:58:29 -07:00
dixutils.c dix: introduce gpu screens. (v5) 2012-07-06 10:35:13 +01:00
enterleave.c Use C99 designated initializers in dix Events 2012-07-09 22:52:30 -07:00
enterleave.h dix: Move DeviceFocusEvent from Xi into enterleave.c 2012-05-17 08:50:44 +10:00
eventconvert.c Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
events.c dix: remove already-moved hunk 2013-01-21 13:52:49 +10:00
extension.c Use C99 designated initializers in dix Replies 2012-07-09 19:58:29 -07:00
ffs.c Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
gc.c Fix up formatting of initializers for arrays of structs 2012-08-06 15:22:53 -07:00
getevents.c dix: pre-scale relative events from abs devices to desktop ratio (#31636) 2013-02-18 12:09:55 +10:00
globals.c os: Add -displayfd option 2012-05-01 11:36:30 +10:00
glyphcurs.c Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
grabs.c dix: don't copy the wrong event mask when activating a passive grab 2013-01-08 12:35:42 +10:00
initatoms.c Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
inpututils.c Use C99 designated initializers in dix Events 2012-07-09 22:52:30 -07:00
main.c Close GPU screens before core screens 2012-08-14 17:13:52 -07:00
Makefile.am input: add a TouchClassRec to the devices 2011-12-19 09:08:36 +10:00
pixmap.c pixmap: have slave pixmap take a reference on master pixmap 2012-08-07 08:25:06 +10:00
privates.c privates: Resize GPU screen-specific privates too 2012-07-09 16:30:24 -07:00
property.c Use C99 designated initializers in dix Events 2012-07-09 22:52:30 -07:00
protocol.txt Add DRI2 requests to protocol.txt 2009-08-28 23:29:05 -04:00
ptrveloc.c dix: indentation fixes for pointer acceleration 2012-05-16 10:59:35 +10:00
region.c Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
registry.c Use C99 designated initializers in dix registry 2012-07-09 22:52:30 -07:00
resource.c dix: add reference count of the resource to ResourceSizeRec 2012-04-18 12:49:11 +03:00
selection.c Use C99 designated initializers in dix Events 2012-07-09 22:52:30 -07:00
swaprep.c Remove unneccesary casts from WriteToClient calls 2012-07-09 19:12:56 -07:00
swapreq.c Use C99 designated initializers in dix Events 2012-07-09 22:52:30 -07:00
tables.c Make indentation of dix/tables.c much more consistent and readable 2012-08-06 15:22:53 -07:00
touch.c dix: add resource type to touch listeners 2013-01-21 13:52:46 +10:00
window.c When resetting device idle time, reset XIAll(Master)Devices too (#56649) 2012-12-05 17:36:02 +10:00
Xserver-dtrace.h.in dix: add dtrace probes to input API 2012-03-22 11:33:42 +10:00
Xserver.d dix: add dtrace probes to input API 2012-03-22 11:33:42 +10:00