[PATCH libinput v2 0/4] touchpad gestures support

Peter Hutterer peter.hutterer at who-t.net
Sun Apr 26 21:01:27 PDT 2015


On Fri, Apr 24, 2015 at 02:39:07PM +0200, Carlos Garnacho wrote:
> On Fri, Apr 24, 2015 at 1:49 PM, Hans de Goede <hdegoede at redhat.com> wrote:
> > Hi,
> >
> > On 24-04-15 13:39, Carlos Garnacho wrote:
> >>
> >> Hey Hans :),
> >>
> >> On jue, 2015-03-26 at 10:04 +0100, Hans de Goede wrote:
> >>>
> >>> Hi All,
> >>>
> >>> Here is v2 of my touchpad gestures support patch series, changes
> >>> since v1:
> >>> - Merge the gesture capability flag and event-debug patched into
> >>>    the "touchpad: Add an API for touchpad gesture events"
> >>> - Update the swipe and pinch/rotate implementations to work with the
> >>> new
> >>>    typesafe device and normalized coordinates (rebased on latest
> >>> master),
> >>>    this results in a nice cleanup
> >>
> >>
> >> During the last days I played with these last patches on Clutter, and
> >> found the gestures to work nicely. I gathered some observations though:
> >>
> >>        * Higher level gesture implementations usually have a "cancel"
> >>          signal/vfunc, it feels kind of weird not being able to fully
> >>          map the behaviors. I thought about some "this gesture maybe
> >>          continues onto something else" flag in *_END events, although
> >>          I see this working better on touchpoints being added than
> >>          lifted, given how things seem to work. Anyway, just a remark,
> >>          I see cancellation being more important in the protocol
> >>          additions this would bring, when this involves client vs
> >>          compositor handling.
> >
> >
> > As discussed at Fosdem, adding a flag to indicate of the gesture
> > ended normally (all fingers lifted) or by transitioning into something
> > else is easy code wise. If you see a need for that I can do so for v3
> > of the patch-set.
> 
> That would be great, I guess my concern is mostly being consistent
> with wl_touch.cancel, and being able to undo ongoing actions in
> clients if the compositor is taking over.
> 
> >
> >>        * I think it is a bit unfortunate that distance in pinch
> >>          gestures is relative. Higher level equivalent "zoom" gestures
> >>          usually offer absolute scale values (taking the initial
> >>          distance as 1x). We do lack some information there to
> >>          translate from one to the other, I guess either knowing the
> >>          initial distance (does pointer acceleration apply here?), or
> >>          offering similar info right away would be nice.
> >
> >
> > I've been ping-ponging between giving deltas or an absolute distance
> > in mm. I can change the patch-set to report a distance in mm instead
> > of delta from the previous distance, with the caveat that on some
> > touchpads we do not know the resolution so the unit there will
> > not be mm, but instead unknown stepsize.
> 
> Hmm, that's indeed a drawback. I guess having an additional
> libinput_event_gesture_get_scale() is not as stateless as you'd want?
> If we have to choose between deltas or abs distance, I feel the latter
> is most useful though...

right, so if I read this right what you want is have the first gesture event
with a scale value of 1.0 and then every subsequent one as a fraction or
multiple of that initial value. so 0.5 means the fingers moved together by
50%, 2.0 would mean twice as far apart now.
that'd easy enough to add and be independent of the resolution, though it
obviously can't work on swipe gestures.

Cheers,
   Peter

 
> >
> >>        * From trying things out, I found that if I pinch the fingers
> >>          too close (X1 Carbon 1st gen here, 2fg touchpad), and then
> >>          move them together around, the pinch gesture would report
> >>          distance jumps (self-cancelled overall though), In evemu
> >>          -record traces I see 2 separate tracking IDs, and didn't seem
> >>          to see such wild coordinate jumps, so I wonder if we can do
> >>          something about it, I can investigate further about it if you
> >>          want.
> >
> >
> > The distance events are pretty raw (unfiltered) what you're seeing can
> > happen if we get touch1 moves, sync, touch2 moves, sync. Are you seeing
> > that in the evemu-record traces?
> 
> Yeah indeed, I see that happening sometimes. I thought the last
> state/values for the unchanged touchpount would apply then.
> 
> > I can try to add some averaging to the
> > distance like we do with pointer move events, or I can keep giving you
> > the raw events and you can filter yourself ...
> >
> > Downside of pushing the filtering into the toolkit is that each toolkit
> > needs to redo it, so I guess it would be better to do it at the
> > libinput level.
> 
> I'm much undecided myself on that regard too. Raw touchpoints would
> map much better to the way gesture implementations out there already
> work, I'm finding myself adding internal interfaces and doing
> touch-tracking vs gesture-event parallel handling in those, which is
> feasible, but kind of awkward. I guess distance averaging is less
> intrusive to the way you designed this.
> 
> Cheers,
>   Carlos
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel
> 


More information about the wayland-devel mailing list