[PATCH libinput 18/26] tablet: rely on libwacom to give us the right tablet axes
Peter Hutterer
peter.hutterer at who-t.net
Mon Feb 23 22:21:21 PST 2015
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:
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
More information about the wayland-devel
mailing list