/* * Copyright (c) 2020 Jabil Inc. * Copyright (c) 2023 Nordic Semiconductor * * SPDX-License-Identifier: Apache-2.0 */ #include #include "input_sdl_touch_bottom.h" static bool event_targets_display(SDL_Event *event, struct sdl_input_data *data) { SDL_Window *window = NULL; const void *display_dev; if (!data->display_dev) { return true; } if (event->type == SDL_MOUSEBUTTONDOWN || event->type == SDL_MOUSEBUTTONUP) { window = SDL_GetWindowFromID(event->button.windowID); } else if (event->type == SDL_MOUSEMOTION) { window = SDL_GetWindowFromID(event->motion.windowID); } else { return false; } if (!window) { return false; } /* Get the zephyr display associated with the window */ display_dev = SDL_GetWindowData(window, "zephyr_display"); return !display_dev || display_dev == data->display_dev; } static int sdl_filter(void *arg, SDL_Event *event) { struct sdl_input_data *data = arg; if (!event_targets_display(event, data)) { return 1; } switch (event->type) { case SDL_MOUSEBUTTONUP: data->pressed = false; data->just_released = true; break; case SDL_MOUSEBUTTONDOWN: data->pressed = true; break; case SDL_MOUSEMOTION: data->x = event->button.x; data->y = event->button.y; break; default: return 1; } data->callback(data); return 1; } void sdl_input_init_bottom(struct sdl_input_data *data) { SDL_AddEventWatch(sdl_filter, data); }