From 44295ab0441588160b3fe28b48edf4ea0bd5d33c Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Mon, 6 Mar 2023 16:08:26 +1000 Subject: [PATCH] tools: add touch support to the ei-demo-client --- tools/ei-demo-client.c | 58 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/tools/ei-demo-client.c b/tools/ei-demo-client.c index dcbd416..383f979 100644 --- a/tools/ei-demo-client.c +++ b/tools/ei-demo-client.c @@ -279,11 +279,13 @@ int main(int argc, char **argv) _unref_(ei_device) *ptr = NULL; _unref_(ei_device) *kbd = NULL; _unref_(ei_device) *abs = NULL; + _unref_(ei_device) *touch = NULL; bool stop = false; bool have_ptr = false; bool have_kbd = false; bool have_abs = false; + bool have_touch = false; struct ei_seat *default_seat = NULL; uint32_t sequence = 0; @@ -344,6 +346,11 @@ int main(int argc, char **argv) abs = ei_device_ref(device); handle_regions(device); } + if (ei_device_has_capability(device, EI_DEVICE_CAP_TOUCH)) { + colorprint("New touch device: %s\n", ei_device_get_name(device)); + touch = ei_device_ref(device); + handle_regions(device); + } } break; case EI_EVENT_DEVICE_RESUMED: @@ -365,6 +372,12 @@ int main(int argc, char **argv) colorprint("Abs pointer device was resumed\n"); have_abs = true; } + if (ei_event_get_device(e) == touch) { + if (!receiver) + ei_device_start_emulating(touch, ++sequence); + colorprint("Touch device was resumed\n"); + have_touch = true; + } break; case EI_EVENT_DEVICE_PAUSED: if (ei_event_get_device(e) == ptr) { @@ -379,6 +392,10 @@ int main(int argc, char **argv) colorprint("Abs pointer device was paused\n"); have_abs = false; } + if (ei_event_get_device(e) == touch) { + colorprint("Touch device was paused\n"); + have_touch = false; + } break; case EI_EVENT_DEVICE_REMOVED: { @@ -441,6 +458,21 @@ int main(int argc, char **argv) ei_event_keyboard_get_key_is_press(e) ? "press" : "release"); } break; + case EI_EVENT_TOUCH_DOWN: + case EI_EVENT_TOUCH_MOTION: + { + colorprint("touch %s %u %.2f/%.2f\n", + ei_event_get_type(e) == EI_EVENT_TOUCH_DOWN ? "down" : "motion", + ei_event_touch_get_id(e), + ei_event_touch_get_x(e), + ei_event_touch_get_y(e)); + } + break; + case EI_EVENT_TOUCH_UP: + { + colorprint("touch up %u\n", ei_event_touch_get_id(e)); + } + break; default: abort(); } @@ -492,6 +524,32 @@ int main(int argc, char **argv) ei_device_frame(abs, now); now += interval; } + + if (have_touch) { + static int x, y; + static int counter = 0; + static struct ei_touch *t; + + switch (counter++ % 5) { + case 0: + colorprint("sending touch down event\n"); + t = ei_device_touch_new(touch); + ei_touch_down(t, 100 + ++x, 200 - ++y); + ei_device_frame(touch, now); + break; + case 4: + colorprint("sending touch down event\n"); + ei_touch_up(t); + ei_device_frame(touch, now); + t = ei_touch_unref(t); + break; + default: + ei_touch_motion(t, 100 + ++x, 200 - ++y); + ei_device_frame(touch, now); + break; + } + + } } }