<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, May 23, 2014 at 2:19 AM, Peter Hutterer <span dir="ltr"><<a href="mailto:peter.hutterer@who-t.net" target="_blank">peter.hutterer@who-t.net</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On Fri, May 23, 2014 at 01:40:49AM +0200, Carlos Garnacho wrote:<br>
> Hi,<br>
><br>
> First of all, I'm sorry I dropped the ball this long. It's great to see<br>
> you've been doing some progress.<br>
><br>
> On jue, 2014-05-22 at 01:17 -0400, Chandler Paul wrote:<br>
> > Hi! Sorry this took so long to write, I've been spending a lot of my<br>
> > time recently trying to understand the libinput code and all of that<br>
> > good stuff, and I wanted to make sure I had a decent understanding of it<br>
> > before I actually wrote up a response.<br>
> ><br>
> > On Mon, 2014-04-21 at 19:11 +0200, Carlos Garnacho wrote:<br>
> > > Hey there!,<br>
> > ><br>
> > > Here's a few patches to have libinput handle events from tablets,<br>
> > > these devices are basically pointer devices, with a varying range<br>
> > > of extra buttons (either stylus or "pad" buttons), and extra ABS_*<br>
> > > axes. These devices also often offer information about the stylus<br>
> > > in use, and its BTN_TOOL_* codes.<br>
> > ><br>
> > > So I've gone for reusing and extending libinput_event_pointer, adding<br>
> > > extra libinput_pointer_axis values, and adding an "axis_frame" event<br>
> > > to mark the end of a set of simultaneous axis changes, and a "tool_update"<br>
> > > event to mark tool changes (and delimit proximity). These features are<br>
> > > only triggered if a new LIBINPUT_DEVICE_CAP_STYLUS capability is set.<br>
> > I'm with Peter on splitting these up. It seems kind of inconsistent with<br>
> > the rest of libinput (with what I've gathered, anyway). A<br>
> > tablet-specific event sounds interesting too, but I feel like<br>
> > compressing all of the axis changes into. For now I'm going to work on<br>
> > having all the axis changes reported as separate POINTER_AXIS events.<br>
><br>
> I'm not against making this a separate set of event types. I would<br>
> advise though against attempting to compress axis changes into a single<br>
> event, it puts certain processing burden on clients, and most of those<br>
> not always want as much data.<br>
<br>
</div></div>can you elaborate on what the processing burdens are?<br>
<br>
there are two options for handling compressed events in the library: one is<br>
the approach XI2 uses, or always guaranteeing full data.<br>
in the XI2 approach, we only forward data that is set in the event which<br>
puts some burden on the client to calculate and keep track of the data. I<br>
don't think that's the best aproach for libinput. Rather, we should<br>
guarantee that all axes are always set to the current value, so most clients<br>
could then just call get_pressure() to get the pressure, regardles of<br>
whether that changed with that event. if needed, we can export some extra<br>
mask to tell if a particular value was updated, but just having the full<br>
event should take some burden away.<br><div class=""></div></blockquote><div><br></div><div>The target use case for libinput is Wayland compositors, not clients directly. Wayland's tablet protocol sends events when values change -- edge triggered, not level triggered.<br>
</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="">
> Independently of this being a separate set of events, IMO the axis frame<br>
> event is still useful for pointer events, this might help compressing<br>
> the processing of dx/dy for scrolling in clients for example, instead of<br>
> processing 2 events that queue the redraw of different areas, some<br>
> unneeded in the end.<br>
<br>
</div>I agree, this is something that has value.<br>
<br>
Cheers,<br>
   Peter<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
<br>
> > > Caveats:<br>
> > ><br>
> > > * Many of these devices have also tactile strips or wheels, but these are<br>
> > >   unhandled so far... On the devices I've got available for testing, current<br>
> > >   kernel support seems varyingly inconsistent:<br>
> > ><br>
> > >   - One device has 2 strips, which report on ABS_RX/RY (radial??). Min/max<br>
> > >     are 0..4096, but the reported values are 1,2,4,8,16... So effectively<br>
> > >     a log2 scale, or more graphically a bit shifting over a bunch of 0s,<br>
> > >     which is somewhat more resembling to the physical action on the strip.<br>
> > Since I'm on a deadline for this and making changes to this in the<br>
> > kernel would take too long, I don't think I'm going to advocate for<br>
> > changing this behavior right now. Although I do agree that eventually it<br>
> > should be changed. Graphically, a bit moving across a field like that<br>
> > makes sense, but I think that would be a difficult value to make<br>
> > practical use of in an application without changing it to a simple 1-13<br>
> > value. If I get far enough that I can start implementing support for<br>
> > tactile strips and all those other fancy features some of these tablets<br>
> > have I might have it convert the values for tactile strips like that to<br>
> > something more usable by default and leave the other axes as-is. I'm<br>
> > curious to hear Ping and Jason's opinion on this though, and what kind<br>
> > of advantages<br>
> ><br>
> > >   - Another device has one wheel, reported through ABS_WHEEL. Even though<br>
> > >     min/max are reported as [0..1023], on interaction it goes [0..71] (funky<br>
> > >     range too)<br>
> > ><br>
> > >   We could just forward this as-is, but seems hindering enough to do anything<br>
> > >   useful with those unless that behavior is corrected.<br>
> > ><br>
> > >   When supported, IMO it'd make sense to have those axes behave similar to<br>
> > >   scroll axes, so the axis value increments or decrements depending on the<br>
> > >   direction. I'm not sure if there would be cases where the absolute value<br>
> > >   matters here?<br>
> > ><br>
> > > * One thing worth noting is that axes are currently normalized, to [-1..1]<br>
> > >   for stylus tilt, and [0..1] for everything else. I remember Peter's<br>
> > >   tablet wayland protocol proposal basically forwarded input_absinfo, this<br>
> > >   might not be fully compatible with that, although TBH I'm unsure<br>
> > >   clamping/normalization should take place so high in the stack...<br>
> > I'm with Peter on this actually. If the axes were used for something<br>
> > else I might approve of normalization in libinput but I think having<br>
> > absolute values fits more of the use cases for the extra axes found on<br>
> > many tablets, especially since Ping said that some of Wacom's in-house<br>
> > applications actually need these. I do think however, that maybe we<br>
> > should consider clamping axis values with libinput even if we don't<br>
> > normalize the axes by default.<br>
> ><br>
> > I've forked libinput and I have a branch where I'm fixing up the patches<br>
> > Carlos sent in based on the feedback from Peter. You can find it here:<br>
> ><br>
> >     <a href="https://github.com/Lyude1337/libinput/tree/carlos_cleanup" target="_blank">https://github.com/Lyude1337/libinput/tree/carlos_cleanup</a><br>
><br>
> Thanks for the cleanup and appliying the recommended fixes, the changes<br>
> look good so far.<br>
><br>
> ><br>
> > The history is messy on this, but once this is ready to get sent in as<br>
> > actual patches I'll be rebasing the history.<br>
> ><br>
> > Right now I've removed normalization from my branch, but if someone<br>
> > brings up a good reason to actually have libinput handle that then I can<br>
> > revert the change.<br>
><br>
> I agree, this should just probably be some helper code.<br>
><br>
> Cheers,<br>
>   Carlos<br>
><br>
_______________________________________________<br>
wayland-devel mailing list<br>
<a href="mailto:wayland-devel@lists.freedesktop.org">wayland-devel@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/wayland-devel" target="_blank">http://lists.freedesktop.org/mailman/listinfo/wayland-devel</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>  Jasper<br>
</div></div>