On Tue, Feb 24, 2015 at 1:21 AM, Peter Hutterer <peter.hutte...@who-t.net> wrote: > Signed-off-by: Peter Hutterer <peter.hutte...@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. > 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@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/wayland-devel _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel