Part of the big revamp to get rid of libinput_tablet_tool_axis and
replace it with a set of axis-specific APIs.

Only the rel wheel has true delta events, everything else is a delta
calculated by libinput based on the previous position. Since we supply that
position to the callers anyway, they can determinte that delta themselves
where needed.

Signed-off-by: Peter Hutterer <[email protected]>
---
 src/libinput.c      |  47 +++------------------
 src/libinput.h      |  37 +++++++---------
 src/libinput.sym    |   4 +-
 test/tablet.c       | 119 ++--------------------------------------------------
 tools/event-debug.c |  57 ++++++++-----------------
 5 files changed, 43 insertions(+), 221 deletions(-)

diff --git a/src/libinput.c b/src/libinput.c
index 2f797dc..b1bced0 100644
--- a/src/libinput.c
+++ b/src/libinput.c
@@ -1138,12 +1138,8 @@ libinput_event_tablet_tool_get_slider_position(struct 
libinput_event_tablet_tool
 }
 
 LIBINPUT_EXPORT double
-libinput_event_tablet_tool_get_axis_delta(struct libinput_event_tablet_tool 
*event,
-                                    enum libinput_tablet_tool_axis axis)
+libinput_event_tablet_tool_get_wheel_delta(struct libinput_event_tablet_tool 
*event)
 {
-       struct evdev_device *device =
-               (struct evdev_device *) event->base.device;
-
        require_event_type(libinput_event_get_context(&event->base),
                           event->base.type,
                           0,
@@ -1151,30 +1147,12 @@ libinput_event_tablet_tool_get_axis_delta(struct 
libinput_event_tablet_tool *eve
                           LIBINPUT_EVENT_TABLET_TOOL_TIP,
                           LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY);
 
-       switch(axis) {
-               case LIBINPUT_TABLET_TOOL_AXIS_X:
-                       return evdev_convert_to_mm(device->abs.absinfo_x,
-                                                  event->deltas[axis]);
-               case LIBINPUT_TABLET_TOOL_AXIS_Y:
-                       return evdev_convert_to_mm(device->abs.absinfo_y,
-                                                  event->deltas[axis]);
-               case LIBINPUT_TABLET_TOOL_AXIS_DISTANCE:
-               case LIBINPUT_TABLET_TOOL_AXIS_PRESSURE:
-               case LIBINPUT_TABLET_TOOL_AXIS_TILT_X:
-               case LIBINPUT_TABLET_TOOL_AXIS_TILT_Y:
-               case LIBINPUT_TABLET_TOOL_AXIS_ROTATION_Z:
-               case LIBINPUT_TABLET_TOOL_AXIS_SLIDER:
-               case LIBINPUT_TABLET_TOOL_AXIS_REL_WHEEL:
-                       return event->deltas[axis];
-               default:
-                       return 0;
-       }
+       return event->deltas[LIBINPUT_TABLET_TOOL_AXIS_REL_WHEEL];
 }
 
-LIBINPUT_EXPORT double
-libinput_event_tablet_tool_get_axis_delta_discrete(
-                                     struct libinput_event_tablet_tool *event,
-                                     enum libinput_tablet_tool_axis axis)
+LIBINPUT_EXPORT int
+libinput_event_tablet_tool_get_wheel_delta_discrete(
+                                     struct libinput_event_tablet_tool *event)
 {
        require_event_type(libinput_event_get_context(&event->base),
                           event->base.type,
@@ -1183,20 +1161,7 @@ libinput_event_tablet_tool_get_axis_delta_discrete(
                           LIBINPUT_EVENT_TABLET_TOOL_TIP,
                           LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY);
 
-       switch(axis) {
-               case LIBINPUT_TABLET_TOOL_AXIS_X:
-               case LIBINPUT_TABLET_TOOL_AXIS_Y:
-               case LIBINPUT_TABLET_TOOL_AXIS_DISTANCE:
-               case LIBINPUT_TABLET_TOOL_AXIS_PRESSURE:
-               case LIBINPUT_TABLET_TOOL_AXIS_TILT_X:
-               case LIBINPUT_TABLET_TOOL_AXIS_TILT_Y:
-               case LIBINPUT_TABLET_TOOL_AXIS_ROTATION_Z:
-               case LIBINPUT_TABLET_TOOL_AXIS_SLIDER:
-               case LIBINPUT_TABLET_TOOL_AXIS_REL_WHEEL:
-                       return event->deltas_discrete[axis];
-               default:
-                       return 0;
-       }
+       return event->deltas_discrete[LIBINPUT_TABLET_TOOL_AXIS_REL_WHEEL];
 }
 
 LIBINPUT_EXPORT double
diff --git a/src/libinput.h b/src/libinput.h
index 7403a76..786f869 100644
--- a/src/libinput.h
+++ b/src/libinput.h
@@ -1626,39 +1626,30 @@ libinput_event_tablet_tool_get_slider_position(struct 
libinput_event_tablet_tool
 /**
  * @ingroup event_tablet
  *
- * Return the delta for a given axis for a tablet. The interpretation of the
- * value is axis-dependent:
- * - @ref LIBINPUT_TABLET_TOOL_AXIS_REL_WHEEL - A relative wheel on the tool,
- *   similar or equivalent to a mouse wheel. The value is a delta from the
- *   device's previous position, in degrees.
- * For all other axes, see libinput_event_tablet_tool_get_axis_value() for
- * details.
+ * Return the delta for the wheel in degrees.
  *
  * @param event The libinput tablet event
- * @param axis The axis to retrieve the value of
- * @return The delta to the previous axis value
+ * @return The delta of the wheel, in degrees, compared to the last event
+ *
+ * @see libinput_event_tablet_tool_get_wheel_delta_discrete
  */
 double
-libinput_event_tablet_tool_get_axis_delta(struct libinput_event_tablet_tool 
*event,
-                                         enum libinput_tablet_tool_axis axis);
+libinput_event_tablet_tool_get_wheel_delta(
+                                  struct libinput_event_tablet_tool *event);
 
 /**
  * @ingroup event_tablet
  *
- * Return the delta for a given axis for a tablet in discrete steps.
- * How a value translates into a discrete step depends on the axis:
- * - @ref LIBINPUT_TABLET_TOOL_AXIS_REL_WHEEL - the returned value is the 
number
- * of physical mouse wheel clicks.
- * For all other axes, this function returns 0.
- *
+ * Return the delta for the wheel in discrete steps (e.g. wheel clicks).
+
  * @param event The libinput tablet event
- * @param axis The axis to retrieve the value of
- * @return The delta to the previous axis value in discrete steps
+ * @return The delta of the wheel, in discrete steps, compared to the last 
event
+ *
+ * @see libinput_event_tablet_tool_get_wheel_delta_discrete
  */
-double
-libinput_event_tablet_tool_get_axis_delta_discrete(
-                                     struct libinput_event_tablet_tool *event,
-                                     enum libinput_tablet_tool_axis axis);
+int
+libinput_event_tablet_tool_get_wheel_delta_discrete(
+                                   struct libinput_event_tablet_tool *event);
 
 /**
  * @ingroup event_tablet
diff --git a/src/libinput.sym b/src/libinput.sym
index da98ac5..ddfe81d 100644
--- a/src/libinput.sym
+++ b/src/libinput.sym
@@ -202,8 +202,8 @@ LIBINPUT_TABLET_SUPPORT {
        libinput_event_tablet_tool_get_tilt_y;
        libinput_event_tablet_tool_get_rotation;
        libinput_event_tablet_tool_get_slider_position;
-       libinput_event_tablet_tool_get_axis_delta;
-       libinput_event_tablet_tool_get_axis_delta_discrete;
+       libinput_event_tablet_tool_get_wheel_delta;
+       libinput_event_tablet_tool_get_wheel_delta_discrete;
        libinput_event_tablet_tool_get_base_event;
        libinput_event_tablet_tool_get_button;
        libinput_event_tablet_tool_get_button_state;
diff --git a/test/tablet.c b/test/tablet.c
index 0e2d657..6f9cd3d 100644
--- a/test/tablet.c
+++ b/test/tablet.c
@@ -903,107 +903,6 @@ START_TEST(motion)
 }
 END_TEST
 
-START_TEST(motion_delta)
-{
-       struct litest_device *dev = litest_current_device();
-       struct libinput *li = dev->libinput;
-       struct libinput_event_tablet_tool *tablet_event;
-       struct libinput_event *event;
-       double x1, y1, x2, y2, dist1, dist2;
-       double delta;
-       struct axis_replacement axes[] = {
-               { ABS_DISTANCE, 10 },
-               { -1, -1 }
-       };
-
-       litest_drain_events(li);
-
-       litest_tablet_proximity_in(dev, 5, 100, axes);
-       libinput_dispatch(li);
-
-       litest_wait_for_event_of_type(li,
-                                     LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY,
-                                     -1);
-
-       event = libinput_get_event(li);
-       tablet_event = libinput_event_get_tablet_tool_event(event);
-       x1 = libinput_event_tablet_tool_get_x(tablet_event);
-       y1 = libinput_event_tablet_tool_get_y(tablet_event);
-       dist1 = libinput_event_tablet_tool_get_distance(tablet_event);
-       libinput_event_destroy(event);
-
-       axes[0].value = 40;
-       litest_tablet_motion(dev, 40, 100, axes);
-
-       litest_wait_for_event_of_type(li,
-                                     LIBINPUT_EVENT_TABLET_TOOL_AXIS,
-                                     -1);
-       event = libinput_get_event(li);
-       tablet_event = libinput_event_get_tablet_tool_event(event);
-       x2 = libinput_event_tablet_tool_get_x(tablet_event);
-       y2 = libinput_event_tablet_tool_get_y(tablet_event);
-       dist2 = libinput_event_tablet_tool_get_distance(tablet_event);
-
-       delta = libinput_event_tablet_tool_get_axis_delta(tablet_event,
-                                                 LIBINPUT_TABLET_TOOL_AXIS_X);
-       litest_assert_double_eq(delta, x2 - x1);
-       delta = libinput_event_tablet_tool_get_axis_delta(tablet_event,
-                                                 LIBINPUT_TABLET_TOOL_AXIS_Y);
-       litest_assert_double_eq(delta, y2 - y1);
-       delta = libinput_event_tablet_tool_get_axis_delta(tablet_event,
-                                                 
LIBINPUT_TABLET_TOOL_AXIS_DISTANCE);
-       litest_assert_double_eq(delta, dist2 - dist1);
-
-       libinput_event_destroy(event);
-}
-END_TEST
-
-START_TEST(motion_delta_partial)
-{
-       struct litest_device *dev = litest_current_device();
-       struct libinput *li = dev->libinput;
-       struct libinput_event_tablet_tool *tablet_event;
-       struct libinput_event *event;
-       double dx, dy, ddist;
-       struct axis_replacement axes[] = {
-               { ABS_DISTANCE, 10 },
-               { -1, -1 }
-       };
-
-       if (!libevdev_has_event_code(dev->evdev, EV_ABS, ABS_DISTANCE))
-               return;
-
-       litest_tablet_proximity_in(dev, 5, 100, axes);
-       litest_tablet_motion(dev, 40, 100, axes);
-       litest_drain_events(li);
-
-       axes[0].value = 40;
-       litest_tablet_motion(dev, 40, 100, axes);
-       litest_wait_for_event_of_type(li,
-                                     LIBINPUT_EVENT_TABLET_TOOL_AXIS,
-                                     -1);
-       event = libinput_get_event(li);
-       tablet_event = libinput_event_get_tablet_tool_event(event);
-
-       ck_assert(!libinput_event_tablet_tool_x_has_changed(tablet_event));
-       dx = libinput_event_tablet_tool_get_axis_delta(tablet_event,
-                                               LIBINPUT_TABLET_TOOL_AXIS_X);
-       litest_assert_double_eq(dx, 0.0);
-
-       ck_assert(!libinput_event_tablet_tool_y_has_changed(tablet_event));
-       dy = libinput_event_tablet_tool_get_axis_delta(tablet_event,
-                                               LIBINPUT_TABLET_TOOL_AXIS_Y);
-       litest_assert_double_eq(dy, 0.0);
-
-       
ck_assert(libinput_event_tablet_tool_distance_has_changed(tablet_event));
-       ddist = libinput_event_tablet_tool_get_axis_delta(tablet_event,
-                                               
LIBINPUT_TABLET_TOOL_AXIS_DISTANCE);
-       ck_assert_double_gt(ddist, 0);
-
-       libinput_event_destroy(event);
-}
-END_TEST
-
 START_TEST(left_handed)
 {
 #if HAVE_LIBWACOM
@@ -1953,12 +1852,10 @@ START_TEST(mouse_wheel)
                tev = libinput_event_get_tablet_tool_event(event);
                ck_assert(libinput_event_tablet_tool_wheel_has_changed(tev));
 
-               val = libinput_event_tablet_tool_get_axis_delta(tev,
-                                               
LIBINPUT_TABLET_TOOL_AXIS_REL_WHEEL);
+               val = libinput_event_tablet_tool_get_wheel_delta(tev);
                ck_assert_int_eq(val, 15);
 
-               val = libinput_event_tablet_tool_get_axis_delta_discrete(tev,
-                                               
LIBINPUT_TABLET_TOOL_AXIS_REL_WHEEL);
+               val = libinput_event_tablet_tool_get_wheel_delta_discrete(tev);
                ck_assert_int_eq(val, 1);
 
                libinput_event_destroy(event);
@@ -1980,12 +1877,10 @@ START_TEST(mouse_wheel)
                tev = libinput_event_get_tablet_tool_event(event);
                ck_assert(!libinput_event_tablet_tool_wheel_has_changed(tev));
 
-               val = libinput_event_tablet_tool_get_axis_delta(tev,
-                                               
LIBINPUT_TABLET_TOOL_AXIS_REL_WHEEL);
+               val = libinput_event_tablet_tool_get_wheel_delta(tev);
                ck_assert_int_eq(val, 0);
 
-               val = libinput_event_tablet_tool_get_axis_delta_discrete(tev,
-                                               
LIBINPUT_TABLET_TOOL_AXIS_REL_WHEEL);
+               val = libinput_event_tablet_tool_get_wheel_delta_discrete(tev);
                ck_assert_int_eq(val, 0);
 
                libinput_event_destroy(event);
@@ -2165,10 +2060,6 @@ START_TEST(artpen_rotation)
                /* artpen has a 90 deg offset cw */
                ck_assert_int_eq(round(val), (angle + 90) % 360);
 
-               val = libinput_event_tablet_tool_get_axis_delta(tev,
-                                        LIBINPUT_TABLET_TOOL_AXIS_ROTATION_Z);
-               ck_assert_int_eq(val, 8);
-
                libinput_event_destroy(event);
                litest_assert_empty_queue(li);
 
@@ -2460,8 +2351,6 @@ litest_setup_tests(void)
        litest_add("tablet:tip", tip_state_axis, LITEST_TABLET, LITEST_ANY);
        litest_add("tablet:tip", tip_state_button, LITEST_TABLET, LITEST_ANY);
        litest_add("tablet:motion", motion, LITEST_TABLET, LITEST_ANY);
-       litest_add("tablet:motion", motion_delta, LITEST_TABLET, LITEST_ANY);
-       litest_add("tablet:motion", motion_delta_partial, LITEST_TABLET, 
LITEST_ANY);
        litest_add("tablet:motion", motion_event_state, LITEST_TABLET, 
LITEST_ANY);
        litest_add_for_device("tablet:left_handed", left_handed, 
LITEST_WACOM_INTUOS);
        litest_add_for_device("tablet:left_handed", no_left_handed, 
LITEST_WACOM_CINTIQ);
diff --git a/tools/event-debug.c b/tools/event-debug.c
index b4e62f4..ddebc13 100644
--- a/tools/event-debug.c
+++ b/tools/event-debug.c
@@ -336,7 +336,7 @@ static void
 print_tablet_axes(struct libinput_event_tablet_tool *t)
 {
        struct libinput_tablet_tool *tool = 
libinput_event_tablet_tool_get_tool(t);
-       double x, y, dx, dy;
+       double x, y;
        double dist, pressure;
        double rotation, slider, wheel;
        double delta;
@@ -346,68 +346,45 @@ print_tablet_axes(struct libinput_event_tablet_tool *t)
 
        x = libinput_event_tablet_tool_get_x(t);
        y = libinput_event_tablet_tool_get_x(t);
-       dx = libinput_event_tablet_tool_get_axis_delta(t, 
LIBINPUT_TABLET_TOOL_AXIS_X);
-       dy = libinput_event_tablet_tool_get_axis_delta(t, 
LIBINPUT_TABLET_TOOL_AXIS_Y);
-       printf("\t%.2f%s/%.2f%s (%.2f/%.2f)",
+       printf("\t%.2f%s/%.2f%s",
               x, changed_sym(t, x),
-              y, changed_sym(t, y),
-              dx, dy);
+              y, changed_sym(t, y));
 
        if (libinput_tablet_tool_has_tilt(tool)) {
                x = libinput_event_tablet_tool_get_tilt_x(t);
                y = libinput_event_tablet_tool_get_tilt_y(t);
-               dx = libinput_event_tablet_tool_get_axis_delta(t,
-                                        LIBINPUT_TABLET_TOOL_AXIS_TILT_X);
-               dy = libinput_event_tablet_tool_get_axis_delta(t,
-                                        LIBINPUT_TABLET_TOOL_AXIS_TILT_Y);
-               printf("\ttilt: %.2f%s/%.2f%s (%.2f/%.2f)",
+               printf("\ttilt: %.2f%s/%.2f%s",
                       x, changed_sym(t, tilt_x),
-                      y, changed_sym(t, tilt_y),
-                      dx, dy);
+                      y, changed_sym(t, tilt_y));
        }
 
        if (libinput_tablet_tool_has_distance(tool) ||
            libinput_tablet_tool_has_pressure(tool)) {
                dist = libinput_event_tablet_tool_get_distance(t);
                pressure = libinput_event_tablet_tool_get_pressure(t);
-               if (dist) {
-                       delta = libinput_event_tablet_tool_get_axis_delta(t,
-                                       LIBINPUT_TABLET_TOOL_AXIS_DISTANCE);
-                       printf("\tdistance: %.2f%s (%.2f)",
-                              dist, changed_sym(t, distance),
-                              delta);
-               } else {
-                       delta = libinput_event_tablet_tool_get_axis_delta(t,
-                                       LIBINPUT_TABLET_TOOL_AXIS_PRESSURE);
-                       printf("\tpressure: %.2f%s (%.2f)",
-                              pressure, changed_sym(t, pressure),
-                              delta);
-               }
+               if (dist)
+                       printf("\tdistance: %.2f%s",
+                              dist, changed_sym(t, distance));
+               else
+                       printf("\tpressure: %.2f%s",
+                              pressure, changed_sym(t, pressure));
        }
 
        if (libinput_tablet_tool_has_rotation(tool)) {
                rotation = libinput_event_tablet_tool_get_rotation(t);
-               delta = libinput_event_tablet_tool_get_axis_delta(t,
-                                       LIBINPUT_TABLET_TOOL_AXIS_ROTATION_Z);
-               printf("\trotation: %.2f%s (%.2f)",
-                      rotation, changed_sym(t, rotation),
-                      delta);
+               printf("\trotation: %.2f%s",
+                      rotation, changed_sym(t, rotation));
        }
 
        if (libinput_tablet_tool_has_slider(tool)) {
                slider = libinput_event_tablet_tool_get_slider_position(t);
-               delta = libinput_event_tablet_tool_get_axis_delta(t,
-                                       LIBINPUT_TABLET_TOOL_AXIS_SLIDER);
-               printf("\tslider: %.2f%s (%.2f)",
-                      slider, changed_sym(t, slider),
-                      delta);
+               printf("\tslider: %.2f%s",
+                      slider, changed_sym(t, slider));
        }
 
        if (libinput_tablet_tool_has_wheel(tool)) {
-               wheel = libinput_event_tablet_tool_get_axis_delta(t,
-                                       LIBINPUT_TABLET_TOOL_AXIS_REL_WHEEL);
-               delta = libinput_event_tablet_tool_get_axis_delta_discrete(t,
-                                       LIBINPUT_TABLET_TOOL_AXIS_REL_WHEEL);
+               wheel = libinput_event_tablet_tool_get_wheel_delta(t);
+               delta = libinput_event_tablet_tool_get_wheel_delta_discrete(t);
                printf("\twheel: %.2f%s (%d)",
                       wheel, changed_sym(t, wheel),
                       (int)delta);
-- 
2.5.0

_______________________________________________
wayland-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to