input events: add event filter to improve capture
authorAndrew Chadwick <andrewc-git@piffle.org>
Sun, 20 Oct 2013 02:13:11 +0000 (03:13 +0100)
committerAndrew Chadwick <andrewc-git@piffle.org>
Wed, 23 Oct 2013 00:33:17 +0000 (01:33 +0100)
commitd9fd3bea655ec3dc2311eff732a04670f67ee585
treee864a8abf9b5b2829c48720cbd3f47eb40e3bbf8
parent8fcbfd48b7ebcec2ebe7f42045b81f0244fe753b
input events: add event filter to improve capture

Add an experimental GDK event filter to capture events before GDK itself
can motion-compress them and thus break our drawing accuracy. See

https://gna.org/bugs/?21003
https://gna.org/bugs/?20822
https://bugzilla.gnome.org/show_bug.cgi?id=702392

Good coding practice dictates that we don't try to do too much inside this
fairly horrid little hack, so we only queue the pointer position and the
timestamp. For all the events GDK 3.8+ drops on the floor during a frame
clock cycle (which the filter now captures), we use the tilt and pressure
info from the event on the event that did make it through. Interpolating
would be better.

Before: 50-60 events/second for all devices.
After: 200 events/second with an Intuos 5. 80 with a touchpad.

This hack only works on X11 platforms right now
gui/canvasevent.py
lib/eventhack.hpp [new file with mode: 0644]
lib/mypaintlib.hpp
lib/mypaintlib.i