diff options
Diffstat (limited to 'tests/wayland/test_app_input.c')
| -rw-r--r-- | tests/wayland/test_app_input.c | 55 |
1 files changed, 53 insertions, 2 deletions
diff --git a/tests/wayland/test_app_input.c b/tests/wayland/test_app_input.c index 2cacb5e..c8c5687 100644 --- a/tests/wayland/test_app_input.c +++ b/tests/wayland/test_app_input.c @@ -9,6 +9,8 @@ struct test_state { int keys; + int buttons, motions, resets; + int end; }; static void push_key(struct yasl_surface *s) @@ -23,10 +25,32 @@ static void push_key(struct yasl_surface *s) static int on_init(void *ud, struct yasl_display *d) { - (void)ud; + struct test_state *state = ud; + if (state->end) { + struct wayland_display *display = (struct wayland_display *)d; + if (state->end == 1) + display->cbs->quit(display->ud); + else + display->cbs->lost(display->ud); + return YASL_APP_CONTINUE; + } struct yasl_surface *s = yasl_surface_create_toplevel(d, &(struct yasl_window_spec){ .title = "App Input Test", .size = {64, 64} }); assert(s); + struct input_queue *queue = &((struct wayland_surface *)s)->input; + input_queue_clear(queue); + struct yasl_input_event event = {.surface = s, .kind = YASL_INPUT_MOUSE, + .mouse = {.kind = YASL_PTR_PRESS, .device = YASL_PTR_DEV_ERASER, + .pos = {12, 34}, .pen = {.pressure = 50000, .tilt_x = -20, .tilt_y = 30}}}; + assert(input_queue_push(queue, &event)); + event.mouse.kind = YASL_PTR_MOTION; + event.mouse.pos = (struct yasl_vector2i){15, 39}; + assert(input_queue_push(queue, &event)); + struct yasl_input_event reset = {.surface = s, .kind = YASL_INPUT_RESET}; + assert(input_queue_push(queue, &reset)); + event.mouse.device = YASL_PTR_DEV_PEN; + event.mouse.pos = (struct yasl_vector2i){100, 200}; + assert(input_queue_push(queue, &event)); push_key(s); push_key(s); return YASL_APP_CONTINUE; @@ -35,7 +59,26 @@ static int on_init(void *ud, struct yasl_display *d) static int on_event(void *ud, const struct yasl_event *ev) { struct test_state *state = ud; - if (ev->type == YASL_EVENT_KEY) { + if (ev->type == YASL_EVENT_MOUSE_BUTTON) { + assert(ev->mouse_button.device == YASL_PTR_DEV_ERASER); + assert(ev->mouse_button.pressed && ev->mouse_button.button == 0); + assert(ev->mouse_button.pos.x == 12 && ev->mouse_button.pos.y == 34); + assert(ev->mouse_button.pen.pressure == 50000); + assert(ev->mouse_button.pen.tilt_x == -20 && ev->mouse_button.pen.tilt_y == 30); + state->buttons++; + } else if (ev->type == YASL_EVENT_MOUSE_MOTION) { + if (!state->motions) { + assert(ev->mouse_motion.device == YASL_PTR_DEV_ERASER); + assert(ev->mouse_motion.delta.x == 3 && ev->mouse_motion.delta.y == 5); + } else { + assert(ev->mouse_motion.device == YASL_PTR_DEV_PEN); + assert(!ev->mouse_motion.delta.x && !ev->mouse_motion.delta.y); + } + assert(ev->mouse_motion.pen.pressure == 50000); + state->motions++; + } else if (ev->type == YASL_EVENT_INPUT_RESET) { + state->resets++; + } else if (ev->type == YASL_EVENT_KEY) { state->keys++; yasl_surface_destroy(ev->surface); } @@ -56,5 +99,13 @@ int main(void) }); assert(res == 0); assert(state.keys == 1); + assert(state.buttons == 1 && state.motions == 2 && state.resets == 1); + for (int end = 1; end <= 2; end++) { + state = (struct test_state){.end = end}; + res = yasl_run(&(struct yasl_app_desc){ + .backend = YASL_BACKEND_WAYLAND, .userdata = &state, .init = on_init, + }); + assert(end == 1 ? res == 0 : res < 0); + } return 0; } |
