RFC: multitouch support v2

Kristian Høgsberg krh at bitplanet.net
Thu Dec 22 12:55:31 PST 2011


On Wed, Dec 21, 2011 at 12:34 PM, Tiago Vignatti
<vignatti at freedesktop.org> wrote:
> From: Tiago Vignatti <tiago.vignatti at intel.com>
>
> Hi,
>
> Following Kristian suggestions, I updated the patchset with the following:
> - driver now accumulates input coordinates to send along touch_down
> - updated the protocol touch_down event with surface field, meaning the focus
>  surface of a touch device
> - compositor now uses a touch_focus pointer (self explicative), where it's
>  picked when the first finger is down; all further events go there until it
>  gets released
> - not doing pointer emulation for now; that will come next.
>
> I still using the cairo image as PoC. So the client surfaces now are picked
> correctly, giving a quite smooth effect for pinch/zoom gesture introduced on
> the last patches. My tree rebased with latest master branch is here:
>
>    http://cgit.freedesktop.org/~vignatti/wayland-demos/log/?h=multitouch-v2
>
> I'll be in vacation for two weeks, starting from tomorrow. See y'all in the
> next year and enjoy the holiday. Peace!

There are still a lot of problems with these patches, but I want to
move forward on this.  I picked the first two patches and edited them
to get the basics into shape, then added a few fixes on top.   The
evdev part was mostly fine, but the event delivery had a number of
problems:

 - we can't overwrite device->x,y, that's the pointer position
 - we have to deliver the surfaces relative coordinates, not the
global coordinates to clients
 - touch_up was never delivered since you clear touch_focus_resource
just before testing it for NULL

Moreover, we need to track each touchpoint position in the evdev part
so that when we get only ABS_MT_POSITION_X (or Y), we have the other
coordinate.  Finally, we need to handle losing both the touch focus
surface or the input device client resource without crashing.

Most of these issues are obvious if you look at the event stream (use
WAYLAND_DEBUG=1) and the missing transformation to surface coordinates
would have been clear with a simple multi-touch-paint test client,
like the one I added.

Kristian


More information about the wayland-devel mailing list