2014-06-07 17:35:41 -04:00
|
|
|
/*
|
|
|
|
|
* Copyright © 2014 Red Hat, Inc.
|
|
|
|
|
* Copyright © 2014 Stephen Chandler "Lyude" Paul
|
|
|
|
|
*
|
|
|
|
|
* Permission to use, copy, modify, distribute, and sell this software and
|
|
|
|
|
* its documentation for any purpose is hereby granted without fee, provided
|
|
|
|
|
* that the above copyright notice appear in all copies and that both that
|
|
|
|
|
* copyright notice and this permission notice appear in supporting
|
|
|
|
|
* documentation, and that the name of the copyright holders not be used in
|
|
|
|
|
* advertising or publicity pertaining to distribution of the software
|
|
|
|
|
* without specific, written prior permission. The copyright holders make
|
|
|
|
|
* no representations about the suitability of this software for any
|
|
|
|
|
* purpose. It is provided "as is" without express or implied warranty.
|
|
|
|
|
*
|
|
|
|
|
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
|
|
|
|
|
* SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
|
|
|
|
* FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
|
|
|
* SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
|
|
|
|
|
* RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
|
|
|
|
|
* CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
|
|
|
|
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#include <config.h>
|
|
|
|
|
|
|
|
|
|
#include <check.h>
|
|
|
|
|
#include <errno.h>
|
|
|
|
|
#include <fcntl.h>
|
|
|
|
|
#include <libinput.h>
|
|
|
|
|
#include <unistd.h>
|
|
|
|
|
#include <stdbool.h>
|
|
|
|
|
|
|
|
|
|
#include "libinput-util.h"
|
|
|
|
|
#include "evdev-tablet.h"
|
|
|
|
|
#include "litest.h"
|
|
|
|
|
|
2015-11-11 14:03:05 +10:00
|
|
|
START_TEST(tip_down_up)
|
|
|
|
|
{
|
|
|
|
|
struct litest_device *dev = litest_current_device();
|
|
|
|
|
struct libinput *li = dev->libinput;
|
|
|
|
|
struct libinput_event *event;
|
2015-11-16 16:28:55 +10:00
|
|
|
struct libinput_event_tablet_tool *tablet_event;
|
2015-11-11 14:03:05 +10:00
|
|
|
struct axis_replacement axes[] = {
|
|
|
|
|
{ ABS_DISTANCE, 10 },
|
|
|
|
|
{ -1, -1 }
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
litest_tablet_proximity_in(dev, 10, 10, axes);
|
|
|
|
|
litest_drain_events(li);
|
|
|
|
|
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_TOUCH, 1);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
event = libinput_get_event(li);
|
|
|
|
|
tablet_event = litest_is_tablet_event(event,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_TIP);
|
2015-11-16 16:28:55 +10:00
|
|
|
ck_assert_int_eq(libinput_event_tablet_tool_get_tip_state(tablet_event),
|
2015-11-16 15:47:15 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_TIP_DOWN);
|
2015-11-11 14:03:05 +10:00
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
litest_assert_empty_queue(li);
|
|
|
|
|
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_TOUCH, 0);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
event = libinput_get_event(li);
|
|
|
|
|
tablet_event = litest_is_tablet_event(event,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_TIP);
|
2015-11-16 16:28:55 +10:00
|
|
|
ck_assert_int_eq(libinput_event_tablet_tool_get_tip_state(tablet_event),
|
2015-11-16 15:47:15 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_TIP_UP);
|
2015-11-11 14:03:05 +10:00
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
litest_assert_empty_queue(li);
|
|
|
|
|
|
|
|
|
|
litest_assert_empty_queue(li);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
END_TEST
|
|
|
|
|
|
|
|
|
|
START_TEST(tip_down_prox_in)
|
|
|
|
|
{
|
|
|
|
|
struct litest_device *dev = litest_current_device();
|
|
|
|
|
struct libinput *li = dev->libinput;
|
|
|
|
|
struct libinput_event *event;
|
2015-11-16 16:28:55 +10:00
|
|
|
struct libinput_event_tablet_tool *tablet_event;
|
2015-11-11 14:03:05 +10:00
|
|
|
struct axis_replacement axes[] = {
|
|
|
|
|
{ ABS_DISTANCE, 10 },
|
|
|
|
|
{ -1, -1 }
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
litest_drain_events(li);
|
|
|
|
|
|
|
|
|
|
litest_push_event_frame(dev);
|
|
|
|
|
litest_tablet_proximity_in(dev, 10, 10, axes);
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_TOUCH, 1);
|
|
|
|
|
litest_pop_event_frame(dev);
|
|
|
|
|
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
event = libinput_get_event(li);
|
|
|
|
|
tablet_event = litest_is_tablet_event(event,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY);
|
2015-11-16 16:28:55 +10:00
|
|
|
ck_assert_int_eq(libinput_event_tablet_tool_get_proximity_state(tablet_event),
|
2015-11-16 15:42:31 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_PROXIMITY_IN);
|
2015-11-11 14:03:05 +10:00
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
event = libinput_get_event(li);
|
|
|
|
|
tablet_event = litest_is_tablet_event(event,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_TIP);
|
2015-11-16 16:28:55 +10:00
|
|
|
ck_assert_int_eq(libinput_event_tablet_tool_get_tip_state(tablet_event),
|
2015-11-16 15:47:15 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_TIP_DOWN);
|
2015-11-11 14:03:05 +10:00
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
|
|
|
|
|
litest_assert_empty_queue(li);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
END_TEST
|
|
|
|
|
|
|
|
|
|
START_TEST(tip_up_prox_out)
|
|
|
|
|
{
|
|
|
|
|
struct litest_device *dev = litest_current_device();
|
|
|
|
|
struct libinput *li = dev->libinput;
|
|
|
|
|
struct libinput_event *event;
|
2015-11-16 16:28:55 +10:00
|
|
|
struct libinput_event_tablet_tool *tablet_event;
|
2015-11-11 14:03:05 +10:00
|
|
|
struct axis_replacement axes[] = {
|
|
|
|
|
{ ABS_DISTANCE, 10 },
|
|
|
|
|
{ -1, -1 }
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
litest_tablet_proximity_in(dev, 10, 10, axes);
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_TOUCH, 1);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
litest_drain_events(li);
|
|
|
|
|
|
|
|
|
|
litest_push_event_frame(dev);
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_TOUCH, 0);
|
|
|
|
|
litest_tablet_proximity_out(dev);
|
|
|
|
|
litest_pop_event_frame(dev);
|
|
|
|
|
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
event = libinput_get_event(li);
|
|
|
|
|
tablet_event = litest_is_tablet_event(event,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_TIP);
|
2015-11-16 16:28:55 +10:00
|
|
|
ck_assert_int_eq(libinput_event_tablet_tool_get_tip_state(tablet_event),
|
2015-11-16 15:47:15 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_TIP_UP);
|
2015-11-11 14:03:05 +10:00
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
event = libinput_get_event(li);
|
|
|
|
|
tablet_event = litest_is_tablet_event(event,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY);
|
2015-11-16 16:28:55 +10:00
|
|
|
ck_assert_int_eq(libinput_event_tablet_tool_get_proximity_state(tablet_event),
|
2015-11-16 15:42:31 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_PROXIMITY_OUT);
|
2015-11-11 14:03:05 +10:00
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
|
|
|
|
|
litest_assert_empty_queue(li);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
END_TEST
|
|
|
|
|
|
|
|
|
|
START_TEST(tip_up_btn_change)
|
|
|
|
|
{
|
|
|
|
|
struct litest_device *dev = litest_current_device();
|
|
|
|
|
struct libinput *li = dev->libinput;
|
|
|
|
|
struct libinput_event *event;
|
2015-11-16 16:28:55 +10:00
|
|
|
struct libinput_event_tablet_tool *tablet_event;
|
2015-11-11 14:03:05 +10:00
|
|
|
struct axis_replacement axes[] = {
|
|
|
|
|
{ ABS_DISTANCE, 10 },
|
|
|
|
|
{ -1, -1 }
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
litest_tablet_proximity_in(dev, 10, 10, axes);
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_TOUCH, 1);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
litest_drain_events(li);
|
|
|
|
|
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_STYLUS, 1);
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_TOUCH, 0);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
event = libinput_get_event(li);
|
|
|
|
|
tablet_event = litest_is_tablet_event(event,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_BUTTON);
|
2015-11-16 16:28:55 +10:00
|
|
|
ck_assert_int_eq(libinput_event_tablet_tool_get_button(tablet_event),
|
2015-11-11 14:03:05 +10:00
|
|
|
BTN_STYLUS);
|
2015-11-16 16:28:55 +10:00
|
|
|
ck_assert_int_eq(libinput_event_tablet_tool_get_button_state(tablet_event),
|
2015-11-11 14:03:05 +10:00
|
|
|
LIBINPUT_BUTTON_STATE_PRESSED);
|
|
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
event = libinput_get_event(li);
|
|
|
|
|
tablet_event = litest_is_tablet_event(event,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_TIP);
|
2015-11-16 16:28:55 +10:00
|
|
|
ck_assert_int_eq(libinput_event_tablet_tool_get_tip_state(tablet_event),
|
2015-11-16 15:47:15 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_TIP_UP);
|
2015-11-11 14:03:05 +10:00
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
|
|
|
|
|
litest_assert_empty_queue(li);
|
|
|
|
|
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_TOUCH, 1);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
litest_drain_events(li);
|
|
|
|
|
|
|
|
|
|
/* same thing with a release at tip-up */
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_TOUCH, 0);
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_STYLUS, 0);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
event = libinput_get_event(li);
|
|
|
|
|
tablet_event = litest_is_tablet_event(event,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_BUTTON);
|
2015-11-16 16:28:55 +10:00
|
|
|
ck_assert_int_eq(libinput_event_tablet_tool_get_button(tablet_event),
|
2015-11-11 14:03:05 +10:00
|
|
|
BTN_STYLUS);
|
2015-11-16 16:28:55 +10:00
|
|
|
ck_assert_int_eq(libinput_event_tablet_tool_get_button_state(tablet_event),
|
2015-11-11 14:03:05 +10:00
|
|
|
LIBINPUT_BUTTON_STATE_RELEASED);
|
|
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
event = libinput_get_event(li);
|
|
|
|
|
tablet_event = litest_is_tablet_event(event,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_TIP);
|
2015-11-16 16:28:55 +10:00
|
|
|
ck_assert_int_eq(libinput_event_tablet_tool_get_tip_state(tablet_event),
|
2015-11-16 15:47:15 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_TIP_UP);
|
2015-11-11 14:03:05 +10:00
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
|
|
|
|
|
litest_assert_empty_queue(li);
|
|
|
|
|
}
|
|
|
|
|
END_TEST
|
|
|
|
|
|
|
|
|
|
START_TEST(tip_down_btn_change)
|
|
|
|
|
{
|
|
|
|
|
struct litest_device *dev = litest_current_device();
|
|
|
|
|
struct libinput *li = dev->libinput;
|
|
|
|
|
struct libinput_event *event;
|
2015-11-16 16:28:55 +10:00
|
|
|
struct libinput_event_tablet_tool *tablet_event;
|
2015-11-11 14:03:05 +10:00
|
|
|
struct axis_replacement axes[] = {
|
|
|
|
|
{ ABS_DISTANCE, 10 },
|
|
|
|
|
{ -1, -1 }
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
litest_tablet_proximity_in(dev, 10, 10, axes);
|
|
|
|
|
litest_drain_events(li);
|
|
|
|
|
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_STYLUS, 1);
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_TOUCH, 1);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
event = libinput_get_event(li);
|
|
|
|
|
tablet_event = litest_is_tablet_event(event,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_TIP);
|
2015-11-16 16:28:55 +10:00
|
|
|
ck_assert_int_eq(libinput_event_tablet_tool_get_tip_state(tablet_event),
|
2015-11-16 15:47:15 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_TIP_DOWN);
|
2015-11-11 14:03:05 +10:00
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
event = libinput_get_event(li);
|
|
|
|
|
tablet_event = litest_is_tablet_event(event,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_BUTTON);
|
2015-11-16 16:28:55 +10:00
|
|
|
ck_assert_int_eq(libinput_event_tablet_tool_get_button(tablet_event),
|
2015-11-11 14:03:05 +10:00
|
|
|
BTN_STYLUS);
|
2015-11-16 16:28:55 +10:00
|
|
|
ck_assert_int_eq(libinput_event_tablet_tool_get_button_state(tablet_event),
|
2015-11-11 14:03:05 +10:00
|
|
|
LIBINPUT_BUTTON_STATE_PRESSED);
|
|
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
|
|
|
|
|
litest_assert_empty_queue(li);
|
|
|
|
|
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_TOUCH, 0);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
litest_drain_events(li);
|
|
|
|
|
|
|
|
|
|
/* same thing with a release at tip-down */
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_TOUCH, 1);
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_STYLUS, 0);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
event = libinput_get_event(li);
|
|
|
|
|
tablet_event = litest_is_tablet_event(event,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_TIP);
|
2015-11-16 16:28:55 +10:00
|
|
|
ck_assert_int_eq(libinput_event_tablet_tool_get_tip_state(tablet_event),
|
2015-11-16 15:47:15 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_TIP_DOWN);
|
2015-11-11 14:03:05 +10:00
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
event = libinput_get_event(li);
|
|
|
|
|
tablet_event = litest_is_tablet_event(event,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_BUTTON);
|
2015-11-16 16:28:55 +10:00
|
|
|
ck_assert_int_eq(libinput_event_tablet_tool_get_button(tablet_event),
|
2015-11-11 14:03:05 +10:00
|
|
|
BTN_STYLUS);
|
2015-11-16 16:28:55 +10:00
|
|
|
ck_assert_int_eq(libinput_event_tablet_tool_get_button_state(tablet_event),
|
2015-11-11 14:03:05 +10:00
|
|
|
LIBINPUT_BUTTON_STATE_RELEASED);
|
|
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
|
|
|
|
|
litest_assert_empty_queue(li);
|
|
|
|
|
}
|
|
|
|
|
END_TEST
|
|
|
|
|
|
|
|
|
|
START_TEST(tip_down_motion)
|
|
|
|
|
{
|
|
|
|
|
struct litest_device *dev = litest_current_device();
|
|
|
|
|
struct libinput *li = dev->libinput;
|
|
|
|
|
struct libinput_event *event;
|
2015-11-16 16:28:55 +10:00
|
|
|
struct libinput_event_tablet_tool *tablet_event;
|
2015-11-11 14:03:05 +10:00
|
|
|
struct axis_replacement axes[] = {
|
|
|
|
|
{ ABS_DISTANCE, 10 },
|
|
|
|
|
{ -1, -1 }
|
|
|
|
|
};
|
|
|
|
|
double x, y, last_x, last_y;
|
|
|
|
|
|
|
|
|
|
litest_tablet_proximity_in(dev, 10, 10, axes);
|
|
|
|
|
litest_drain_events(li);
|
|
|
|
|
|
|
|
|
|
litest_push_event_frame(dev);
|
|
|
|
|
litest_tablet_motion(dev, 70, 70, axes);
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_TOUCH, 1);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
litest_pop_event_frame(dev);
|
|
|
|
|
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
event = libinput_get_event(li);
|
|
|
|
|
tablet_event = litest_is_tablet_event(event,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_AXIS);
|
2015-11-16 16:28:55 +10:00
|
|
|
last_x = libinput_event_tablet_tool_get_axis_value(tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_X);
|
2015-11-16 16:28:55 +10:00
|
|
|
last_y = libinput_event_tablet_tool_get_axis_value(tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_Y);
|
2015-11-11 14:03:05 +10:00
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
event = libinput_get_event(li);
|
|
|
|
|
tablet_event = litest_is_tablet_event(event,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_TIP);
|
2015-11-16 16:28:55 +10:00
|
|
|
ck_assert_int_eq(libinput_event_tablet_tool_get_tip_state(tablet_event),
|
2015-11-16 15:47:15 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_TIP_DOWN);
|
2015-11-16 16:28:55 +10:00
|
|
|
x = libinput_event_tablet_tool_get_axis_value(tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_X);
|
2015-11-16 16:28:55 +10:00
|
|
|
y = libinput_event_tablet_tool_get_axis_value(tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_Y);
|
2015-11-11 14:03:05 +10:00
|
|
|
ck_assert_double_eq(last_x, x);
|
|
|
|
|
ck_assert_double_eq(last_y, y);
|
|
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
|
|
|
|
|
litest_assert_empty_queue(li);
|
|
|
|
|
}
|
|
|
|
|
END_TEST
|
|
|
|
|
|
|
|
|
|
START_TEST(tip_up_motion)
|
|
|
|
|
{
|
|
|
|
|
struct litest_device *dev = litest_current_device();
|
|
|
|
|
struct libinput *li = dev->libinput;
|
|
|
|
|
struct libinput_event *event;
|
2015-11-16 16:28:55 +10:00
|
|
|
struct libinput_event_tablet_tool *tablet_event;
|
2015-11-11 14:03:05 +10:00
|
|
|
struct axis_replacement axes[] = {
|
|
|
|
|
{ ABS_DISTANCE, 10 },
|
|
|
|
|
{ -1, -1 }
|
|
|
|
|
};
|
|
|
|
|
double x, y, last_x, last_y;
|
|
|
|
|
|
|
|
|
|
litest_tablet_proximity_in(dev, 10, 10, axes);
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_TOUCH, 1);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
litest_drain_events(li);
|
|
|
|
|
|
|
|
|
|
litest_push_event_frame(dev);
|
|
|
|
|
litest_tablet_motion(dev, 70, 70, axes);
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_TOUCH, 0);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
litest_pop_event_frame(dev);
|
|
|
|
|
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
event = libinput_get_event(li);
|
|
|
|
|
tablet_event = litest_is_tablet_event(event,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_AXIS);
|
2015-11-16 16:28:55 +10:00
|
|
|
last_x = libinput_event_tablet_tool_get_axis_value(tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_X);
|
2015-11-16 16:28:55 +10:00
|
|
|
last_y = libinput_event_tablet_tool_get_axis_value(tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_Y);
|
2015-11-11 14:03:05 +10:00
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
event = libinput_get_event(li);
|
|
|
|
|
tablet_event = litest_is_tablet_event(event,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_TIP);
|
2015-11-16 16:28:55 +10:00
|
|
|
ck_assert_int_eq(libinput_event_tablet_tool_get_tip_state(tablet_event),
|
2015-11-16 15:47:15 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_TIP_UP);
|
2015-11-16 16:28:55 +10:00
|
|
|
x = libinput_event_tablet_tool_get_axis_value(tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_X);
|
2015-11-16 16:28:55 +10:00
|
|
|
y = libinput_event_tablet_tool_get_axis_value(tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_Y);
|
2015-11-11 14:03:05 +10:00
|
|
|
ck_assert_double_eq(last_x, x);
|
|
|
|
|
ck_assert_double_eq(last_y, y);
|
|
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
|
|
|
|
|
litest_assert_empty_queue(li);
|
|
|
|
|
}
|
|
|
|
|
END_TEST
|
|
|
|
|
|
2015-11-12 08:01:43 +10:00
|
|
|
START_TEST(tip_state_proximity)
|
|
|
|
|
{
|
|
|
|
|
struct litest_device *dev = litest_current_device();
|
|
|
|
|
struct libinput *li = dev->libinput;
|
|
|
|
|
struct libinput_event *event;
|
2015-11-16 16:28:55 +10:00
|
|
|
struct libinput_event_tablet_tool *tablet_event;
|
2015-11-12 08:01:43 +10:00
|
|
|
struct axis_replacement axes[] = {
|
|
|
|
|
{ ABS_DISTANCE, 10 },
|
|
|
|
|
{ -1, -1 }
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
litest_drain_events(li);
|
|
|
|
|
|
|
|
|
|
litest_tablet_proximity_in(dev, 10, 10, axes);
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
|
|
|
|
|
event = libinput_get_event(li);
|
|
|
|
|
tablet_event = litest_is_tablet_event(event,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY);
|
2015-11-16 16:28:55 +10:00
|
|
|
ck_assert_int_eq(libinput_event_tablet_tool_get_tip_state(tablet_event),
|
2015-11-16 15:47:15 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_TIP_UP);
|
2015-11-12 08:01:43 +10:00
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_TOUCH, 1);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_TOUCH, 0);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
litest_drain_events(li);
|
|
|
|
|
|
|
|
|
|
litest_tablet_proximity_out(dev);
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
|
|
|
|
|
event = libinput_get_event(li);
|
|
|
|
|
tablet_event = litest_is_tablet_event(event,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY);
|
2015-11-16 16:28:55 +10:00
|
|
|
ck_assert_int_eq(libinput_event_tablet_tool_get_tip_state(tablet_event),
|
2015-11-16 15:47:15 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_TIP_UP);
|
2015-11-12 08:01:43 +10:00
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
}
|
|
|
|
|
END_TEST
|
|
|
|
|
|
|
|
|
|
START_TEST(tip_state_axis)
|
|
|
|
|
{
|
|
|
|
|
struct litest_device *dev = litest_current_device();
|
|
|
|
|
struct libinput *li = dev->libinput;
|
|
|
|
|
struct libinput_event *event;
|
2015-11-16 16:28:55 +10:00
|
|
|
struct libinput_event_tablet_tool *tablet_event;
|
2015-11-12 08:01:43 +10:00
|
|
|
struct axis_replacement axes[] = {
|
|
|
|
|
{ ABS_DISTANCE, 10 },
|
|
|
|
|
{ -1, -1 }
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
litest_tablet_proximity_in(dev, 10, 10, axes);
|
|
|
|
|
litest_drain_events(li);
|
|
|
|
|
|
|
|
|
|
litest_tablet_motion(dev, 70, 70, axes);
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
|
|
|
|
|
event = libinput_get_event(li);
|
|
|
|
|
tablet_event = litest_is_tablet_event(event,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_AXIS);
|
2015-11-16 16:28:55 +10:00
|
|
|
ck_assert_int_eq(libinput_event_tablet_tool_get_tip_state(tablet_event),
|
2015-11-16 15:47:15 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_TIP_UP);
|
2015-11-12 08:01:43 +10:00
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_TOUCH, 1);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
litest_drain_events(li);
|
|
|
|
|
|
|
|
|
|
litest_tablet_motion(dev, 30, 30, axes);
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
|
|
|
|
|
event = libinput_get_event(li);
|
|
|
|
|
tablet_event = litest_is_tablet_event(event,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_AXIS);
|
2015-11-16 16:28:55 +10:00
|
|
|
ck_assert_int_eq(libinput_event_tablet_tool_get_tip_state(tablet_event),
|
2015-11-16 15:47:15 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_TIP_DOWN);
|
2015-11-12 08:01:43 +10:00
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_TOUCH, 0);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
litest_drain_events(li);
|
|
|
|
|
|
|
|
|
|
litest_tablet_motion(dev, 40, 80, axes);
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
|
|
|
|
|
event = libinput_get_event(li);
|
|
|
|
|
tablet_event = litest_is_tablet_event(event,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_AXIS);
|
2015-11-16 16:28:55 +10:00
|
|
|
ck_assert_int_eq(libinput_event_tablet_tool_get_tip_state(tablet_event),
|
2015-11-16 15:47:15 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_TIP_UP);
|
2015-11-12 08:01:43 +10:00
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
|
|
|
|
|
litest_assert_empty_queue(li);
|
|
|
|
|
}
|
|
|
|
|
END_TEST
|
|
|
|
|
|
|
|
|
|
START_TEST(tip_state_button)
|
|
|
|
|
{
|
|
|
|
|
struct litest_device *dev = litest_current_device();
|
|
|
|
|
struct libinput *li = dev->libinput;
|
|
|
|
|
struct libinput_event *event;
|
2015-11-16 16:28:55 +10:00
|
|
|
struct libinput_event_tablet_tool *tablet_event;
|
2015-11-12 08:01:43 +10:00
|
|
|
struct axis_replacement axes[] = {
|
|
|
|
|
{ ABS_DISTANCE, 10 },
|
|
|
|
|
{ -1, -1 }
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
litest_tablet_proximity_in(dev, 10, 10, axes);
|
|
|
|
|
litest_drain_events(li);
|
|
|
|
|
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_STYLUS, 1);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
|
|
|
|
|
event = libinput_get_event(li);
|
|
|
|
|
tablet_event = litest_is_tablet_event(event,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_BUTTON);
|
2015-11-16 16:28:55 +10:00
|
|
|
ck_assert_int_eq(libinput_event_tablet_tool_get_tip_state(tablet_event),
|
2015-11-16 15:47:15 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_TIP_UP);
|
2015-11-12 08:01:43 +10:00
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_TOUCH, 1);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
litest_drain_events(li);
|
|
|
|
|
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_STYLUS, 0);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
|
|
|
|
|
event = libinput_get_event(li);
|
|
|
|
|
tablet_event = litest_is_tablet_event(event,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_BUTTON);
|
2015-11-16 16:28:55 +10:00
|
|
|
ck_assert_int_eq(libinput_event_tablet_tool_get_tip_state(tablet_event),
|
2015-11-16 15:47:15 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_TIP_DOWN);
|
2015-11-12 08:01:43 +10:00
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_TOUCH, 0);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
litest_drain_events(li);
|
|
|
|
|
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_STYLUS, 1);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
|
|
|
|
|
event = libinput_get_event(li);
|
|
|
|
|
tablet_event = litest_is_tablet_event(event,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_BUTTON);
|
2015-11-16 16:28:55 +10:00
|
|
|
ck_assert_int_eq(libinput_event_tablet_tool_get_tip_state(tablet_event),
|
2015-11-16 15:47:15 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_TIP_UP);
|
2015-11-12 08:01:43 +10:00
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_STYLUS, 0);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
|
|
|
|
|
event = libinput_get_event(li);
|
|
|
|
|
tablet_event = litest_is_tablet_event(event,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_BUTTON);
|
2015-11-16 16:28:55 +10:00
|
|
|
ck_assert_int_eq(libinput_event_tablet_tool_get_tip_state(tablet_event),
|
2015-11-16 15:47:15 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_TIP_UP);
|
2015-11-12 08:01:43 +10:00
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
|
|
|
|
|
litest_assert_empty_queue(li);
|
|
|
|
|
}
|
|
|
|
|
END_TEST
|
|
|
|
|
|
2014-06-07 17:35:41 -04:00
|
|
|
START_TEST(proximity_in_out)
|
|
|
|
|
{
|
|
|
|
|
struct litest_device *dev = litest_current_device();
|
|
|
|
|
struct libinput *li = dev->libinput;
|
2015-11-16 16:28:55 +10:00
|
|
|
struct libinput_event_tablet_tool *tablet_event;
|
2014-06-07 17:35:41 -04:00
|
|
|
struct libinput_event *event;
|
|
|
|
|
bool have_tool_update = false,
|
|
|
|
|
have_proximity_out = false;
|
|
|
|
|
|
|
|
|
|
struct axis_replacement axes[] = {
|
|
|
|
|
{ ABS_DISTANCE, 10 },
|
|
|
|
|
{ -1, -1 }
|
|
|
|
|
};
|
|
|
|
|
|
2015-11-12 08:32:34 +10:00
|
|
|
litest_drain_events(li);
|
2014-06-07 17:35:41 -04:00
|
|
|
|
|
|
|
|
litest_tablet_proximity_in(dev, 10, 10, axes);
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
|
|
|
|
|
while ((event = libinput_get_event(li))) {
|
|
|
|
|
if (libinput_event_get_type(event) ==
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY) {
|
2015-11-16 15:34:19 +10:00
|
|
|
struct libinput_tablet_tool * tool;
|
2014-06-07 17:35:41 -04:00
|
|
|
|
|
|
|
|
have_tool_update++;
|
2015-11-16 16:28:55 +10:00
|
|
|
tablet_event = libinput_event_get_tablet_tool_event(event);
|
|
|
|
|
tool = libinput_event_tablet_tool_get_tool(tablet_event);
|
2014-06-07 17:35:41 -04:00
|
|
|
ck_assert_int_eq(libinput_tool_get_type(tool),
|
2015-11-16 15:40:43 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_TYPE_PEN);
|
2014-06-07 17:35:41 -04:00
|
|
|
}
|
|
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
}
|
|
|
|
|
ck_assert(have_tool_update);
|
|
|
|
|
|
|
|
|
|
litest_tablet_proximity_out(dev);
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
|
|
|
|
|
while ((event = libinput_get_event(li))) {
|
|
|
|
|
if (libinput_event_get_type(event) ==
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY) {
|
2015-11-16 16:28:55 +10:00
|
|
|
struct libinput_event_tablet_tool *t =
|
|
|
|
|
libinput_event_get_tablet_tool_event(event);
|
2015-02-16 22:48:42 -05:00
|
|
|
|
2015-11-16 16:28:55 +10:00
|
|
|
if (libinput_event_tablet_tool_get_proximity_state(t) ==
|
2015-11-16 15:42:31 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_PROXIMITY_OUT)
|
2015-02-16 22:48:42 -05:00
|
|
|
have_proximity_out = true;
|
|
|
|
|
}
|
2014-06-07 17:35:41 -04:00
|
|
|
|
|
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
}
|
|
|
|
|
ck_assert(have_proximity_out);
|
|
|
|
|
|
|
|
|
|
/* Proximity out must not emit axis events */
|
|
|
|
|
litest_tablet_proximity_out(dev);
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
|
|
|
|
|
while ((event = libinput_get_event(li))) {
|
|
|
|
|
enum libinput_event_type type = libinput_event_get_type(event);
|
|
|
|
|
|
2015-11-16 16:27:46 +10:00
|
|
|
ck_assert(type != LIBINPUT_EVENT_TABLET_TOOL_AXIS);
|
2014-06-07 17:35:41 -04:00
|
|
|
|
|
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
END_TEST
|
|
|
|
|
|
|
|
|
|
START_TEST(proximity_out_clear_buttons)
|
|
|
|
|
{
|
|
|
|
|
struct litest_device *dev = litest_current_device();
|
|
|
|
|
struct libinput *li = dev->libinput;
|
2015-11-16 16:28:55 +10:00
|
|
|
struct libinput_event_tablet_tool *tablet_event;
|
2014-06-07 17:35:41 -04:00
|
|
|
struct libinput_event *event;
|
|
|
|
|
uint32_t button;
|
|
|
|
|
|
|
|
|
|
struct axis_replacement axes[] = {
|
|
|
|
|
{ ABS_DISTANCE, 10 },
|
|
|
|
|
{ -1, -1 }
|
|
|
|
|
};
|
|
|
|
|
|
2015-11-12 08:32:34 +10:00
|
|
|
litest_drain_events(li);
|
2014-06-07 17:35:41 -04:00
|
|
|
|
|
|
|
|
/* Test that proximity out events send button releases for any currently
|
|
|
|
|
* pressed stylus buttons
|
|
|
|
|
*/
|
2015-11-11 13:39:43 +10:00
|
|
|
for (button = BTN_TOUCH + 1; button <= BTN_STYLUS2; button++) {
|
2014-06-07 17:35:41 -04:00
|
|
|
bool button_released = false;
|
|
|
|
|
uint32_t event_button;
|
|
|
|
|
enum libinput_button_state state;
|
|
|
|
|
|
2015-06-29 15:24:06 +10:00
|
|
|
if (!libevdev_has_event_code(dev->evdev, EV_KEY, button))
|
|
|
|
|
continue;
|
|
|
|
|
|
2014-06-07 17:35:41 -04:00
|
|
|
litest_tablet_proximity_in(dev, 10, 10, axes);
|
|
|
|
|
litest_event(dev, EV_KEY, button, 1);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
litest_tablet_proximity_out(dev);
|
|
|
|
|
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
|
|
|
|
|
while ((event = libinput_get_event(li))) {
|
2015-11-16 16:28:55 +10:00
|
|
|
tablet_event = libinput_event_get_tablet_tool_event(event);
|
2014-06-07 17:35:41 -04:00
|
|
|
|
|
|
|
|
if (libinput_event_get_type(event) ==
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_BUTTON) {
|
2014-06-07 17:35:41 -04:00
|
|
|
|
2015-11-16 16:28:55 +10:00
|
|
|
event_button = libinput_event_tablet_tool_get_button(tablet_event);
|
|
|
|
|
state = libinput_event_tablet_tool_get_button_state(tablet_event);
|
2014-06-07 17:35:41 -04:00
|
|
|
|
|
|
|
|
if (event_button == button &&
|
|
|
|
|
state == LIBINPUT_BUTTON_STATE_RELEASED)
|
|
|
|
|
button_released = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ck_assert_msg(button_released,
|
2015-06-29 15:24:25 +10:00
|
|
|
"Button %s (%d) was not released.",
|
|
|
|
|
libevdev_event_code_get_name(EV_KEY, button),
|
2014-06-07 17:35:41 -04:00
|
|
|
event_button);
|
|
|
|
|
}
|
2015-11-11 13:39:43 +10:00
|
|
|
|
|
|
|
|
litest_assert_empty_queue(li);
|
2014-06-07 17:35:41 -04:00
|
|
|
}
|
|
|
|
|
END_TEST
|
|
|
|
|
|
2015-02-18 01:43:21 -05:00
|
|
|
START_TEST(proximity_has_axes)
|
|
|
|
|
{
|
|
|
|
|
struct litest_device *dev = litest_current_device();
|
|
|
|
|
struct libinput *li = dev->libinput;
|
2015-11-16 16:28:55 +10:00
|
|
|
struct libinput_event_tablet_tool *tablet_event;
|
2015-02-18 01:43:21 -05:00
|
|
|
struct libinput_event *event;
|
2015-11-16 15:34:19 +10:00
|
|
|
struct libinput_tablet_tool *tool;
|
2015-02-18 01:43:21 -05:00
|
|
|
double x, y,
|
|
|
|
|
distance;
|
2015-11-11 16:05:41 +10:00
|
|
|
double last_x, last_y, last_distance,
|
|
|
|
|
last_tx, last_ty;
|
2015-02-18 01:43:21 -05:00
|
|
|
|
|
|
|
|
struct axis_replacement axes[] = {
|
|
|
|
|
{ ABS_DISTANCE, 10 },
|
|
|
|
|
{ ABS_TILT_X, 10 },
|
|
|
|
|
{ ABS_TILT_Y, 10 },
|
|
|
|
|
{ -1, -1}
|
|
|
|
|
};
|
|
|
|
|
|
2015-11-12 08:32:34 +10:00
|
|
|
litest_drain_events(li);
|
2015-02-18 01:43:21 -05:00
|
|
|
|
|
|
|
|
litest_tablet_proximity_in(dev, 10, 10, axes);
|
|
|
|
|
|
2015-11-16 16:27:46 +10:00
|
|
|
litest_wait_for_event_of_type(li, LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY, -1);
|
2015-02-18 01:43:21 -05:00
|
|
|
|
|
|
|
|
event = libinput_get_event(li);
|
|
|
|
|
|
2015-11-16 16:28:55 +10:00
|
|
|
tablet_event = libinput_event_get_tablet_tool_event(event);
|
|
|
|
|
tool = libinput_event_tablet_tool_get_tool(tablet_event);
|
2015-02-18 01:43:21 -05:00
|
|
|
|
2015-11-16 16:28:55 +10:00
|
|
|
ck_assert(libinput_event_tablet_tool_axis_has_changed(
|
2015-11-16 15:36:30 +10:00
|
|
|
tablet_event, LIBINPUT_TABLET_TOOL_AXIS_X));
|
2015-11-16 16:28:55 +10:00
|
|
|
ck_assert(libinput_event_tablet_tool_axis_has_changed(
|
2015-11-16 15:36:30 +10:00
|
|
|
tablet_event, LIBINPUT_TABLET_TOOL_AXIS_Y));
|
2015-02-18 01:43:21 -05:00
|
|
|
|
2015-11-16 16:28:55 +10:00
|
|
|
x = libinput_event_tablet_tool_get_axis_value(tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_X);
|
2015-11-16 16:28:55 +10:00
|
|
|
y = libinput_event_tablet_tool_get_axis_value(tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_Y);
|
2015-02-18 01:43:21 -05:00
|
|
|
|
|
|
|
|
litest_assert_double_ne(x, 0);
|
|
|
|
|
litest_assert_double_ne(y, 0);
|
|
|
|
|
|
2015-11-16 15:36:30 +10:00
|
|
|
if (libinput_tool_has_axis(tool, LIBINPUT_TABLET_TOOL_AXIS_DISTANCE)) {
|
2015-11-16 16:28:55 +10:00
|
|
|
ck_assert(libinput_event_tablet_tool_axis_has_changed(
|
2015-02-18 01:43:21 -05:00
|
|
|
tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_DISTANCE));
|
2015-02-18 01:43:21 -05:00
|
|
|
|
2015-11-16 16:28:55 +10:00
|
|
|
distance = libinput_event_tablet_tool_get_axis_value(
|
2015-02-18 01:43:21 -05:00
|
|
|
tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_DISTANCE);
|
2015-02-18 01:43:21 -05:00
|
|
|
litest_assert_double_ne(distance, 0);
|
|
|
|
|
}
|
|
|
|
|
|
2015-11-16 15:36:30 +10:00
|
|
|
if (libinput_tool_has_axis(tool, LIBINPUT_TABLET_TOOL_AXIS_TILT_X) &&
|
|
|
|
|
libinput_tool_has_axis(tool, LIBINPUT_TABLET_TOOL_AXIS_TILT_Y)) {
|
2015-11-16 16:28:55 +10:00
|
|
|
ck_assert(libinput_event_tablet_tool_axis_has_changed(
|
2015-02-18 01:43:21 -05:00
|
|
|
tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_TILT_X));
|
2015-11-16 16:28:55 +10:00
|
|
|
ck_assert(libinput_event_tablet_tool_axis_has_changed(
|
2015-02-18 01:43:21 -05:00
|
|
|
tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_TILT_Y));
|
2015-02-18 01:43:21 -05:00
|
|
|
|
2015-11-16 16:28:55 +10:00
|
|
|
x = libinput_event_tablet_tool_get_axis_value(
|
2015-02-18 01:43:21 -05:00
|
|
|
tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_TILT_X);
|
2015-11-16 16:28:55 +10:00
|
|
|
y = libinput_event_tablet_tool_get_axis_value(
|
2015-02-18 01:43:21 -05:00
|
|
|
tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_TILT_Y);
|
2015-02-18 01:43:21 -05:00
|
|
|
|
|
|
|
|
litest_assert_double_ne(x, 0);
|
|
|
|
|
litest_assert_double_ne(y, 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
litest_assert_empty_queue(li);
|
|
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
|
2015-11-11 16:05:41 +10:00
|
|
|
axes[0].value = 20;
|
|
|
|
|
axes[1].value = 15;
|
|
|
|
|
axes[2].value = 25;
|
|
|
|
|
litest_tablet_motion(dev, 20, 30, axes);
|
|
|
|
|
libinput_dispatch(li);
|
2015-11-16 16:27:46 +10:00
|
|
|
litest_wait_for_event_of_type(li, LIBINPUT_EVENT_TABLET_TOOL_AXIS, -1);
|
2015-11-11 16:05:41 +10:00
|
|
|
event = libinput_get_event(li);
|
2015-11-16 16:28:55 +10:00
|
|
|
tablet_event = libinput_event_get_tablet_tool_event(event);
|
2015-11-11 16:05:41 +10:00
|
|
|
|
2015-11-16 16:28:55 +10:00
|
|
|
last_x = libinput_event_tablet_tool_get_axis_value(tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_X);
|
2015-11-16 16:28:55 +10:00
|
|
|
last_y = libinput_event_tablet_tool_get_axis_value(tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_Y);
|
|
|
|
|
if (libinput_tool_has_axis(tool, LIBINPUT_TABLET_TOOL_AXIS_DISTANCE))
|
2015-11-16 16:28:55 +10:00
|
|
|
last_distance = libinput_event_tablet_tool_get_axis_value(
|
2015-11-11 16:05:41 +10:00
|
|
|
tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_DISTANCE);
|
|
|
|
|
if (libinput_tool_has_axis(tool, LIBINPUT_TABLET_TOOL_AXIS_TILT_X) &&
|
|
|
|
|
libinput_tool_has_axis(tool, LIBINPUT_TABLET_TOOL_AXIS_TILT_Y)) {
|
2015-11-16 16:28:55 +10:00
|
|
|
last_tx = libinput_event_tablet_tool_get_axis_value(
|
2015-11-11 16:05:41 +10:00
|
|
|
tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_TILT_X);
|
2015-11-16 16:28:55 +10:00
|
|
|
last_ty = libinput_event_tablet_tool_get_axis_value(
|
2015-11-11 16:05:41 +10:00
|
|
|
tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_TILT_Y);
|
2015-11-11 16:05:41 +10:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
|
2015-02-18 01:43:21 -05:00
|
|
|
/* Make sure that the axes are still present on proximity out */
|
|
|
|
|
litest_tablet_proximity_out(dev);
|
|
|
|
|
|
2015-11-16 16:27:46 +10:00
|
|
|
litest_wait_for_event_of_type(li, LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY, -1);
|
2015-02-18 01:43:21 -05:00
|
|
|
event = libinput_get_event(li);
|
|
|
|
|
|
2015-11-16 16:28:55 +10:00
|
|
|
tablet_event = libinput_event_get_tablet_tool_event(event);
|
|
|
|
|
tool = libinput_event_tablet_tool_get_tool(tablet_event);
|
2015-02-18 01:43:21 -05:00
|
|
|
|
2015-11-16 16:28:55 +10:00
|
|
|
ck_assert(!libinput_event_tablet_tool_axis_has_changed(
|
2015-11-16 15:36:30 +10:00
|
|
|
tablet_event, LIBINPUT_TABLET_TOOL_AXIS_X));
|
2015-11-16 16:28:55 +10:00
|
|
|
ck_assert(!libinput_event_tablet_tool_axis_has_changed(
|
2015-11-16 15:36:30 +10:00
|
|
|
tablet_event, LIBINPUT_TABLET_TOOL_AXIS_Y));
|
2015-02-18 01:43:21 -05:00
|
|
|
|
2015-11-16 16:28:55 +10:00
|
|
|
x = libinput_event_tablet_tool_get_axis_value(tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_X);
|
2015-11-16 16:28:55 +10:00
|
|
|
y = libinput_event_tablet_tool_get_axis_value(tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_Y);
|
2015-11-11 16:05:41 +10:00
|
|
|
litest_assert_double_eq(x, last_x);
|
|
|
|
|
litest_assert_double_eq(y, last_y);
|
2015-02-18 01:43:21 -05:00
|
|
|
|
2015-11-16 15:36:30 +10:00
|
|
|
if (libinput_tool_has_axis(tool, LIBINPUT_TABLET_TOOL_AXIS_DISTANCE)) {
|
2015-11-16 16:28:55 +10:00
|
|
|
ck_assert(!libinput_event_tablet_tool_axis_has_changed(
|
2015-02-18 01:43:21 -05:00
|
|
|
tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_DISTANCE));
|
2015-02-18 01:43:21 -05:00
|
|
|
|
2015-11-16 16:28:55 +10:00
|
|
|
distance = libinput_event_tablet_tool_get_axis_value(
|
2015-02-18 01:43:21 -05:00
|
|
|
tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_DISTANCE);
|
2015-11-11 16:05:41 +10:00
|
|
|
litest_assert_double_eq(distance, last_distance);
|
2015-02-18 01:43:21 -05:00
|
|
|
}
|
|
|
|
|
|
2015-11-16 15:36:30 +10:00
|
|
|
if (libinput_tool_has_axis(tool, LIBINPUT_TABLET_TOOL_AXIS_TILT_X) &&
|
|
|
|
|
libinput_tool_has_axis(tool, LIBINPUT_TABLET_TOOL_AXIS_TILT_Y)) {
|
2015-11-16 16:28:55 +10:00
|
|
|
ck_assert(!libinput_event_tablet_tool_axis_has_changed(
|
2015-02-18 01:43:21 -05:00
|
|
|
tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_TILT_X));
|
2015-11-16 16:28:55 +10:00
|
|
|
ck_assert(!libinput_event_tablet_tool_axis_has_changed(
|
2015-02-18 01:43:21 -05:00
|
|
|
tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_TILT_Y));
|
2015-02-18 01:43:21 -05:00
|
|
|
|
2015-11-16 16:28:55 +10:00
|
|
|
x = libinput_event_tablet_tool_get_axis_value(
|
2015-02-18 01:43:21 -05:00
|
|
|
tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_TILT_X);
|
2015-11-16 16:28:55 +10:00
|
|
|
y = libinput_event_tablet_tool_get_axis_value(
|
2015-02-18 01:43:21 -05:00
|
|
|
tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_TILT_Y);
|
2015-02-18 01:43:21 -05:00
|
|
|
|
2015-11-11 16:05:41 +10:00
|
|
|
litest_assert_double_eq(x, last_tx);
|
|
|
|
|
litest_assert_double_eq(y, last_ty);
|
2015-02-18 01:43:21 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
litest_assert_empty_queue(li);
|
|
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
}
|
|
|
|
|
END_TEST
|
|
|
|
|
|
2014-06-12 22:52:28 -04:00
|
|
|
START_TEST(motion)
|
|
|
|
|
{
|
|
|
|
|
struct litest_device *dev = litest_current_device();
|
|
|
|
|
struct libinput *li = dev->libinput;
|
2015-11-16 16:28:55 +10:00
|
|
|
struct libinput_event_tablet_tool *tablet_event;
|
2014-06-12 22:52:28 -04:00
|
|
|
struct libinput_event *event;
|
|
|
|
|
int test_x, test_y;
|
2015-02-10 11:15:04 +10:00
|
|
|
double last_reported_x = 0, last_reported_y = 0;
|
2014-06-12 22:52:28 -04:00
|
|
|
enum libinput_event_type type;
|
|
|
|
|
struct axis_replacement axes[] = {
|
|
|
|
|
{ ABS_DISTANCE, 10 },
|
|
|
|
|
{ -1, -1 }
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
litest_drain_events(li);
|
|
|
|
|
|
|
|
|
|
litest_tablet_proximity_in(dev, 5, 100, axes);
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
|
2015-02-10 11:07:30 +10:00
|
|
|
litest_wait_for_event_of_type(li,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY,
|
2015-02-10 11:07:30 +10:00
|
|
|
-1);
|
|
|
|
|
|
2014-06-12 22:52:28 -04:00
|
|
|
while ((event = libinput_get_event(li))) {
|
2015-02-10 11:07:30 +10:00
|
|
|
bool x_changed, y_changed;
|
|
|
|
|
double reported_x, reported_y;
|
|
|
|
|
|
2015-11-16 16:28:55 +10:00
|
|
|
tablet_event = libinput_event_get_tablet_tool_event(event);
|
2015-02-10 11:07:30 +10:00
|
|
|
ck_assert_int_eq(libinput_event_get_type(event),
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY);
|
2014-06-12 22:52:28 -04:00
|
|
|
|
2015-11-16 16:28:55 +10:00
|
|
|
x_changed = libinput_event_tablet_tool_axis_has_changed(
|
2015-11-16 15:36:30 +10:00
|
|
|
tablet_event, LIBINPUT_TABLET_TOOL_AXIS_X);
|
2015-11-16 16:28:55 +10:00
|
|
|
y_changed = libinput_event_tablet_tool_axis_has_changed(
|
2015-11-16 15:36:30 +10:00
|
|
|
tablet_event, LIBINPUT_TABLET_TOOL_AXIS_Y);
|
2014-06-12 22:52:28 -04:00
|
|
|
|
2015-02-10 11:07:30 +10:00
|
|
|
ck_assert(x_changed);
|
|
|
|
|
ck_assert(y_changed);
|
2014-06-12 22:52:28 -04:00
|
|
|
|
2015-11-16 16:28:55 +10:00
|
|
|
reported_x = libinput_event_tablet_tool_get_axis_value(
|
2015-11-16 15:36:30 +10:00
|
|
|
tablet_event, LIBINPUT_TABLET_TOOL_AXIS_X);
|
2015-11-16 16:28:55 +10:00
|
|
|
reported_y = libinput_event_tablet_tool_get_axis_value(
|
2015-11-16 15:36:30 +10:00
|
|
|
tablet_event, LIBINPUT_TABLET_TOOL_AXIS_Y);
|
2014-06-12 22:52:28 -04:00
|
|
|
|
2015-02-10 11:07:30 +10:00
|
|
|
litest_assert_double_lt(reported_x, reported_y);
|
2014-06-12 22:52:28 -04:00
|
|
|
|
2015-02-10 11:07:30 +10:00
|
|
|
last_reported_x = reported_x;
|
|
|
|
|
last_reported_y = reported_y;
|
2014-06-12 22:52:28 -04:00
|
|
|
|
|
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (test_x = 10, test_y = 90;
|
|
|
|
|
test_x <= 100;
|
|
|
|
|
test_x += 10, test_y -= 10) {
|
|
|
|
|
bool x_changed, y_changed;
|
|
|
|
|
double reported_x, reported_y;
|
|
|
|
|
|
2015-02-10 11:07:30 +10:00
|
|
|
litest_tablet_motion(dev, test_x, test_y, axes);
|
2014-06-12 22:52:28 -04:00
|
|
|
libinput_dispatch(li);
|
|
|
|
|
|
|
|
|
|
while ((event = libinput_get_event(li))) {
|
2015-11-16 16:28:55 +10:00
|
|
|
tablet_event = libinput_event_get_tablet_tool_event(event);
|
2014-06-12 22:52:28 -04:00
|
|
|
type = libinput_event_get_type(event);
|
|
|
|
|
|
2015-11-16 16:27:46 +10:00
|
|
|
if (type == LIBINPUT_EVENT_TABLET_TOOL_AXIS) {
|
2015-11-16 16:28:55 +10:00
|
|
|
x_changed = libinput_event_tablet_tool_axis_has_changed(
|
2015-11-16 15:36:30 +10:00
|
|
|
tablet_event, LIBINPUT_TABLET_TOOL_AXIS_X);
|
2015-11-16 16:28:55 +10:00
|
|
|
y_changed = libinput_event_tablet_tool_axis_has_changed(
|
2015-11-16 15:36:30 +10:00
|
|
|
tablet_event, LIBINPUT_TABLET_TOOL_AXIS_Y);
|
2014-06-12 22:52:28 -04:00
|
|
|
|
|
|
|
|
ck_assert(x_changed);
|
|
|
|
|
ck_assert(y_changed);
|
|
|
|
|
|
2015-11-16 16:28:55 +10:00
|
|
|
reported_x = libinput_event_tablet_tool_get_axis_value(
|
2015-11-16 15:36:30 +10:00
|
|
|
tablet_event, LIBINPUT_TABLET_TOOL_AXIS_X);
|
2015-11-16 16:28:55 +10:00
|
|
|
reported_y = libinput_event_tablet_tool_get_axis_value(
|
2015-11-16 15:36:30 +10:00
|
|
|
tablet_event, LIBINPUT_TABLET_TOOL_AXIS_Y);
|
2014-06-12 22:52:28 -04:00
|
|
|
|
|
|
|
|
litest_assert_double_gt(reported_x,
|
|
|
|
|
last_reported_x);
|
|
|
|
|
litest_assert_double_lt(reported_y,
|
|
|
|
|
last_reported_y);
|
|
|
|
|
|
|
|
|
|
last_reported_x = reported_x;
|
|
|
|
|
last_reported_y = reported_y;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
END_TEST
|
|
|
|
|
|
2015-02-20 12:03:52 +10:00
|
|
|
START_TEST(motion_delta)
|
|
|
|
|
{
|
|
|
|
|
struct litest_device *dev = litest_current_device();
|
|
|
|
|
struct libinput *li = dev->libinput;
|
2015-11-16 16:28:55 +10:00
|
|
|
struct libinput_event_tablet_tool *tablet_event;
|
2015-02-20 12:03:52 +10:00
|
|
|
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,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY,
|
2015-02-20 12:03:52 +10:00
|
|
|
-1);
|
|
|
|
|
|
|
|
|
|
event = libinput_get_event(li);
|
2015-11-16 16:28:55 +10:00
|
|
|
tablet_event = libinput_event_get_tablet_tool_event(event);
|
|
|
|
|
x1 = libinput_event_tablet_tool_get_axis_value(tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_X);
|
2015-11-16 16:28:55 +10:00
|
|
|
y1 = libinput_event_tablet_tool_get_axis_value(tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_Y);
|
2015-11-16 16:28:55 +10:00
|
|
|
dist1 = libinput_event_tablet_tool_get_axis_value(tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_DISTANCE);
|
2015-02-20 12:03:52 +10:00
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
|
|
|
|
|
axes[0].value = 40;
|
|
|
|
|
litest_tablet_motion(dev, 40, 100, axes);
|
|
|
|
|
|
|
|
|
|
litest_wait_for_event_of_type(li,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_AXIS,
|
2015-02-20 12:03:52 +10:00
|
|
|
-1);
|
|
|
|
|
event = libinput_get_event(li);
|
2015-11-16 16:28:55 +10:00
|
|
|
tablet_event = libinput_event_get_tablet_tool_event(event);
|
|
|
|
|
x2 = libinput_event_tablet_tool_get_axis_value(tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_X);
|
2015-11-16 16:28:55 +10:00
|
|
|
y2 = libinput_event_tablet_tool_get_axis_value(tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_Y);
|
2015-11-16 16:28:55 +10:00
|
|
|
dist2 = libinput_event_tablet_tool_get_axis_value(tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_DISTANCE);
|
2015-02-20 12:03:52 +10:00
|
|
|
|
2015-11-16 16:28:55 +10:00
|
|
|
delta = libinput_event_tablet_tool_get_axis_delta(tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_X);
|
2015-02-20 12:03:52 +10:00
|
|
|
litest_assert_double_eq(delta, x2 - x1);
|
2015-11-16 16:28:55 +10:00
|
|
|
delta = libinput_event_tablet_tool_get_axis_delta(tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_Y);
|
2015-02-20 12:03:52 +10:00
|
|
|
litest_assert_double_eq(delta, y2 - y1);
|
2015-11-16 16:28:55 +10:00
|
|
|
delta = libinput_event_tablet_tool_get_axis_delta(tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_DISTANCE);
|
2015-02-20 12:03:52 +10:00
|
|
|
litest_assert_double_eq(delta, dist2 - dist1);
|
|
|
|
|
|
|
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
}
|
|
|
|
|
END_TEST
|
|
|
|
|
|
2015-07-09 15:46:20 +10:00
|
|
|
START_TEST(motion_delta_partial)
|
|
|
|
|
{
|
|
|
|
|
struct litest_device *dev = litest_current_device();
|
|
|
|
|
struct libinput *li = dev->libinput;
|
2015-11-16 16:28:55 +10:00
|
|
|
struct libinput_event_tablet_tool *tablet_event;
|
2015-07-09 15:46:20 +10:00
|
|
|
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,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_AXIS,
|
2015-07-09 15:46:20 +10:00
|
|
|
-1);
|
|
|
|
|
event = libinput_get_event(li);
|
2015-11-16 16:28:55 +10:00
|
|
|
tablet_event = libinput_event_get_tablet_tool_event(event);
|
2015-07-09 15:46:20 +10:00
|
|
|
|
2015-11-16 16:28:55 +10:00
|
|
|
ck_assert(!libinput_event_tablet_tool_axis_has_changed(tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_X));
|
2015-11-16 16:28:55 +10:00
|
|
|
dx = libinput_event_tablet_tool_get_axis_delta(tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_X);
|
2015-07-09 15:46:20 +10:00
|
|
|
litest_assert_double_eq(dx, 0.0);
|
|
|
|
|
|
2015-11-16 16:28:55 +10:00
|
|
|
ck_assert(!libinput_event_tablet_tool_axis_has_changed(tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_X));
|
2015-11-16 16:28:55 +10:00
|
|
|
dy = libinput_event_tablet_tool_get_axis_delta(tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_Y);
|
2015-07-09 15:46:20 +10:00
|
|
|
litest_assert_double_eq(dy, 0.0);
|
|
|
|
|
|
2015-11-16 16:28:55 +10:00
|
|
|
ck_assert(libinput_event_tablet_tool_axis_has_changed(tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_DISTANCE));
|
2015-11-16 16:28:55 +10:00
|
|
|
ddist = libinput_event_tablet_tool_get_axis_delta(tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_DISTANCE);
|
2015-07-09 15:46:20 +10:00
|
|
|
ck_assert_double_gt(ddist, 0);
|
|
|
|
|
|
|
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
}
|
|
|
|
|
END_TEST
|
|
|
|
|
|
2015-02-16 22:48:40 -05:00
|
|
|
START_TEST(left_handed)
|
|
|
|
|
{
|
2015-02-19 12:56:43 +10:00
|
|
|
#if HAVE_LIBWACOM
|
2015-02-16 22:48:40 -05:00
|
|
|
struct litest_device *dev = litest_current_device();
|
|
|
|
|
struct libinput *li = dev->libinput;
|
|
|
|
|
struct libinput_event *event;
|
2015-11-16 16:28:55 +10:00
|
|
|
struct libinput_event_tablet_tool *tablet_event;
|
2015-02-16 22:48:40 -05:00
|
|
|
double libinput_max_x, libinput_max_y;
|
2015-07-14 13:13:34 +10:00
|
|
|
double last_x = -1.0, last_y = -1.0;
|
2015-02-16 22:48:40 -05:00
|
|
|
struct axis_replacement axes[] = {
|
|
|
|
|
{ ABS_DISTANCE, 10 },
|
|
|
|
|
{ -1, -1 }
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
ck_assert(libinput_device_config_left_handed_is_available(dev->libinput_device));
|
|
|
|
|
|
|
|
|
|
libinput_device_get_size (dev->libinput_device,
|
|
|
|
|
&libinput_max_x,
|
|
|
|
|
&libinput_max_y);
|
|
|
|
|
|
|
|
|
|
/* Test that left-handed mode doesn't go into effect until the tool has
|
|
|
|
|
* left proximity of the tablet. In order to test this, we have to bring
|
|
|
|
|
* the tool into proximity and make sure libinput processes the
|
|
|
|
|
* proximity events so that it updates it's internal tablet state, and
|
|
|
|
|
* then try setting it to left-handed mode. */
|
|
|
|
|
litest_tablet_proximity_in(dev, 0, 100, axes);
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
libinput_device_config_left_handed_set(dev->libinput_device, 1);
|
|
|
|
|
|
2015-11-16 16:27:46 +10:00
|
|
|
litest_wait_for_event_of_type(li, LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY, -1);
|
2015-02-16 22:48:40 -05:00
|
|
|
|
|
|
|
|
while ((event = libinput_get_event(li))) {
|
2015-11-16 16:28:55 +10:00
|
|
|
tablet_event = libinput_event_get_tablet_tool_event(event);
|
2015-02-16 22:48:40 -05:00
|
|
|
|
2015-11-16 16:28:55 +10:00
|
|
|
last_x = libinput_event_tablet_tool_get_axis_value(
|
2015-11-16 15:36:30 +10:00
|
|
|
tablet_event, LIBINPUT_TABLET_TOOL_AXIS_X);
|
2015-11-16 16:28:55 +10:00
|
|
|
last_y = libinput_event_tablet_tool_get_axis_value(
|
2015-11-16 15:36:30 +10:00
|
|
|
tablet_event, LIBINPUT_TABLET_TOOL_AXIS_Y);
|
2015-02-16 22:48:40 -05:00
|
|
|
|
|
|
|
|
litest_assert_double_eq(last_x, 0);
|
|
|
|
|
litest_assert_double_eq(last_y, libinput_max_y);
|
|
|
|
|
|
|
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
litest_tablet_motion(dev, 100, 0, axes);
|
2015-11-16 16:27:46 +10:00
|
|
|
litest_wait_for_event_of_type(li, LIBINPUT_EVENT_TABLET_TOOL_AXIS, -1);
|
2015-02-16 22:48:40 -05:00
|
|
|
|
|
|
|
|
while ((event = libinput_get_event(li))) {
|
|
|
|
|
double x, y;
|
2015-11-16 16:28:55 +10:00
|
|
|
tablet_event = libinput_event_get_tablet_tool_event(event);
|
2015-02-16 22:48:40 -05:00
|
|
|
|
2015-11-16 16:28:55 +10:00
|
|
|
x = libinput_event_tablet_tool_get_axis_value(
|
2015-11-16 15:36:30 +10:00
|
|
|
tablet_event, LIBINPUT_TABLET_TOOL_AXIS_X);
|
2015-11-16 16:28:55 +10:00
|
|
|
y = libinput_event_tablet_tool_get_axis_value(
|
2015-11-16 15:36:30 +10:00
|
|
|
tablet_event, LIBINPUT_TABLET_TOOL_AXIS_Y);
|
2015-02-16 22:48:40 -05:00
|
|
|
|
|
|
|
|
litest_assert_double_eq(x, libinput_max_x);
|
|
|
|
|
litest_assert_double_eq(y, 0);
|
|
|
|
|
|
|
|
|
|
litest_assert_double_gt(x, last_x);
|
|
|
|
|
litest_assert_double_lt(y, last_y);
|
|
|
|
|
|
|
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
litest_tablet_proximity_out(dev);
|
|
|
|
|
litest_drain_events(li);
|
|
|
|
|
|
|
|
|
|
/* Since we've drained the events and libinput's aware the tool is out
|
|
|
|
|
* of proximity, it should have finally transitioned into left-handed
|
|
|
|
|
* mode, so the axes should be inverted once we bring it back into
|
|
|
|
|
* proximity */
|
|
|
|
|
litest_tablet_proximity_in(dev, 0, 100, axes);
|
|
|
|
|
|
2015-11-16 16:27:46 +10:00
|
|
|
litest_wait_for_event_of_type(li, LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY, -1);
|
2015-02-16 22:48:40 -05:00
|
|
|
|
|
|
|
|
while ((event = libinput_get_event(li))) {
|
2015-11-16 16:28:55 +10:00
|
|
|
tablet_event = libinput_event_get_tablet_tool_event(event);
|
2015-02-16 22:48:40 -05:00
|
|
|
|
2015-11-16 16:28:55 +10:00
|
|
|
last_x = libinput_event_tablet_tool_get_axis_value(
|
2015-11-16 15:36:30 +10:00
|
|
|
tablet_event, LIBINPUT_TABLET_TOOL_AXIS_X);
|
2015-11-16 16:28:55 +10:00
|
|
|
last_y = libinput_event_tablet_tool_get_axis_value(
|
2015-11-16 15:36:30 +10:00
|
|
|
tablet_event, LIBINPUT_TABLET_TOOL_AXIS_Y);
|
2015-02-16 22:48:40 -05:00
|
|
|
|
|
|
|
|
litest_assert_double_eq(last_x, libinput_max_x);
|
|
|
|
|
litest_assert_double_eq(last_y, 0);
|
|
|
|
|
|
|
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
litest_tablet_motion(dev, 100, 0, axes);
|
2015-11-16 16:27:46 +10:00
|
|
|
litest_wait_for_event_of_type(li, LIBINPUT_EVENT_TABLET_TOOL_AXIS, -1);
|
2015-02-16 22:48:40 -05:00
|
|
|
|
|
|
|
|
while ((event = libinput_get_event(li))) {
|
|
|
|
|
double x, y;
|
2015-11-16 16:28:55 +10:00
|
|
|
tablet_event = libinput_event_get_tablet_tool_event(event);
|
2015-02-16 22:48:40 -05:00
|
|
|
|
2015-11-16 16:28:55 +10:00
|
|
|
x = libinput_event_tablet_tool_get_axis_value(
|
2015-11-16 15:36:30 +10:00
|
|
|
tablet_event, LIBINPUT_TABLET_TOOL_AXIS_X);
|
2015-11-16 16:28:55 +10:00
|
|
|
y = libinput_event_tablet_tool_get_axis_value(
|
2015-11-16 15:36:30 +10:00
|
|
|
tablet_event, LIBINPUT_TABLET_TOOL_AXIS_Y);
|
2015-02-16 22:48:40 -05:00
|
|
|
|
|
|
|
|
litest_assert_double_eq(x, 0);
|
|
|
|
|
litest_assert_double_eq(y, libinput_max_y);
|
|
|
|
|
|
|
|
|
|
litest_assert_double_lt(x, last_x);
|
|
|
|
|
litest_assert_double_gt(y, last_y);
|
|
|
|
|
|
|
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
}
|
2015-02-19 12:56:43 +10:00
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
END_TEST
|
|
|
|
|
|
|
|
|
|
START_TEST(no_left_handed)
|
|
|
|
|
{
|
|
|
|
|
struct litest_device *dev = litest_current_device();
|
|
|
|
|
|
|
|
|
|
ck_assert(!libinput_device_config_left_handed_is_available(dev->libinput_device));
|
2015-02-16 22:48:40 -05:00
|
|
|
}
|
|
|
|
|
END_TEST
|
|
|
|
|
|
2014-06-26 21:31:53 -04:00
|
|
|
START_TEST(motion_event_state)
|
|
|
|
|
{
|
|
|
|
|
struct litest_device *dev = litest_current_device();
|
|
|
|
|
struct libinput *li = dev->libinput;
|
|
|
|
|
struct libinput_event *event;
|
2015-11-16 16:28:55 +10:00
|
|
|
struct libinput_event_tablet_tool *tablet_event;
|
2014-06-26 21:31:53 -04:00
|
|
|
int test_x, test_y;
|
|
|
|
|
double last_x, last_y;
|
|
|
|
|
|
|
|
|
|
struct axis_replacement axes[] = {
|
|
|
|
|
{ ABS_DISTANCE, 10 },
|
|
|
|
|
{ -1, -1 }
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
litest_drain_events(li);
|
|
|
|
|
litest_tablet_proximity_in(dev, 5, 100, axes);
|
|
|
|
|
litest_drain_events(li);
|
|
|
|
|
|
|
|
|
|
/* couple of events that go left/bottom to right/top */
|
|
|
|
|
for (test_x = 0, test_y = 100; test_x < 100; test_x += 10, test_y -= 10)
|
2015-02-16 22:48:45 -05:00
|
|
|
litest_tablet_motion(dev, test_x, test_y, axes);
|
2014-06-26 21:31:53 -04:00
|
|
|
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
|
|
|
|
|
while ((event = libinput_get_event(li))) {
|
2015-11-16 16:27:46 +10:00
|
|
|
if (libinput_event_get_type(event) == LIBINPUT_EVENT_TABLET_TOOL_AXIS)
|
2014-06-26 21:31:53 -04:00
|
|
|
break;
|
|
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* pop the first event off */
|
|
|
|
|
ck_assert_notnull(event);
|
2015-11-16 16:28:55 +10:00
|
|
|
tablet_event = libinput_event_get_tablet_tool_event(event);
|
2014-06-26 21:31:53 -04:00
|
|
|
ck_assert_notnull(tablet_event);
|
|
|
|
|
|
2015-11-16 16:28:55 +10:00
|
|
|
last_x = libinput_event_tablet_tool_get_axis_value(tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_X);
|
2015-11-16 16:28:55 +10:00
|
|
|
last_y = libinput_event_tablet_tool_get_axis_value(tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_Y);
|
2014-06-26 21:31:53 -04:00
|
|
|
|
|
|
|
|
/* mark with a button event, then go back to bottom/left */
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_STYLUS, 1);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
|
|
|
|
|
for (test_x = 100, test_y = 0; test_x > 0; test_x -= 10, test_y += 10)
|
2015-02-16 22:48:45 -05:00
|
|
|
litest_tablet_motion(dev, test_x, test_y, axes);
|
2014-06-26 21:31:53 -04:00
|
|
|
|
|
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
ck_assert_int_eq(libinput_next_event_type(li),
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_AXIS);
|
2014-06-26 21:31:53 -04:00
|
|
|
|
|
|
|
|
/* we expect all events up to the button event to go from
|
|
|
|
|
bottom/left to top/right */
|
|
|
|
|
while ((event = libinput_get_event(li))) {
|
|
|
|
|
double x, y;
|
|
|
|
|
|
2015-11-16 16:27:46 +10:00
|
|
|
if (libinput_event_get_type(event) != LIBINPUT_EVENT_TABLET_TOOL_AXIS)
|
2014-06-26 21:31:53 -04:00
|
|
|
break;
|
|
|
|
|
|
2015-11-16 16:28:55 +10:00
|
|
|
tablet_event = libinput_event_get_tablet_tool_event(event);
|
2014-06-26 21:31:53 -04:00
|
|
|
ck_assert_notnull(tablet_event);
|
|
|
|
|
|
2015-11-16 16:28:55 +10:00
|
|
|
x = libinput_event_tablet_tool_get_axis_value(tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_X);
|
2015-11-16 16:28:55 +10:00
|
|
|
y = libinput_event_tablet_tool_get_axis_value(tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_Y);
|
2014-06-26 21:31:53 -04:00
|
|
|
|
|
|
|
|
ck_assert(x > last_x);
|
|
|
|
|
ck_assert(y < last_y);
|
|
|
|
|
|
|
|
|
|
last_x = x;
|
|
|
|
|
last_y = y;
|
|
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ck_assert_int_eq(libinput_event_get_type(event),
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_BUTTON);
|
2014-06-26 21:31:53 -04:00
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
}
|
|
|
|
|
END_TEST
|
|
|
|
|
|
2014-06-11 21:25:37 -04:00
|
|
|
START_TEST(bad_distance_events)
|
|
|
|
|
{
|
|
|
|
|
struct litest_device *dev = litest_current_device();
|
|
|
|
|
struct libinput *li = dev->libinput;
|
|
|
|
|
const struct input_absinfo *absinfo;
|
2014-06-26 18:02:48 -04:00
|
|
|
struct axis_replacement axes[] = {
|
|
|
|
|
{ -1, -1 },
|
|
|
|
|
};
|
2014-06-11 21:25:37 -04:00
|
|
|
|
2014-06-26 18:02:48 -04:00
|
|
|
litest_tablet_proximity_in(dev, 10, 10, axes);
|
2014-06-11 21:25:37 -04:00
|
|
|
litest_tablet_proximity_out(dev);
|
2015-11-12 08:32:34 +10:00
|
|
|
litest_drain_events(li);
|
2014-06-11 21:25:37 -04:00
|
|
|
|
|
|
|
|
absinfo = libevdev_get_abs_info(dev->evdev, ABS_DISTANCE);
|
|
|
|
|
ck_assert(absinfo != NULL);
|
|
|
|
|
|
|
|
|
|
litest_event(dev, EV_ABS, ABS_DISTANCE, absinfo->maximum);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
litest_event(dev, EV_ABS, ABS_DISTANCE, absinfo->minimum);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
|
2014-06-26 18:02:48 -04:00
|
|
|
litest_assert_empty_queue(li);
|
2014-06-11 21:25:37 -04:00
|
|
|
}
|
|
|
|
|
END_TEST
|
|
|
|
|
|
2014-06-11 22:03:55 -04:00
|
|
|
START_TEST(normalization)
|
|
|
|
|
{
|
|
|
|
|
struct litest_device *dev = litest_current_device();
|
|
|
|
|
struct libinput *li = dev->libinput;
|
2015-11-16 16:28:55 +10:00
|
|
|
struct libinput_event_tablet_tool *tablet_event;
|
2014-06-11 22:03:55 -04:00
|
|
|
struct libinput_event *event;
|
|
|
|
|
double pressure,
|
|
|
|
|
tilt_vertical,
|
|
|
|
|
tilt_horizontal;
|
|
|
|
|
const struct input_absinfo *pressure_absinfo,
|
|
|
|
|
*tilt_vertical_absinfo,
|
|
|
|
|
*tilt_horizontal_absinfo;
|
|
|
|
|
|
2015-11-12 08:32:34 +10:00
|
|
|
litest_drain_events(li);
|
2014-06-11 22:03:55 -04:00
|
|
|
|
|
|
|
|
pressure_absinfo = libevdev_get_abs_info(dev->evdev, ABS_PRESSURE);
|
|
|
|
|
tilt_vertical_absinfo = libevdev_get_abs_info(dev->evdev, ABS_TILT_X);
|
|
|
|
|
tilt_horizontal_absinfo = libevdev_get_abs_info(dev->evdev, ABS_TILT_Y);
|
|
|
|
|
|
|
|
|
|
/* Test minimum */
|
|
|
|
|
if (pressure_absinfo != NULL)
|
|
|
|
|
litest_event(dev,
|
|
|
|
|
EV_ABS,
|
|
|
|
|
ABS_PRESSURE,
|
|
|
|
|
pressure_absinfo->minimum);
|
|
|
|
|
|
|
|
|
|
if (tilt_vertical_absinfo != NULL)
|
|
|
|
|
litest_event(dev,
|
|
|
|
|
EV_ABS,
|
|
|
|
|
ABS_TILT_X,
|
|
|
|
|
tilt_vertical_absinfo->minimum);
|
|
|
|
|
|
|
|
|
|
if (tilt_horizontal_absinfo != NULL)
|
|
|
|
|
litest_event(dev,
|
|
|
|
|
EV_ABS,
|
|
|
|
|
ABS_TILT_Y,
|
|
|
|
|
tilt_horizontal_absinfo->minimum);
|
|
|
|
|
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
|
|
|
|
|
while ((event = libinput_get_event(li))) {
|
2015-11-16 16:27:46 +10:00
|
|
|
if (libinput_event_get_type(event) == LIBINPUT_EVENT_TABLET_TOOL_AXIS) {
|
2015-11-16 16:28:55 +10:00
|
|
|
tablet_event = libinput_event_get_tablet_tool_event(event);
|
2014-06-11 22:03:55 -04:00
|
|
|
|
2015-11-16 16:28:55 +10:00
|
|
|
if (libinput_event_tablet_tool_axis_has_changed(
|
2014-06-11 22:03:55 -04:00
|
|
|
tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_PRESSURE)) {
|
2015-11-16 16:28:55 +10:00
|
|
|
pressure = libinput_event_tablet_tool_get_axis_value(
|
2015-11-16 15:36:30 +10:00
|
|
|
tablet_event, LIBINPUT_TABLET_TOOL_AXIS_PRESSURE);
|
2014-06-11 22:03:55 -04:00
|
|
|
|
|
|
|
|
litest_assert_double_eq(pressure, 0);
|
|
|
|
|
}
|
|
|
|
|
|
2015-11-16 16:28:55 +10:00
|
|
|
if (libinput_event_tablet_tool_axis_has_changed(
|
2014-06-11 22:03:55 -04:00
|
|
|
tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_TILT_X)) {
|
2014-06-11 22:03:55 -04:00
|
|
|
tilt_vertical =
|
2015-11-16 16:28:55 +10:00
|
|
|
libinput_event_tablet_tool_get_axis_value(
|
2014-06-11 22:03:55 -04:00
|
|
|
tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_TILT_X);
|
2014-06-11 22:03:55 -04:00
|
|
|
|
|
|
|
|
litest_assert_double_eq(tilt_vertical, -1);
|
|
|
|
|
}
|
|
|
|
|
|
2015-11-16 16:28:55 +10:00
|
|
|
if (libinput_event_tablet_tool_axis_has_changed(
|
2014-06-11 22:03:55 -04:00
|
|
|
tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_TILT_Y)) {
|
2014-06-11 22:03:55 -04:00
|
|
|
tilt_horizontal =
|
2015-11-16 16:28:55 +10:00
|
|
|
libinput_event_tablet_tool_get_axis_value(
|
2014-06-11 22:03:55 -04:00
|
|
|
tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_TILT_Y);
|
2014-06-11 22:03:55 -04:00
|
|
|
|
|
|
|
|
litest_assert_double_eq(tilt_horizontal, -1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Test maximum */
|
|
|
|
|
if (pressure_absinfo != NULL)
|
|
|
|
|
litest_event(dev,
|
|
|
|
|
EV_ABS,
|
|
|
|
|
ABS_PRESSURE,
|
|
|
|
|
pressure_absinfo->maximum);
|
|
|
|
|
|
|
|
|
|
if (tilt_vertical_absinfo != NULL)
|
|
|
|
|
litest_event(dev,
|
|
|
|
|
EV_ABS,
|
|
|
|
|
ABS_TILT_X,
|
2014-12-05 15:13:34 -08:00
|
|
|
tilt_vertical_absinfo->maximum);
|
2014-06-11 22:03:55 -04:00
|
|
|
|
|
|
|
|
if (tilt_horizontal_absinfo != NULL)
|
|
|
|
|
litest_event(dev,
|
|
|
|
|
EV_ABS,
|
|
|
|
|
ABS_TILT_Y,
|
2014-12-05 15:13:34 -08:00
|
|
|
tilt_horizontal_absinfo->maximum);
|
2014-06-11 22:03:55 -04:00
|
|
|
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
|
|
|
|
|
while ((event = libinput_get_event(li))) {
|
2015-11-16 16:27:46 +10:00
|
|
|
if (libinput_event_get_type(event) == LIBINPUT_EVENT_TABLET_TOOL_AXIS) {
|
2015-11-16 16:28:55 +10:00
|
|
|
tablet_event = libinput_event_get_tablet_tool_event(event);
|
2014-06-11 22:03:55 -04:00
|
|
|
|
2015-11-16 16:28:55 +10:00
|
|
|
if (libinput_event_tablet_tool_axis_has_changed(
|
2014-06-11 22:03:55 -04:00
|
|
|
tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_PRESSURE)) {
|
2015-11-16 16:28:55 +10:00
|
|
|
pressure = libinput_event_tablet_tool_get_axis_value(
|
2015-11-16 15:36:30 +10:00
|
|
|
tablet_event, LIBINPUT_TABLET_TOOL_AXIS_PRESSURE);
|
2014-06-11 22:03:55 -04:00
|
|
|
|
|
|
|
|
litest_assert_double_eq(pressure, 1);
|
|
|
|
|
}
|
|
|
|
|
|
2015-11-16 16:28:55 +10:00
|
|
|
if (libinput_event_tablet_tool_axis_has_changed(
|
2014-06-11 22:03:55 -04:00
|
|
|
tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_TILT_X)) {
|
2014-06-11 22:03:55 -04:00
|
|
|
tilt_vertical =
|
2015-11-16 16:28:55 +10:00
|
|
|
libinput_event_tablet_tool_get_axis_value(
|
2014-06-11 22:03:55 -04:00
|
|
|
tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_TILT_X);
|
2014-06-11 22:03:55 -04:00
|
|
|
|
|
|
|
|
litest_assert_double_eq(tilt_vertical, 1);
|
|
|
|
|
}
|
|
|
|
|
|
2015-11-16 16:28:55 +10:00
|
|
|
if (libinput_event_tablet_tool_axis_has_changed(
|
2014-06-11 22:03:55 -04:00
|
|
|
tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_TILT_Y)) {
|
2014-06-11 22:03:55 -04:00
|
|
|
tilt_horizontal =
|
2015-11-16 16:28:55 +10:00
|
|
|
libinput_event_tablet_tool_get_axis_value(
|
2014-06-11 22:03:55 -04:00
|
|
|
tablet_event,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_TILT_Y);
|
2014-06-11 22:03:55 -04:00
|
|
|
|
|
|
|
|
litest_assert_double_eq(tilt_horizontal, 1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
END_TEST
|
|
|
|
|
|
2014-06-19 01:18:09 -04:00
|
|
|
START_TEST(tool_serial)
|
|
|
|
|
{
|
|
|
|
|
struct litest_device *dev = litest_current_device();
|
|
|
|
|
struct libinput *li = dev->libinput;
|
2015-11-16 16:28:55 +10:00
|
|
|
struct libinput_event_tablet_tool *tablet_event;
|
2014-06-19 01:18:09 -04:00
|
|
|
struct libinput_event *event;
|
2015-11-16 15:34:19 +10:00
|
|
|
struct libinput_tablet_tool *tool;
|
2014-06-19 01:18:09 -04:00
|
|
|
|
|
|
|
|
litest_drain_events(li);
|
|
|
|
|
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_TOOL_PEN, 1);
|
|
|
|
|
litest_event(dev, EV_MSC, MSC_SERIAL, 1000);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
|
2015-02-17 08:17:37 +10:00
|
|
|
litest_wait_for_event_of_type(li,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY,
|
2015-02-17 08:17:37 +10:00
|
|
|
-1);
|
|
|
|
|
event = libinput_get_event(li);
|
2015-11-16 16:28:55 +10:00
|
|
|
tablet_event = libinput_event_get_tablet_tool_event(event);
|
|
|
|
|
tool = libinput_event_tablet_tool_get_tool(tablet_event);
|
2015-02-17 08:17:37 +10:00
|
|
|
ck_assert_uint_eq(libinput_tool_get_serial(tool), 1000);
|
|
|
|
|
libinput_event_destroy(event);
|
2014-06-19 01:18:09 -04:00
|
|
|
}
|
|
|
|
|
END_TEST
|
|
|
|
|
|
|
|
|
|
START_TEST(serial_changes_tool)
|
|
|
|
|
{
|
|
|
|
|
struct litest_device *dev = litest_current_device();
|
|
|
|
|
struct libinput *li = dev->libinput;
|
2015-11-16 16:28:55 +10:00
|
|
|
struct libinput_event_tablet_tool *tablet_event;
|
2014-06-19 01:18:09 -04:00
|
|
|
struct libinput_event *event;
|
2015-11-16 15:34:19 +10:00
|
|
|
struct libinput_tablet_tool *tool;
|
2014-06-19 01:18:09 -04:00
|
|
|
|
|
|
|
|
litest_drain_events(li);
|
|
|
|
|
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_TOOL_PEN, 1);
|
|
|
|
|
litest_event(dev, EV_MSC, MSC_SERIAL, 1000);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
2014-06-26 21:31:51 -04:00
|
|
|
litest_event(dev, EV_KEY, BTN_TOOL_PEN, 0);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
2014-06-19 01:18:09 -04:00
|
|
|
litest_drain_events(li);
|
|
|
|
|
|
2014-06-26 21:31:51 -04:00
|
|
|
litest_event(dev, EV_KEY, BTN_TOOL_PEN, 1);
|
2014-06-19 01:18:09 -04:00
|
|
|
litest_event(dev, EV_MSC, MSC_SERIAL, 2000);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
|
2015-02-17 08:17:37 +10:00
|
|
|
litest_wait_for_event_of_type(li,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY,
|
2015-02-17 08:17:37 +10:00
|
|
|
-1);
|
|
|
|
|
event = libinput_get_event(li);
|
2015-11-16 16:28:55 +10:00
|
|
|
tablet_event = libinput_event_get_tablet_tool_event(event);
|
|
|
|
|
tool = libinput_event_tablet_tool_get_tool(tablet_event);
|
2014-06-19 01:18:09 -04:00
|
|
|
|
2015-02-17 08:17:37 +10:00
|
|
|
ck_assert_uint_eq(libinput_tool_get_serial(tool), 2000);
|
|
|
|
|
libinput_event_destroy(event);
|
2014-06-19 01:18:09 -04:00
|
|
|
}
|
|
|
|
|
END_TEST
|
|
|
|
|
|
|
|
|
|
START_TEST(invalid_serials)
|
|
|
|
|
{
|
|
|
|
|
struct litest_device *dev = litest_current_device();
|
|
|
|
|
struct libinput *li = dev->libinput;
|
|
|
|
|
struct libinput_event *event;
|
2015-11-16 16:28:55 +10:00
|
|
|
struct libinput_event_tablet_tool *tablet_event;
|
2015-11-16 15:34:19 +10:00
|
|
|
struct libinput_tablet_tool *tool;
|
2014-06-19 01:18:09 -04:00
|
|
|
|
|
|
|
|
litest_drain_events(li);
|
|
|
|
|
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_TOOL_PEN, 1);
|
|
|
|
|
litest_event(dev, EV_MSC, MSC_SERIAL, 1000);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
2014-06-26 21:31:51 -04:00
|
|
|
litest_event(dev, EV_KEY, BTN_TOOL_PEN, 0);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
2014-06-19 01:18:09 -04:00
|
|
|
litest_drain_events(li);
|
|
|
|
|
|
2014-06-26 21:31:51 -04:00
|
|
|
litest_event(dev, EV_KEY, BTN_TOOL_PEN, 1);
|
2014-06-19 01:18:09 -04:00
|
|
|
litest_event(dev, EV_MSC, MSC_SERIAL, -1);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
while ((event = libinput_get_event(li))) {
|
|
|
|
|
if (libinput_event_get_type(event) ==
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY) {
|
2015-11-16 16:28:55 +10:00
|
|
|
tablet_event = libinput_event_get_tablet_tool_event(event);
|
|
|
|
|
tool = libinput_event_tablet_tool_get_tool(tablet_event);
|
2014-06-19 01:18:09 -04:00
|
|
|
|
2014-06-26 21:31:51 -04:00
|
|
|
ck_assert_uint_eq(libinput_tool_get_serial(tool), 1000);
|
|
|
|
|
}
|
2014-06-19 01:18:09 -04:00
|
|
|
|
|
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
END_TEST
|
|
|
|
|
|
2014-06-27 11:05:30 +10:00
|
|
|
START_TEST(tool_ref)
|
|
|
|
|
{
|
|
|
|
|
struct litest_device *dev = litest_current_device();
|
|
|
|
|
struct libinput *li = dev->libinput;
|
2015-11-16 16:28:55 +10:00
|
|
|
struct libinput_event_tablet_tool *tablet_event;
|
2014-06-27 11:05:30 +10:00
|
|
|
struct libinput_event *event;
|
2015-11-16 15:34:19 +10:00
|
|
|
struct libinput_tablet_tool *tool;
|
2014-06-27 11:05:30 +10:00
|
|
|
|
|
|
|
|
litest_drain_events(li);
|
|
|
|
|
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_TOOL_PEN, 1);
|
|
|
|
|
litest_event(dev, EV_MSC, MSC_SERIAL, 1000);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
|
2015-02-17 08:22:24 +10:00
|
|
|
litest_wait_for_event_of_type(li,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY,
|
2015-02-17 08:22:24 +10:00
|
|
|
-1);
|
|
|
|
|
event = libinput_get_event(li);
|
2015-11-16 16:28:55 +10:00
|
|
|
tablet_event = libinput_event_get_tablet_tool_event(event);
|
|
|
|
|
tool = libinput_event_tablet_tool_get_tool(tablet_event);
|
2014-06-27 11:05:30 +10:00
|
|
|
|
|
|
|
|
ck_assert_notnull(tool);
|
|
|
|
|
ck_assert(tool == libinput_tool_ref(tool));
|
|
|
|
|
ck_assert(tool == libinput_tool_unref(tool));
|
|
|
|
|
ck_assert(libinput_tool_unref(tool) == NULL);
|
|
|
|
|
|
|
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
}
|
|
|
|
|
END_TEST
|
|
|
|
|
|
2014-06-20 14:51:28 +10:00
|
|
|
START_TEST(pad_buttons_ignored)
|
|
|
|
|
{
|
|
|
|
|
struct litest_device *dev = litest_current_device();
|
|
|
|
|
struct libinput *li = dev->libinput;
|
|
|
|
|
struct libinput_event *event;
|
|
|
|
|
struct axis_replacement axes[] = {
|
|
|
|
|
{ ABS_DISTANCE, 10 },
|
|
|
|
|
{ -1, -1 }
|
|
|
|
|
};
|
|
|
|
|
int button;
|
|
|
|
|
|
|
|
|
|
litest_drain_events(li);
|
|
|
|
|
|
|
|
|
|
for (button = BTN_0; button < BTN_MOUSE; button++) {
|
|
|
|
|
litest_event(dev, EV_KEY, button, 1);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
litest_event(dev, EV_KEY, button, 0);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
while ((event = libinput_get_event(li))) {
|
2014-06-25 02:30:17 -04:00
|
|
|
ck_assert_int_ne(libinput_event_get_type(event),
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_BUTTON);
|
2014-06-20 14:51:28 +10:00
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* same thing while in prox */
|
|
|
|
|
litest_tablet_proximity_in(dev, 10, 10, axes);
|
|
|
|
|
for (button = BTN_0; button < BTN_MOUSE; button++) {
|
|
|
|
|
litest_event(dev, EV_KEY, button, 1);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
litest_event(dev, EV_KEY, button, 0);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
}
|
|
|
|
|
litest_tablet_proximity_out(dev);
|
|
|
|
|
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
while ((event = libinput_get_event(li))) {
|
2014-06-25 02:30:17 -04:00
|
|
|
ck_assert_int_ne(libinput_event_get_type(event),
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_BUTTON);
|
2014-06-20 14:51:28 +10:00
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
END_TEST
|
|
|
|
|
|
2014-08-07 19:00:52 -04:00
|
|
|
START_TEST(tools_with_serials)
|
|
|
|
|
{
|
|
|
|
|
struct libinput *li = litest_create_context();
|
|
|
|
|
struct litest_device *dev[2];
|
2015-11-16 15:34:19 +10:00
|
|
|
struct libinput_tablet_tool *tool[2] = {0};
|
2014-08-07 19:00:52 -04:00
|
|
|
struct libinput_event *event;
|
|
|
|
|
int i;
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < 2; i++) {
|
|
|
|
|
dev[i] = litest_add_device_with_overrides(li,
|
|
|
|
|
LITEST_WACOM_INTUOS,
|
|
|
|
|
NULL,
|
|
|
|
|
NULL,
|
|
|
|
|
NULL,
|
|
|
|
|
NULL);
|
2014-09-22 15:48:22 +10:00
|
|
|
/* WARNING: this test fails if UI_GET_SYSNAME isn't
|
|
|
|
|
* available or isn't used by libevdev (1.3, commit 2ff45c73).
|
|
|
|
|
* Put a sleep(1) here and that usually fixes it.
|
|
|
|
|
*/
|
2014-08-07 19:00:52 -04:00
|
|
|
|
|
|
|
|
litest_event(dev[i], EV_KEY, BTN_TOOL_PEN, 1);
|
|
|
|
|
litest_event(dev[i], EV_MSC, MSC_SERIAL, 100);
|
|
|
|
|
litest_event(dev[i], EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
while ((event = libinput_get_event(li))) {
|
|
|
|
|
if (libinput_event_get_type(event) ==
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY) {
|
2015-11-16 16:28:55 +10:00
|
|
|
struct libinput_event_tablet_tool *t =
|
|
|
|
|
libinput_event_get_tablet_tool_event(event);
|
2014-08-07 19:00:52 -04:00
|
|
|
|
2015-11-16 16:28:55 +10:00
|
|
|
tool[i] = libinput_event_tablet_tool_get_tool(t);
|
2014-08-07 19:00:52 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* We should get the same object for both devices */
|
|
|
|
|
ck_assert_notnull(tool[0]);
|
|
|
|
|
ck_assert_notnull(tool[1]);
|
|
|
|
|
ck_assert_ptr_eq(tool[0], tool[1]);
|
|
|
|
|
|
|
|
|
|
litest_delete_device(dev[0]);
|
|
|
|
|
litest_delete_device(dev[1]);
|
|
|
|
|
libinput_unref(li);
|
|
|
|
|
}
|
|
|
|
|
END_TEST
|
|
|
|
|
|
|
|
|
|
START_TEST(tools_without_serials)
|
|
|
|
|
{
|
|
|
|
|
struct libinput *li = litest_create_context();
|
|
|
|
|
struct litest_device *dev[2];
|
2015-11-16 15:34:19 +10:00
|
|
|
struct libinput_tablet_tool *tool[2] = {0};
|
2014-08-07 19:00:52 -04:00
|
|
|
struct libinput_event *event;
|
|
|
|
|
int i;
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < 2; i++) {
|
|
|
|
|
dev[i] = litest_add_device_with_overrides(li,
|
|
|
|
|
LITEST_WACOM_ISDV4,
|
|
|
|
|
NULL,
|
|
|
|
|
NULL,
|
|
|
|
|
NULL,
|
|
|
|
|
NULL);
|
|
|
|
|
|
2014-09-22 15:48:22 +10:00
|
|
|
/* WARNING: this test fails if UI_GET_SYSNAME isn't
|
|
|
|
|
* available or isn't used by libevdev (1.3, commit 2ff45c73).
|
|
|
|
|
* Put a sleep(1) here and that usually fixes it.
|
|
|
|
|
*/
|
|
|
|
|
|
2014-08-07 19:00:52 -04:00
|
|
|
litest_event(dev[i], EV_KEY, BTN_TOOL_PEN, 1);
|
|
|
|
|
litest_event(dev[i], EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
while ((event = libinput_get_event(li))) {
|
|
|
|
|
if (libinput_event_get_type(event) ==
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY) {
|
2015-11-16 16:28:55 +10:00
|
|
|
struct libinput_event_tablet_tool *t =
|
|
|
|
|
libinput_event_get_tablet_tool_event(event);
|
2014-08-07 19:00:52 -04:00
|
|
|
|
2015-11-16 16:28:55 +10:00
|
|
|
tool[i] = libinput_event_tablet_tool_get_tool(t);
|
2014-08-07 19:00:52 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* We should get different tool objects for each device */
|
|
|
|
|
ck_assert_notnull(tool[0]);
|
|
|
|
|
ck_assert_notnull(tool[1]);
|
|
|
|
|
ck_assert_ptr_ne(tool[0], tool[1]);
|
|
|
|
|
|
|
|
|
|
litest_delete_device(dev[0]);
|
|
|
|
|
litest_delete_device(dev[1]);
|
|
|
|
|
libinput_unref(li);
|
|
|
|
|
}
|
|
|
|
|
END_TEST
|
|
|
|
|
|
2014-08-07 22:02:22 -04:00
|
|
|
START_TEST(tool_capabilities)
|
|
|
|
|
{
|
|
|
|
|
struct libinput *li = litest_create_context();
|
|
|
|
|
struct litest_device *intuos;
|
|
|
|
|
struct litest_device *bamboo;
|
|
|
|
|
struct libinput_event *event;
|
2015-11-16 16:28:55 +10:00
|
|
|
struct libinput_event_tablet_tool *t;
|
2015-11-16 15:34:19 +10:00
|
|
|
struct libinput_tablet_tool *tool;
|
2014-08-07 22:02:22 -04:00
|
|
|
|
|
|
|
|
/* The axis capabilities of a tool can differ depending on the type of
|
|
|
|
|
* tablet the tool is being used with */
|
2015-02-26 13:41:19 +10:00
|
|
|
bamboo = litest_add_device(li, LITEST_WACOM_BAMBOO);
|
|
|
|
|
intuos = litest_add_device(li, LITEST_WACOM_INTUOS);
|
2014-08-07 22:02:22 -04:00
|
|
|
|
|
|
|
|
litest_event(bamboo, EV_KEY, BTN_TOOL_PEN, 1);
|
|
|
|
|
litest_event(bamboo, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
|
2015-02-26 13:41:19 +10:00
|
|
|
litest_wait_for_event_of_type(li,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY,
|
2015-02-26 13:41:19 +10:00
|
|
|
-1);
|
|
|
|
|
|
|
|
|
|
event = libinput_get_event(li);
|
2015-11-16 16:28:55 +10:00
|
|
|
t = libinput_event_get_tablet_tool_event(event);
|
|
|
|
|
tool = libinput_event_tablet_tool_get_tool(t);
|
2015-02-26 13:41:19 +10:00
|
|
|
|
|
|
|
|
ck_assert(libinput_tool_has_axis(tool,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_PRESSURE));
|
2015-02-26 13:41:19 +10:00
|
|
|
ck_assert(libinput_tool_has_axis(tool,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_DISTANCE));
|
2015-02-26 13:41:19 +10:00
|
|
|
ck_assert(!libinput_tool_has_axis(tool,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_TILT_X));
|
2015-02-26 13:41:19 +10:00
|
|
|
ck_assert(!libinput_tool_has_axis(tool,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_TILT_Y));
|
2015-02-26 13:41:19 +10:00
|
|
|
|
|
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
litest_assert_empty_queue(li);
|
2014-08-07 22:02:22 -04:00
|
|
|
|
|
|
|
|
litest_event(intuos, EV_KEY, BTN_TOOL_PEN, 1);
|
|
|
|
|
litest_event(intuos, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
|
2015-02-26 13:41:19 +10:00
|
|
|
litest_wait_for_event_of_type(li,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY,
|
2015-02-26 13:41:19 +10:00
|
|
|
-1);
|
2014-08-07 22:02:22 -04:00
|
|
|
|
2015-02-26 13:41:19 +10:00
|
|
|
event = libinput_get_event(li);
|
2015-11-16 16:28:55 +10:00
|
|
|
t = libinput_event_get_tablet_tool_event(event);
|
|
|
|
|
tool = libinput_event_tablet_tool_get_tool(t);
|
2015-02-26 13:41:19 +10:00
|
|
|
|
|
|
|
|
ck_assert(libinput_tool_has_axis(tool,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_PRESSURE));
|
2015-02-26 13:41:19 +10:00
|
|
|
ck_assert(libinput_tool_has_axis(tool,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_DISTANCE));
|
2015-02-26 13:41:19 +10:00
|
|
|
ck_assert(libinput_tool_has_axis(tool,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_TILT_X));
|
2015-02-26 13:41:19 +10:00
|
|
|
ck_assert(libinput_tool_has_axis(tool,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_TILT_Y));
|
2015-02-26 13:41:19 +10:00
|
|
|
|
|
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
litest_assert_empty_queue(li);
|
2014-08-07 22:02:22 -04:00
|
|
|
|
|
|
|
|
litest_delete_device(bamboo);
|
|
|
|
|
litest_delete_device(intuos);
|
|
|
|
|
libinput_unref(li);
|
|
|
|
|
}
|
|
|
|
|
END_TEST
|
|
|
|
|
|
2015-02-26 13:55:08 +10:00
|
|
|
START_TEST(tool_in_prox_before_start)
|
|
|
|
|
{
|
|
|
|
|
struct libinput *li;
|
|
|
|
|
struct litest_device *dev = litest_current_device();
|
|
|
|
|
struct libinput_event *event;
|
|
|
|
|
struct axis_replacement axes[] = {
|
|
|
|
|
{ ABS_DISTANCE, 10 },
|
|
|
|
|
{ ABS_TILT_X, 0 },
|
|
|
|
|
{ ABS_TILT_Y, 0 },
|
|
|
|
|
{ -1, -1 }
|
|
|
|
|
};
|
|
|
|
|
const char *devnode;
|
|
|
|
|
|
|
|
|
|
litest_tablet_proximity_in(dev, 10, 10, axes);
|
|
|
|
|
|
|
|
|
|
/* for simplicity, we create a new litest context */
|
|
|
|
|
devnode = libevdev_uinput_get_devnode(dev->uinput);
|
|
|
|
|
li = litest_create_context();
|
|
|
|
|
libinput_path_add_device(li, devnode);
|
|
|
|
|
|
|
|
|
|
litest_wait_for_event_of_type(li,
|
|
|
|
|
LIBINPUT_EVENT_DEVICE_ADDED,
|
|
|
|
|
-1);
|
|
|
|
|
event = libinput_get_event(li);
|
|
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
|
|
|
|
|
litest_wait_for_event_of_type(li,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY,
|
2015-02-26 13:55:08 +10:00
|
|
|
-1);
|
|
|
|
|
event = libinput_get_event(li);
|
|
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
litest_assert_empty_queue(li);
|
|
|
|
|
|
|
|
|
|
litest_tablet_motion(dev, 10, 20, axes);
|
|
|
|
|
litest_tablet_motion(dev, 30, 40, axes);
|
|
|
|
|
|
2015-11-16 16:27:46 +10:00
|
|
|
litest_assert_only_typed_events(li, LIBINPUT_EVENT_TABLET_TOOL_AXIS);
|
2015-02-26 13:55:08 +10:00
|
|
|
litest_assert_empty_queue(li);
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_STYLUS, 1);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_STYLUS, 1);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
2015-11-16 16:27:46 +10:00
|
|
|
litest_assert_only_typed_events(li, LIBINPUT_EVENT_TABLET_TOOL_BUTTON);
|
2015-02-26 13:55:08 +10:00
|
|
|
litest_tablet_proximity_out(dev);
|
|
|
|
|
|
|
|
|
|
litest_wait_for_event_of_type(li,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY,
|
2015-02-26 13:55:08 +10:00
|
|
|
-1);
|
|
|
|
|
libinput_unref(li);
|
|
|
|
|
}
|
|
|
|
|
END_TEST
|
|
|
|
|
|
2015-02-19 17:18:58 +10:00
|
|
|
START_TEST(mouse_tool)
|
|
|
|
|
{
|
|
|
|
|
struct litest_device *dev = litest_current_device();
|
|
|
|
|
struct libinput *li = dev->libinput;
|
|
|
|
|
struct libinput_event *event;
|
2015-11-16 16:28:55 +10:00
|
|
|
struct libinput_event_tablet_tool *tev;
|
2015-11-16 15:34:19 +10:00
|
|
|
struct libinput_tablet_tool *tool;
|
2015-02-19 17:18:58 +10:00
|
|
|
|
|
|
|
|
if (!libevdev_has_event_code(dev->evdev,
|
|
|
|
|
EV_KEY,
|
|
|
|
|
BTN_TOOL_MOUSE))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
litest_drain_events(li);
|
|
|
|
|
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_TOOL_MOUSE, 1);
|
|
|
|
|
litest_event(dev, EV_MSC, MSC_SERIAL, 1000);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
|
|
|
|
|
litest_wait_for_event_of_type(li,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY,
|
2015-02-19 17:18:58 +10:00
|
|
|
-1);
|
|
|
|
|
event = libinput_get_event(li);
|
2015-11-16 16:28:55 +10:00
|
|
|
tev = libinput_event_get_tablet_tool_event(event);
|
|
|
|
|
tool = libinput_event_tablet_tool_get_tool(tev);
|
2015-02-19 17:18:58 +10:00
|
|
|
ck_assert_notnull(tool);
|
|
|
|
|
ck_assert_int_eq(libinput_tool_get_type(tool),
|
2015-11-16 15:40:43 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_TYPE_MOUSE);
|
2015-02-19 17:18:58 +10:00
|
|
|
|
|
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
}
|
|
|
|
|
END_TEST
|
|
|
|
|
|
|
|
|
|
START_TEST(mouse_buttons)
|
|
|
|
|
{
|
|
|
|
|
struct litest_device *dev = litest_current_device();
|
|
|
|
|
struct libinput *li = dev->libinput;
|
|
|
|
|
struct libinput_event *event;
|
2015-11-16 16:28:55 +10:00
|
|
|
struct libinput_event_tablet_tool *tev;
|
2015-11-16 15:34:19 +10:00
|
|
|
struct libinput_tablet_tool *tool;
|
2015-02-19 17:18:58 +10:00
|
|
|
int code;
|
|
|
|
|
|
|
|
|
|
if (!libevdev_has_event_code(dev->evdev,
|
|
|
|
|
EV_KEY,
|
|
|
|
|
BTN_TOOL_MOUSE))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
litest_drain_events(li);
|
|
|
|
|
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_TOOL_MOUSE, 1);
|
|
|
|
|
litest_event(dev, EV_ABS, ABS_MISC, 0x806); /* 5-button mouse tool_id */
|
|
|
|
|
litest_event(dev, EV_MSC, MSC_SERIAL, 1000);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
|
|
|
|
|
litest_wait_for_event_of_type(li,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY,
|
2015-02-19 17:18:58 +10:00
|
|
|
-1);
|
|
|
|
|
event = libinput_get_event(li);
|
2015-11-16 16:28:55 +10:00
|
|
|
tev = libinput_event_get_tablet_tool_event(event);
|
|
|
|
|
tool = libinput_event_tablet_tool_get_tool(tev);
|
2015-02-19 17:18:58 +10:00
|
|
|
ck_assert_notnull(tool);
|
|
|
|
|
libinput_tool_ref(tool);
|
|
|
|
|
|
|
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
|
|
|
|
|
for (code = BTN_LEFT; code <= BTN_TASK; code++) {
|
|
|
|
|
bool has_button = libevdev_has_event_code(dev->evdev,
|
|
|
|
|
EV_KEY,
|
|
|
|
|
code);
|
|
|
|
|
ck_assert_int_eq(!!has_button,
|
|
|
|
|
!!libinput_tool_has_button(tool, code));
|
|
|
|
|
|
|
|
|
|
if (!has_button)
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
litest_event(dev, EV_KEY, code, 1);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
litest_event(dev, EV_KEY, code, 0);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
libinput_dispatch(li);
|
|
|
|
|
|
|
|
|
|
litest_assert_tablet_button_event(li,
|
|
|
|
|
code,
|
|
|
|
|
LIBINPUT_BUTTON_STATE_PRESSED);
|
|
|
|
|
litest_assert_tablet_button_event(li,
|
|
|
|
|
code,
|
|
|
|
|
LIBINPUT_BUTTON_STATE_RELEASED);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
libinput_tool_unref(tool);
|
|
|
|
|
}
|
|
|
|
|
END_TEST
|
|
|
|
|
|
2015-02-16 15:19:44 +10:00
|
|
|
START_TEST(mouse_rotation)
|
|
|
|
|
{
|
|
|
|
|
struct litest_device *dev = litest_current_device();
|
|
|
|
|
struct libinput *li = dev->libinput;
|
|
|
|
|
struct libinput_event *event;
|
2015-11-16 16:28:55 +10:00
|
|
|
struct libinput_event_tablet_tool *tev;
|
2015-02-16 15:19:44 +10:00
|
|
|
int angle;
|
|
|
|
|
int tilt_center_x, tilt_center_y;
|
|
|
|
|
const struct input_absinfo *abs;
|
|
|
|
|
double val, old_val = 0;
|
|
|
|
|
|
|
|
|
|
struct axis_replacement axes[] = {
|
|
|
|
|
{ ABS_DISTANCE, 10 },
|
|
|
|
|
{ ABS_TILT_X, 0 },
|
|
|
|
|
{ ABS_TILT_Y, 0 },
|
|
|
|
|
{ -1, -1 }
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
if (!libevdev_has_event_code(dev->evdev,
|
|
|
|
|
EV_KEY,
|
|
|
|
|
BTN_TOOL_MOUSE))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
abs = libevdev_get_abs_info(dev->evdev, ABS_TILT_X);
|
|
|
|
|
ck_assert_notnull(abs);
|
|
|
|
|
tilt_center_x = (abs->maximum - abs->minimum + 1) / 2;
|
|
|
|
|
|
|
|
|
|
abs = libevdev_get_abs_info(dev->evdev, ABS_TILT_Y);
|
|
|
|
|
ck_assert_notnull(abs);
|
|
|
|
|
tilt_center_y = (abs->maximum - abs->minimum + 1) / 2;
|
|
|
|
|
|
|
|
|
|
litest_drain_events(li);
|
|
|
|
|
|
|
|
|
|
litest_push_event_frame(dev);
|
|
|
|
|
litest_tablet_proximity_in(dev, 10, 10, axes);
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_TOOL_MOUSE, 1);
|
|
|
|
|
litest_pop_event_frame(dev);
|
|
|
|
|
|
|
|
|
|
litest_drain_events(li);
|
|
|
|
|
|
|
|
|
|
/* cos/sin are 90 degrees offset from the north-is-zero that
|
|
|
|
|
libinput uses. 175 is the CCW offset in the mouse HW */
|
|
|
|
|
for (angle = 5; angle < 360; angle += 5) {
|
|
|
|
|
double a = (angle - 90 - 175)/180.0 * M_PI;
|
|
|
|
|
int x, y;
|
|
|
|
|
|
|
|
|
|
x = cos(a) * 20 + tilt_center_x;
|
|
|
|
|
y = sin(a) * 20 + tilt_center_y;
|
|
|
|
|
|
|
|
|
|
litest_event(dev, EV_ABS, ABS_TILT_X, x);
|
|
|
|
|
litest_event(dev, EV_ABS, ABS_TILT_Y, y);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
|
|
|
|
|
litest_wait_for_event_of_type(li,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_AXIS,
|
2015-02-16 15:19:44 +10:00
|
|
|
-1);
|
|
|
|
|
event = libinput_get_event(li);
|
2015-11-16 16:28:55 +10:00
|
|
|
tev = libinput_event_get_tablet_tool_event(event);
|
|
|
|
|
ck_assert(libinput_event_tablet_tool_axis_has_changed(tev,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_ROTATION_Z));
|
2015-11-16 16:28:55 +10:00
|
|
|
val = libinput_event_tablet_tool_get_axis_value(tev,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_ROTATION_Z);
|
2015-02-16 15:19:44 +10:00
|
|
|
|
|
|
|
|
/* rounding error galore, we can't test for anything more
|
|
|
|
|
precise than these */
|
|
|
|
|
litest_assert_double_lt(val, 360.0);
|
|
|
|
|
litest_assert_double_gt(val, old_val);
|
|
|
|
|
litest_assert_double_lt(val, angle + 5);
|
|
|
|
|
|
|
|
|
|
old_val = val;
|
|
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
litest_assert_empty_queue(li);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
END_TEST
|
|
|
|
|
|
2015-02-26 13:14:25 +10:00
|
|
|
START_TEST(mouse_wheel)
|
|
|
|
|
{
|
|
|
|
|
struct litest_device *dev = litest_current_device();
|
|
|
|
|
struct libinput *li = dev->libinput;
|
|
|
|
|
struct libinput_event *event;
|
2015-11-16 16:28:55 +10:00
|
|
|
struct libinput_event_tablet_tool *tev;
|
2015-11-16 15:34:19 +10:00
|
|
|
struct libinput_tablet_tool *tool;
|
2015-02-26 13:14:25 +10:00
|
|
|
const struct input_absinfo *abs;
|
|
|
|
|
double val;
|
|
|
|
|
int i;
|
|
|
|
|
|
|
|
|
|
if (!libevdev_has_event_code(dev->evdev,
|
|
|
|
|
EV_REL,
|
|
|
|
|
REL_WHEEL))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
litest_drain_events(li);
|
|
|
|
|
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_TOOL_MOUSE, 1);
|
|
|
|
|
litest_event(dev, EV_ABS, ABS_MISC, 0x806); /* 5-button mouse tool_id */
|
|
|
|
|
litest_event(dev, EV_MSC, MSC_SERIAL, 1000);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
|
|
|
|
|
litest_wait_for_event_of_type(li,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY,
|
2015-02-26 13:14:25 +10:00
|
|
|
-1);
|
|
|
|
|
event = libinput_get_event(li);
|
2015-11-16 16:28:55 +10:00
|
|
|
tev = libinput_event_get_tablet_tool_event(event);
|
|
|
|
|
tool = libinput_event_tablet_tool_get_tool(tev);
|
2015-02-26 13:14:25 +10:00
|
|
|
ck_assert_notnull(tool);
|
|
|
|
|
libinput_tool_ref(tool);
|
|
|
|
|
|
|
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
|
|
|
|
|
ck_assert(libinput_tool_has_axis(tool,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_REL_WHEEL));
|
2015-02-26 13:14:25 +10:00
|
|
|
|
|
|
|
|
for (i = 0; i < 3; i++) {
|
|
|
|
|
litest_event(dev, EV_REL, REL_WHEEL, -1);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
|
2015-11-16 16:27:46 +10:00
|
|
|
litest_wait_for_event_of_type(li, LIBINPUT_EVENT_TABLET_TOOL_AXIS, -1);
|
2015-02-26 13:14:25 +10:00
|
|
|
|
|
|
|
|
event = libinput_get_event(li);
|
2015-11-16 16:28:55 +10:00
|
|
|
tev = libinput_event_get_tablet_tool_event(event);
|
|
|
|
|
ck_assert(libinput_event_tablet_tool_axis_has_changed(tev,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_REL_WHEEL));
|
2015-11-16 16:28:55 +10:00
|
|
|
val = libinput_event_tablet_tool_get_axis_value(tev,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_REL_WHEEL);
|
2015-02-26 13:14:25 +10:00
|
|
|
ck_assert_int_eq(val, 0);
|
|
|
|
|
|
2015-11-16 16:28:55 +10:00
|
|
|
val = libinput_event_tablet_tool_get_axis_delta(tev,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_REL_WHEEL);
|
2015-02-26 13:14:25 +10:00
|
|
|
ck_assert_int_eq(val, 15);
|
|
|
|
|
|
2015-11-16 16:28:55 +10:00
|
|
|
val = libinput_event_tablet_tool_get_axis_delta_discrete(tev,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_REL_WHEEL);
|
2015-02-26 13:14:25 +10:00
|
|
|
ck_assert_int_eq(val, 1);
|
|
|
|
|
|
|
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
|
|
|
|
|
litest_assert_empty_queue(li);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (i = 2; i < 5; i++) {
|
|
|
|
|
/* send x/y events to make sure we reset the wheel */
|
|
|
|
|
abs = libevdev_get_abs_info(dev->evdev, ABS_X);
|
|
|
|
|
litest_event(dev, EV_ABS, ABS_X, (abs->maximum - abs->minimum)/i);
|
|
|
|
|
abs = libevdev_get_abs_info(dev->evdev, ABS_Y);
|
|
|
|
|
litest_event(dev, EV_ABS, ABS_Y, (abs->maximum - abs->minimum)/i);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
|
2015-11-16 16:27:46 +10:00
|
|
|
litest_wait_for_event_of_type(li, LIBINPUT_EVENT_TABLET_TOOL_AXIS, -1);
|
2015-02-26 13:14:25 +10:00
|
|
|
|
|
|
|
|
event = libinput_get_event(li);
|
2015-11-16 16:28:55 +10:00
|
|
|
tev = libinput_event_get_tablet_tool_event(event);
|
|
|
|
|
ck_assert(!libinput_event_tablet_tool_axis_has_changed(tev,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_REL_WHEEL));
|
2015-11-16 16:28:55 +10:00
|
|
|
val = libinput_event_tablet_tool_get_axis_value(tev,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_REL_WHEEL);
|
2015-02-26 13:14:25 +10:00
|
|
|
ck_assert_int_eq(val, 0);
|
|
|
|
|
|
2015-11-16 16:28:55 +10:00
|
|
|
val = libinput_event_tablet_tool_get_axis_delta(tev,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_REL_WHEEL);
|
2015-02-26 13:14:25 +10:00
|
|
|
ck_assert_int_eq(val, 0);
|
|
|
|
|
|
2015-11-16 16:28:55 +10:00
|
|
|
val = libinput_event_tablet_tool_get_axis_delta_discrete(tev,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_ROTATION_Z);
|
2015-02-26 13:14:25 +10:00
|
|
|
ck_assert_int_eq(val, 0);
|
|
|
|
|
|
|
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
|
|
|
|
|
litest_assert_empty_queue(li);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
libinput_tool_unref(tool);
|
|
|
|
|
}
|
|
|
|
|
END_TEST
|
|
|
|
|
|
2015-02-17 13:04:06 +10:00
|
|
|
START_TEST(airbrush_tool)
|
|
|
|
|
{
|
|
|
|
|
struct litest_device *dev = litest_current_device();
|
|
|
|
|
struct libinput *li = dev->libinput;
|
|
|
|
|
struct libinput_event *event;
|
2015-11-16 16:28:55 +10:00
|
|
|
struct libinput_event_tablet_tool *tev;
|
2015-11-16 15:34:19 +10:00
|
|
|
struct libinput_tablet_tool *tool;
|
2015-02-17 13:04:06 +10:00
|
|
|
|
|
|
|
|
if (!libevdev_has_event_code(dev->evdev,
|
|
|
|
|
EV_KEY,
|
|
|
|
|
BTN_TOOL_AIRBRUSH))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
litest_drain_events(li);
|
|
|
|
|
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_TOOL_AIRBRUSH, 1);
|
|
|
|
|
litest_event(dev, EV_MSC, MSC_SERIAL, 1000);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
|
|
|
|
|
litest_wait_for_event_of_type(li,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY,
|
2015-02-17 13:04:06 +10:00
|
|
|
-1);
|
|
|
|
|
event = libinput_get_event(li);
|
2015-11-16 16:28:55 +10:00
|
|
|
tev = libinput_event_get_tablet_tool_event(event);
|
|
|
|
|
tool = libinput_event_tablet_tool_get_tool(tev);
|
2015-02-17 13:04:06 +10:00
|
|
|
ck_assert_notnull(tool);
|
|
|
|
|
ck_assert_int_eq(libinput_tool_get_type(tool),
|
2015-11-16 15:40:43 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_TYPE_AIRBRUSH);
|
2015-02-17 13:04:06 +10:00
|
|
|
|
|
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
}
|
|
|
|
|
END_TEST
|
|
|
|
|
|
|
|
|
|
START_TEST(airbrush_wheel)
|
|
|
|
|
{
|
|
|
|
|
struct litest_device *dev = litest_current_device();
|
|
|
|
|
struct libinput *li = dev->libinput;
|
|
|
|
|
struct libinput_event *event;
|
2015-11-16 16:28:55 +10:00
|
|
|
struct libinput_event_tablet_tool *tev;
|
2015-02-17 13:04:06 +10:00
|
|
|
const struct input_absinfo *abs;
|
|
|
|
|
double val;
|
|
|
|
|
double scale;
|
|
|
|
|
int v;
|
|
|
|
|
|
|
|
|
|
if (!libevdev_has_event_code(dev->evdev,
|
|
|
|
|
EV_KEY,
|
|
|
|
|
BTN_TOOL_AIRBRUSH))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
litest_drain_events(li);
|
|
|
|
|
|
|
|
|
|
abs = libevdev_get_abs_info(dev->evdev, ABS_WHEEL);
|
|
|
|
|
ck_assert_notnull(abs);
|
|
|
|
|
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_TOOL_AIRBRUSH, 1);
|
|
|
|
|
litest_event(dev, EV_MSC, MSC_SERIAL, 1000);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
|
|
|
|
|
/* start with non-zero */
|
|
|
|
|
litest_event(dev, EV_ABS, ABS_WHEEL, 10);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
|
|
|
|
|
litest_drain_events(li);
|
|
|
|
|
|
|
|
|
|
scale = abs->maximum - abs->minimum;
|
|
|
|
|
for (v = abs->minimum; v < abs->maximum; v += 8) {
|
|
|
|
|
litest_event(dev, EV_ABS, ABS_WHEEL, v);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
|
|
|
|
|
litest_wait_for_event_of_type(li,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_AXIS,
|
2015-02-17 13:04:06 +10:00
|
|
|
-1);
|
|
|
|
|
event = libinput_get_event(li);
|
2015-11-16 16:28:55 +10:00
|
|
|
tev = libinput_event_get_tablet_tool_event(event);
|
|
|
|
|
ck_assert(libinput_event_tablet_tool_axis_has_changed(tev,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_SLIDER));
|
2015-11-16 16:28:55 +10:00
|
|
|
val = libinput_event_tablet_tool_get_axis_value(tev,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_SLIDER);
|
2015-02-17 13:04:06 +10:00
|
|
|
|
|
|
|
|
ck_assert_int_eq(val, (v - abs->minimum)/scale);
|
|
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
litest_assert_empty_queue(li);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
END_TEST
|
|
|
|
|
|
2015-02-18 11:40:55 +10:00
|
|
|
START_TEST(artpen_tool)
|
|
|
|
|
{
|
|
|
|
|
struct litest_device *dev = litest_current_device();
|
|
|
|
|
struct libinput *li = dev->libinput;
|
|
|
|
|
struct libinput_event *event;
|
2015-11-16 16:28:55 +10:00
|
|
|
struct libinput_event_tablet_tool *tev;
|
2015-11-16 15:34:19 +10:00
|
|
|
struct libinput_tablet_tool *tool;
|
2015-02-18 11:40:55 +10:00
|
|
|
|
|
|
|
|
if (!libevdev_has_event_code(dev->evdev,
|
|
|
|
|
EV_ABS,
|
|
|
|
|
ABS_Z))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
litest_drain_events(li);
|
|
|
|
|
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_TOOL_PEN, 1);
|
|
|
|
|
litest_event(dev, EV_ABS, ABS_MISC, 0x804); /* Art Pen */
|
|
|
|
|
litest_event(dev, EV_MSC, MSC_SERIAL, 1000);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
|
|
|
|
|
litest_wait_for_event_of_type(li,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY,
|
2015-02-18 11:40:55 +10:00
|
|
|
-1);
|
|
|
|
|
event = libinput_get_event(li);
|
2015-11-16 16:28:55 +10:00
|
|
|
tev = libinput_event_get_tablet_tool_event(event);
|
|
|
|
|
tool = libinput_event_tablet_tool_get_tool(tev);
|
2015-02-18 11:40:55 +10:00
|
|
|
ck_assert_notnull(tool);
|
|
|
|
|
ck_assert_int_eq(libinput_tool_get_type(tool),
|
2015-11-16 15:40:43 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_TYPE_PEN);
|
2015-02-18 11:40:55 +10:00
|
|
|
ck_assert(libinput_tool_has_axis(tool,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_ROTATION_Z));
|
2015-02-18 11:40:55 +10:00
|
|
|
|
|
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
}
|
|
|
|
|
END_TEST
|
|
|
|
|
|
|
|
|
|
START_TEST(artpen_rotation)
|
|
|
|
|
{
|
|
|
|
|
struct litest_device *dev = litest_current_device();
|
|
|
|
|
struct libinput *li = dev->libinput;
|
|
|
|
|
struct libinput_event *event;
|
2015-11-16 16:28:55 +10:00
|
|
|
struct libinput_event_tablet_tool *tev;
|
2015-02-18 11:40:55 +10:00
|
|
|
const struct input_absinfo *abs;
|
|
|
|
|
double val;
|
|
|
|
|
double scale;
|
|
|
|
|
int angle;
|
|
|
|
|
|
|
|
|
|
if (!libevdev_has_event_code(dev->evdev,
|
|
|
|
|
EV_ABS,
|
|
|
|
|
ABS_Z))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
litest_drain_events(li);
|
|
|
|
|
|
|
|
|
|
abs = libevdev_get_abs_info(dev->evdev, ABS_Z);
|
|
|
|
|
ck_assert_notnull(abs);
|
2015-02-20 12:03:52 +10:00
|
|
|
scale = (abs->maximum - abs->minimum + 1)/360.0;
|
2015-02-18 11:40:55 +10:00
|
|
|
|
|
|
|
|
litest_event(dev, EV_KEY, BTN_TOOL_BRUSH, 1);
|
|
|
|
|
litest_event(dev, EV_ABS, ABS_MISC, 0x804); /* Art Pen */
|
|
|
|
|
litest_event(dev, EV_MSC, MSC_SERIAL, 1000);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
|
2015-02-20 12:03:52 +10:00
|
|
|
litest_event(dev, EV_ABS, ABS_Z, abs->minimum);
|
2015-02-18 11:40:55 +10:00
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
|
|
|
|
|
litest_drain_events(li);
|
|
|
|
|
|
2015-02-20 12:03:52 +10:00
|
|
|
for (angle = 8; angle < 360; angle += 8) {
|
2015-02-18 11:40:55 +10:00
|
|
|
int a = angle * scale + abs->minimum;
|
|
|
|
|
|
|
|
|
|
litest_event(dev, EV_ABS, ABS_Z, a);
|
|
|
|
|
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
|
|
|
|
|
|
|
|
|
litest_wait_for_event_of_type(li,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_AXIS,
|
2015-02-18 11:40:55 +10:00
|
|
|
-1);
|
|
|
|
|
event = libinput_get_event(li);
|
2015-11-16 16:28:55 +10:00
|
|
|
tev = libinput_event_get_tablet_tool_event(event);
|
|
|
|
|
ck_assert(libinput_event_tablet_tool_axis_has_changed(tev,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_ROTATION_Z));
|
2015-11-16 16:28:55 +10:00
|
|
|
val = libinput_event_tablet_tool_get_axis_value(tev,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_ROTATION_Z);
|
2015-02-18 11:40:55 +10:00
|
|
|
|
|
|
|
|
/* artpen has a 90 deg offset cw */
|
|
|
|
|
ck_assert_int_eq(round(val), (angle + 90) % 360);
|
2015-02-20 12:03:52 +10:00
|
|
|
|
2015-11-16 16:28:55 +10:00
|
|
|
val = libinput_event_tablet_tool_get_axis_delta(tev,
|
2015-11-16 15:36:30 +10:00
|
|
|
LIBINPUT_TABLET_TOOL_AXIS_ROTATION_Z);
|
2015-02-20 12:03:52 +10:00
|
|
|
ck_assert_int_eq(val, 8);
|
|
|
|
|
|
2015-02-18 11:40:55 +10:00
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
litest_assert_empty_queue(li);
|
2015-02-20 12:03:52 +10:00
|
|
|
|
2015-02-18 11:40:55 +10:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
END_TEST
|
|
|
|
|
|
2015-08-12 15:50:38 +10:00
|
|
|
START_TEST(tablet_time_usec)
|
|
|
|
|
{
|
|
|
|
|
struct litest_device *dev = litest_current_device();
|
|
|
|
|
struct libinput *li = dev->libinput;
|
|
|
|
|
struct libinput_event *event;
|
2015-11-16 16:28:55 +10:00
|
|
|
struct libinput_event_tablet_tool *tev;
|
2015-08-12 15:50:38 +10:00
|
|
|
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,
|
2015-11-16 16:27:46 +10:00
|
|
|
LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY,
|
2015-08-12 15:50:38 +10:00
|
|
|
-1);
|
|
|
|
|
event = libinput_get_event(li);
|
2015-11-16 16:28:55 +10:00
|
|
|
tev = libinput_event_get_tablet_tool_event(event);
|
|
|
|
|
ck_assert_int_eq(libinput_event_tablet_tool_get_time(tev),
|
|
|
|
|
libinput_event_tablet_tool_get_time_usec(tev) / 1000);
|
2015-08-12 15:50:38 +10:00
|
|
|
libinput_event_destroy(event);
|
|
|
|
|
}
|
|
|
|
|
END_TEST
|
|
|
|
|
|
2015-05-22 14:21:21 +10:00
|
|
|
void
|
|
|
|
|
litest_setup_tests(void)
|
2014-06-07 17:35:41 -04:00
|
|
|
{
|
2014-06-27 11:05:30 +10:00
|
|
|
litest_add("tablet:tool", tool_ref, LITEST_TABLET | LITEST_TOOL_SERIAL, LITEST_ANY);
|
2014-08-07 22:02:22 -04:00
|
|
|
litest_add_no_device("tablet:tool", tool_capabilities);
|
2015-02-26 13:55:08 +10:00
|
|
|
litest_add("tablet:tool", tool_in_prox_before_start, LITEST_TABLET, LITEST_ANY);
|
2014-06-19 01:18:09 -04:00
|
|
|
litest_add("tablet:tool_serial", tool_serial, LITEST_TABLET | LITEST_TOOL_SERIAL, LITEST_ANY);
|
|
|
|
|
litest_add("tablet:tool_serial", serial_changes_tool, LITEST_TABLET | LITEST_TOOL_SERIAL, LITEST_ANY);
|
|
|
|
|
litest_add("tablet:tool_serial", invalid_serials, LITEST_TABLET | LITEST_TOOL_SERIAL, LITEST_ANY);
|
2014-08-07 19:00:52 -04:00
|
|
|
litest_add_no_device("tablet:tool_serial", tools_with_serials);
|
|
|
|
|
litest_add_no_device("tablet:tool_serial", tools_without_serials);
|
2014-06-07 17:35:41 -04:00
|
|
|
litest_add("tablet:proximity", proximity_out_clear_buttons, LITEST_TABLET, LITEST_ANY);
|
|
|
|
|
litest_add("tablet:proximity", proximity_in_out, LITEST_TABLET, LITEST_ANY);
|
2015-02-18 01:43:21 -05:00
|
|
|
litest_add("tablet:proximity", proximity_has_axes, LITEST_TABLET, LITEST_ANY);
|
2014-06-11 21:25:37 -04:00
|
|
|
litest_add("tablet:proximity", bad_distance_events, LITEST_TABLET | LITEST_DISTANCE, LITEST_ANY);
|
2015-11-11 14:03:05 +10:00
|
|
|
litest_add("tablet:tip", tip_down_up, LITEST_TABLET, LITEST_ANY);
|
|
|
|
|
litest_add("tablet:tip", tip_down_prox_in, LITEST_TABLET, LITEST_ANY);
|
|
|
|
|
litest_add("tablet:tip", tip_up_prox_out, LITEST_TABLET, LITEST_ANY);
|
|
|
|
|
litest_add("tablet:tip", tip_down_btn_change, LITEST_TABLET, LITEST_ANY);
|
|
|
|
|
litest_add("tablet:tip", tip_up_btn_change, LITEST_TABLET, LITEST_ANY);
|
|
|
|
|
litest_add("tablet:tip", tip_down_motion, LITEST_TABLET, LITEST_ANY);
|
|
|
|
|
litest_add("tablet:tip", tip_up_motion, LITEST_TABLET, LITEST_ANY);
|
2015-11-12 08:01:43 +10:00
|
|
|
litest_add("tablet:tip", tip_state_proximity, LITEST_TABLET, LITEST_ANY);
|
|
|
|
|
litest_add("tablet:tip", tip_state_axis, LITEST_TABLET, LITEST_ANY);
|
|
|
|
|
litest_add("tablet:tip", tip_state_button, LITEST_TABLET, LITEST_ANY);
|
2014-06-12 22:52:28 -04:00
|
|
|
litest_add("tablet:motion", motion, LITEST_TABLET, LITEST_ANY);
|
2015-02-20 12:03:52 +10:00
|
|
|
litest_add("tablet:motion", motion_delta, LITEST_TABLET, LITEST_ANY);
|
2015-07-09 15:46:20 +10:00
|
|
|
litest_add("tablet:motion", motion_delta_partial, LITEST_TABLET, LITEST_ANY);
|
2014-06-26 21:31:53 -04:00
|
|
|
litest_add("tablet:motion", motion_event_state, LITEST_TABLET, LITEST_ANY);
|
2015-02-19 12:56:43 +10:00
|
|
|
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);
|
2014-06-11 22:03:55 -04:00
|
|
|
litest_add("tablet:normalization", normalization, LITEST_TABLET, LITEST_ANY);
|
2014-06-20 14:51:28 +10:00
|
|
|
litest_add("tablet:pad", pad_buttons_ignored, LITEST_TABLET, LITEST_ANY);
|
2015-02-19 17:18:58 +10:00
|
|
|
litest_add("tablet:mouse", mouse_tool, LITEST_TABLET, LITEST_ANY);
|
|
|
|
|
litest_add("tablet:mouse", mouse_buttons, LITEST_TABLET, LITEST_ANY);
|
2015-02-16 15:19:44 +10:00
|
|
|
litest_add("tablet:mouse", mouse_rotation, LITEST_TABLET, LITEST_ANY);
|
2015-06-29 14:42:11 +10:00
|
|
|
litest_add("tablet:mouse", mouse_wheel, LITEST_TABLET, LITEST_WHEEL);
|
2015-02-17 13:04:06 +10:00
|
|
|
litest_add("tablet:airbrush", airbrush_tool, LITEST_TABLET, LITEST_ANY);
|
|
|
|
|
litest_add("tablet:airbrush", airbrush_wheel, LITEST_TABLET, LITEST_ANY);
|
2015-02-18 11:40:55 +10:00
|
|
|
litest_add("tablet:artpen", artpen_tool, LITEST_TABLET, LITEST_ANY);
|
|
|
|
|
litest_add("tablet:artpen", artpen_rotation, LITEST_TABLET, LITEST_ANY);
|
2015-08-12 15:50:38 +10:00
|
|
|
|
|
|
|
|
litest_add("tablet:time", tablet_time_usec, LITEST_TABLET, LITEST_ANY);
|
2014-06-07 17:35:41 -04:00
|
|
|
}
|