[PATCH libinput 18/26] tablet: rely on libwacom to give us the right tablet axes

Peter Hutterer peter.hutterer at who-t.net
Tue Feb 24 15:27:13 PST 2015


On Tue, Feb 24, 2015 at 12:48:47PM -0500, Benjamin Tissoires wrote:
> On Tue, Feb 24, 2015 at 1:21 AM, Peter Hutterer
> <peter.hutterer at who-t.net> wrote:
> > Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
> > ---
> >  src/evdev-tablet.c | 50 +++++++++++++++++++++++++++++++++-----------------
> >  1 file changed, 33 insertions(+), 17 deletions(-)
> >
> > diff --git a/src/evdev-tablet.c b/src/evdev-tablet.c
> > index 2b90e08..52742cf 100644
> > --- a/src/evdev-tablet.c
> > +++ b/src/evdev-tablet.c
> > @@ -408,7 +408,7 @@ copy_button_cap(const struct tablet_dispatch *tablet,
> >                 set_bit(tool->buttons, button);
> >  }
> >
> > -static void
> > +static int
> >  tool_set_bits_from_libwacom(const struct tablet_dispatch *tablet,
> >                             struct libinput_tool *tool)
> >  {
> > @@ -416,6 +416,8 @@ tool_set_bits_from_libwacom(const struct tablet_dispatch *tablet,
> >         WacomDeviceDatabase *db;
> >         const WacomStylus *s = NULL;
> >         int code;
> > +       WacomStylusType type;
> > +       int rc = 1;
> >
> >         db = libwacom_database_new();
> >         if (!db)
> > @@ -424,7 +426,8 @@ tool_set_bits_from_libwacom(const struct tablet_dispatch *tablet,
> >         if (!s)
> >                 goto out;
> >
> > -       if (libwacom_stylus_get_type(s) == WSTYLUS_PUCK) {
> > +       type = libwacom_stylus_get_type(s);
> > +       if (type == WSTYLUS_PUCK) {
> >                 for (code = BTN_LEFT;
> >                      code < BTN_LEFT + libwacom_stylus_get_num_buttons(s);
> >                      code++)
> > @@ -437,9 +440,29 @@ tool_set_bits_from_libwacom(const struct tablet_dispatch *tablet,
> >                 copy_button_cap(tablet, tool, BTN_TOUCH);
> >         }
> >
> > +       /* Eventually we want libwacom to tell us each axis on each device
> > +          separately. */
> > +       switch(type) {
> > +       case WSTYLUS_AIRBRUSH:
> > +       case WSTYLUS_MARKER:
> > +       case WSTYLUS_GENERAL:
> > +       case WSTYLUS_INKING:
> > +       case WSTYLUS_CLASSIC:
> > +       case WSTYLUS_STROKE:
> > +               copy_axis_cap(tablet, tool, LIBINPUT_TABLET_AXIS_PRESSURE);
> > +               copy_axis_cap(tablet, tool, LIBINPUT_TABLET_AXIS_DISTANCE);
> > +               copy_axis_cap(tablet, tool, LIBINPUT_TABLET_AXIS_TILT_X);
> > +               copy_axis_cap(tablet, tool, LIBINPUT_TABLET_AXIS_TILT_Y);
> > +               break;
> > +       default:
> > +               break;
> > +       }
> > +
> > +       rc = 0;
> >  out:
> >         if (db)
> >                 libwacom_database_destroy(db);
> > +       return rc;
> >  #endif
> >  }
> >
> > @@ -449,23 +472,20 @@ tool_set_bits(const struct tablet_dispatch *tablet,
> >  {
> >         enum libinput_tool_type type = tool->type;
> >
> > -       /* Determine the axis capabilities of the tool. Here's a break
> > -        * down of the heuristics used here:
> > -        * - The Wacom art pen supports all of the extra axes, along
> > -        *   with rotation
> > -        * - The Wacom airbrush supports a wheel with a ~90 deg
> > -        *   range.
> > -        * - All of normal pens and the airbrush support all of the
> > -        *   extra axes if the tablet can report them
> > -        * - All of the mouse-like devices don't report any of
> > -        *   the extra axes except for rotation (calculated from tilt x/y).
> > +#if HAVE_LIBWACOM
> > +       if (tool_set_bits_from_libwacom(tablet, tool) == 0)
> > +               return;
> > +#endif
> > +       /* If we don't have libwacom, we simply copy any axis we have on the
> > +          tablet onto the tool. Except we know that mice only have rotation
> > +          anyway.
> >          */
> >         switch (type) {
> > +       case LIBINPUT_TOOL_AIRBRUSH:
> >         case LIBINPUT_TOOL_PEN:
> >         case LIBINPUT_TOOL_ERASER:
> >         case LIBINPUT_TOOL_PENCIL:
> >         case LIBINPUT_TOOL_BRUSH:
> > -       case LIBINPUT_TOOL_AIRBRUSH:
> 
> nitpicking: no need to move around LIBINPUT_TOOL_AIRBRUSH.

fixed, thanks.

Cheers,
   Peter


> 
> >                 copy_axis_cap(tablet, tool, LIBINPUT_TABLET_AXIS_PRESSURE);
> >                 copy_axis_cap(tablet, tool, LIBINPUT_TABLET_AXIS_DISTANCE);
> >                 copy_axis_cap(tablet, tool, LIBINPUT_TABLET_AXIS_TILT_X);
> > @@ -475,9 +495,6 @@ tool_set_bits(const struct tablet_dispatch *tablet,
> >                 break;
> >         }
> >
> > -#if HAVE_LIBWACOM
> > -       tool_set_bits_from_libwacom(tablet, tool);
> > -#else
> >         /* If we don't have libwacom, copy all pen-related ones from the
> >            tablet vs all mouse-related ones */
> >         switch (type) {
> > @@ -501,7 +518,6 @@ tool_set_bits(const struct tablet_dispatch *tablet,
> >         default:
> >                 break;
> >         }
> > -#endif
> >  }
> >
> >  static struct libinput_tool *
> > --
> > 2.1.0
> >
> > _______________________________________________
> > 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