}
END_TEST
+static void
+assert_pressure(struct libinput *li, enum libinput_event_type type, double expected_pressure)
+{
+ struct libinput_event *event = libinput_get_event(li);
+ struct libinput_event_tablet_tool *tev = litest_is_tablet_event(event, type);
+ double pressure = libinput_event_tablet_tool_get_pressure(tev);
+ ck_assert_double_eq_tol(pressure, expected_pressure, 0.01);
+ libinput_event_destroy(event);
+}
+
START_TEST(tablet_pressure_offset_set)
{
struct litest_device *dev = litest_current_device();
struct libinput *li = dev->libinput;
struct libinput_event *event;
- struct libinput_event_tablet_tool *tev;
struct axis_replacement axes[] = {
{ ABS_DISTANCE, 70 },
{ ABS_PRESSURE, 20 },
{ -1, -1 },
};
- double pressure;
/* This activates the pressure offset */
litest_tablet_proximity_in(dev, 5, 100, axes);
litest_tablet_motion(dev, 70, 70, axes);
libinput_dispatch(li);
- event = libinput_get_event(li);
- tev = litest_is_tablet_event(event,
- LIBINPUT_EVENT_TABLET_TOOL_AXIS);
- pressure = libinput_event_tablet_tool_get_pressure(tev);
-
/* we can't actually get a real 0.0 because that would trigger a tip
up. but it's close enough to zero. */
- ck_assert_double_lt(pressure, 0.01);
-
- libinput_event_destroy(event);
+ assert_pressure(li, LIBINPUT_EVENT_TABLET_TOOL_AXIS, 0.01);
litest_drain_events(li);
litest_axis_set_value(axes, ABS_PRESSURE, 21);
litest_tablet_motion(dev, 70, 70, axes);
libinput_dispatch(li);
- event = libinput_get_event(li);
- tev = litest_is_tablet_event(event,
- LIBINPUT_EVENT_TABLET_TOOL_AXIS);
-
- pressure = libinput_event_tablet_tool_get_pressure(tev);
-
- ck_assert_double_lt(pressure, 0.015);
- libinput_event_destroy(event);
+ assert_pressure(li, LIBINPUT_EVENT_TABLET_TOOL_AXIS, 0.015);
/* Make sure we can reach the upper range too */
litest_tablet_motion(dev, 70, 70, axes);
libinput_dispatch(li);
- event = libinput_get_event(li);
- tev = litest_is_tablet_event(event,
- LIBINPUT_EVENT_TABLET_TOOL_AXIS);
-
- pressure = libinput_event_tablet_tool_get_pressure(tev);
-
- ck_assert_double_ge(pressure, 1.0);
- libinput_event_destroy(event);
+ assert_pressure(li, LIBINPUT_EVENT_TABLET_TOOL_AXIS, 1.0);
/* Tablet motion at offset should trigger tip up. Use
* the litest motion helper here to avoid false positives caused by
{
struct litest_device *dev = litest_current_device();
struct libinput *li = dev->libinput;
- struct libinput_event *event;
- struct libinput_event_tablet_tool *tev;
struct axis_replacement axes[] = {
{ ABS_DISTANCE, 70 },
{ ABS_PRESSURE, 20 },
{ -1, -1 },
};
- double pressure;
/* offset 20 on prox in */
litest_tablet_proximity_in(dev, 5, 100, axes);
litest_tablet_proximity_in(dev, 5, 100, axes);
libinput_dispatch(li);
- event = libinput_get_event(li);
- tev = litest_is_tablet_event(event,
- LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY);
- pressure = libinput_event_tablet_tool_get_pressure(tev);
- ck_assert_double_eq(pressure, 0.0);
-
- libinput_event_destroy(event);
+ assert_pressure(li, LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY, 0.0);
litest_drain_events(li);
/* trigger the pressure threshold */
litest_tablet_tip_down(dev, 70, 70, axes);
libinput_dispatch(li);
- event = libinput_get_event(li);
- tev = litest_is_tablet_event(event,
- LIBINPUT_EVENT_TABLET_TOOL_TIP);
-
- pressure = libinput_event_tablet_tool_get_pressure(tev);
-
/* offset 10 + lower threshold of ~1% of original range,
* value 15 is 5% over original range but with the above taken into
* account it's closer to 5% into the remaining effective 89% range
*/
- ck_assert_double_eq_tol(pressure, 0.05, 0.01);
- libinput_event_destroy(event);
+ assert_pressure(li, LIBINPUT_EVENT_TABLET_TOOL_TIP, 0.05);
}
END_TEST
{
struct litest_device *dev = litest_current_device();
struct libinput *li = dev->libinput;
- struct libinput_event *event;
- struct libinput_event_tablet_tool *tev;
struct axis_replacement axes[] = {
{ ABS_DISTANCE, 70 },
{ ABS_PRESSURE, 20 },
{ -1, -1 },
};
- double pressure;
/* offset 20 on first prox in */
litest_tablet_proximity_in(dev, 5, 100, axes);
litest_tablet_motion(dev, 70, 70, axes);
libinput_dispatch(li);
- event = libinput_get_event(li);
- tev = litest_is_tablet_event(event,
- LIBINPUT_EVENT_TABLET_TOOL_AXIS);
- pressure = libinput_event_tablet_tool_get_pressure(tev);
-
/* offset 20 + lower threshold of 1% of original range,
* value 30 is 5% over original range but with the above taken into
* account it's closer to 12% into the remaining effective 79% range
*/
- ck_assert_double_eq_tol(pressure, 0.12, 0.01);
- libinput_event_destroy(event);
+ assert_pressure(li, LIBINPUT_EVENT_TABLET_TOOL_AXIS, 0.12);
litest_drain_events(li);
litest_tablet_motion(dev, 70, 70, axes);
libinput_dispatch(li);
- event = libinput_get_event(li);
- tev = litest_is_tablet_event(event,
- LIBINPUT_EVENT_TABLET_TOOL_TIP);
-
- pressure = libinput_event_tablet_tool_get_pressure(tev);
-
- ck_assert_double_eq(pressure, 0.0);
- libinput_event_destroy(event);
+ assert_pressure(li, LIBINPUT_EVENT_TABLET_TOOL_TIP, 0.0);
}
END_TEST
{
struct litest_device *dev = litest_current_device();
struct libinput *li = dev->libinput;
- struct libinput_event *event;
- struct libinput_event_tablet_tool *tev;
struct axis_replacement axes[] = {
{ ABS_DISTANCE, 10 },
{ ABS_PRESSURE, 0 },
{ -1, -1 },
};
- double p;
if (!libevdev_has_event_code(dev->evdev, EV_ABS, ABS_PRESSURE))
return;
litest_axis_set_value(axes, ABS_PRESSURE, 1.1);
litest_tablet_motion(dev, 5, 50, axes);
libinput_dispatch(li);
- event = libinput_get_event(li);
- tev = litest_is_tablet_event(event, LIBINPUT_EVENT_TABLET_TOOL_AXIS);
- ck_assert(libinput_event_tablet_tool_pressure_has_changed(tev));
- p = libinput_event_tablet_tool_get_pressure(tev);
- ck_assert_double_ge(p, 0.0);
- libinput_event_destroy(event);
+ assert_pressure(li, LIBINPUT_EVENT_TABLET_TOOL_AXIS, 0.0);
/* skip over pressure-based tip down */
litest_axis_set_value(axes, ABS_PRESSURE, 90);
litest_tablet_motion(dev, 5, 50, axes);
libinput_dispatch(li);
- event = libinput_get_event(li);
- tev = litest_is_tablet_event(event, LIBINPUT_EVENT_TABLET_TOOL_AXIS);
- p = libinput_event_tablet_tool_get_pressure(tev);
- ck_assert_double_ge(p, 1.0);
- libinput_event_destroy(event);
+ assert_pressure(li, LIBINPUT_EVENT_TABLET_TOOL_AXIS, 1.0);
}
END_TEST
{
struct litest_device *dev = litest_current_device();
struct libinput *li = dev->libinput;
- struct libinput_event *event;
- struct libinput_event_tablet_tool *tev;
struct axis_replacement axes[] = {
{ ABS_DISTANCE, 70 },
{ ABS_PRESSURE, 30 },
{ -1, -1 },
};
- double pressure;
int warning_triggered = 0;
struct litest_user_data *user_data = libinput_get_user_data(li);
libinput_log_set_handler(li, pressure_threshold_warning);
litest_tablet_proximity_in(dev, 5, 100, axes);
libinput_dispatch(li);
- event = libinput_get_event(li);
- tev = litest_is_tablet_event(event,
- LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY);
- pressure = libinput_event_tablet_tool_get_pressure(tev);
- ck_assert_double_gt(pressure, 0.0);
- libinput_event_destroy(event);
+ assert_pressure(li, LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY, 0.30);
ck_assert_int_eq(warning_triggered, 1);
litest_restore_log_handler(li);
{
struct litest_device *dev = litest_current_device();
struct libinput *li = dev->libinput;
- struct libinput_event *event;
- struct libinput_event_tablet_tool *tev;
struct axis_replacement axes[] = {
{ ABS_DISTANCE, 0 },
{ ABS_PRESSURE, 20 },
{ -1, -1 },
};
- double pressure;
litest_drain_events(li);
litest_pop_event_frame(dev);
libinput_dispatch(li);
- event = libinput_get_event(li);
- tev = litest_is_tablet_event(event,
- LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY);
- pressure = libinput_event_tablet_tool_get_pressure(tev);
- ck_assert_double_gt(pressure, 0.0);
-
- libinput_event_destroy(event);
+ assert_pressure(li, LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY, 0.20);
}
END_TEST
{
struct litest_device *dev = litest_current_device();
struct libinput *li = dev->libinput;
- struct libinput_event *event;
- struct libinput_event_tablet_tool *tev;
struct axis_replacement axes[] = {
{ ABS_DISTANCE, 20 },
{ ABS_PRESSURE, 20 },
{ -1, -1 },
};
- double pressure;
/* stylus too close to the tablet on the proximity in, ignore any
* pressure offset */
litest_tablet_motion(dev, 70, 70, axes);
libinput_dispatch(li);
- event = libinput_get_event(li);
- tev = litest_is_tablet_event(event, LIBINPUT_EVENT_TABLET_TOOL_AXIS);
- pressure = libinput_event_tablet_tool_get_pressure(tev);
- ck_assert_double_gt(pressure, 0.0);
-
- libinput_event_destroy(event);
+ assert_pressure(li, LIBINPUT_EVENT_TABLET_TOOL_AXIS, 0.20);
}
END_TEST