On Mon, 2015-12-14 at 12:00 +1000, Peter Hutterer wrote:
> 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

s/determinte/determine/

> 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_D
> ISTANCE);
> -     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_even
> t));
> -     ddist = libinput_event_tablet_tool_get_axis_delta(tablet_event,
> -                                             LIBINPUT_TABLET_TOOL_AXIS_DIS
> TANCE);
> -     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);
_______________________________________________
wayland-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to