summaryrefslogtreecommitdiff
path: root/tests/wayland/test_app_input.c
diff options
context:
space:
mode:
authorBerke Güzel <wenekar1@gmail.com>2026-10-13 15:05:06 +0300
committerBerke Güzel <wenekar1@gmail.com>2026-10-13 15:05:06 +0300
commit98f0d51157fa2a2b8ccaae54ed4850a88d223d01 (patch)
tree90b03d0930986620d95eb0f45c07b96e1331783c /tests/wayland/test_app_input.c
parent339e1ad7adb8340732ee856d0f6f0d2c7f1455d1 (diff)
Simplify surface state, examples, and library installation
Diffstat (limited to 'tests/wayland/test_app_input.c')
-rw-r--r--tests/wayland/test_app_input.c55
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;
}