From b67d146cdbce4f6b5382d41c6860878b917b2a94 Mon Sep 17 00:00:00 2001 From: Sebastian Krzyszkowiak <dos@dosowisko.net> Date: Tue, 30 Oct 2018 18:05:54 +0100 Subject: [PATCH] maemo: rewrite mouse events into touch ones --- cmake/libsuperderpy.cmake | 9 +++++---- src/mainloop.c | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/cmake/libsuperderpy.cmake b/cmake/libsuperderpy.cmake index 943307c..98b2bbb 100644 --- a/cmake/libsuperderpy.cmake +++ b/cmake/libsuperderpy.cmake @@ -9,9 +9,9 @@ if (NOT LIBSUPERDERPY_CONFIG_INCLUDED) set(CMAKE_C_STANDARD 99) set(CMAKE_C_STANDARD_REQUIRED true) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -ffast-math") - if(MAEMO) + if(MAEMO5) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99") - endif(MAEMO) + endif(MAEMO5) set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O1 -fno-optimize-sibling-calls -fno-omit-frame-pointer -fsanitize=leak -DLEAK_SANITIZER=1 -fno-common -fsanitize-recover=all") if(APPLE) set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-undefined,error") @@ -53,9 +53,10 @@ if (NOT LIBSUPERDERPY_CONFIG_INCLUDED) ) endif(NOT DEFINED LIBSUPERDERPY_NO_GAME_GIT_REV) - if(MAEMO) + if(MAEMO5) + add_definitions(-DMAEMO5=1) add_definitions(-D_Noreturn=) - endif(MAEMO) + endif(MAEMO5) if(APPLE) if(CMAKE_INSTALL_PREFIX MATCHES "/usr/local") diff --git a/src/mainloop.c b/src/mainloop.c index 09d55d5..b30a31c 100644 --- a/src/mainloop.c +++ b/src/mainloop.c @@ -85,6 +85,42 @@ static inline void HandleEvent(struct Game* game, ALLEGRO_EVENT* ev) { default: break; } + +#ifdef MAEMO5 + // on Maemo we get mouse events instead of touch ones, so we'll rewrite them by ourselves + + if ((ev->type == ALLEGRO_EVENT_MOUSE_AXES) || (ev->type == ALLEGRO_EVENT_MOUSE_BUTTON_DOWN) || (ev->type == ALLEGRO_EVENT_MOUSE_BUTTON_UP)) { + switch (ev->type) { + case ALLEGRO_EVENT_MOUSE_BUTTON_DOWN: + ev->type = ALLEGRO_EVENT_TOUCH_BEGIN; + break; + case ALLEGRO_EVENT_MOUSE_BUTTON_UP: + ev->type = ALLEGRO_EVENT_TOUCH_END; + break; + case ALLEGRO_EVENT_MOUSE_AXES: + ev->type = ALLEGRO_EVENT_TOUCH_MOVE; + break; + default: + break; + } + ALLEGRO_DISPLAY* display = ev->mouse.display; + float dx = ev->mouse.dx; + float dy = ev->mouse.dy; + float x = ev->mouse.x; + float y = ev->mouse.y; + double timestamp = ev->mouse.timestamp; + + ev->touch.display = display; + ev->touch.dx = dx; + ev->touch.dy = dy; + ev->touch.id = 0; + ev->touch.primary = true; + ev->touch.source = (ALLEGRO_TOUCH_INPUT*)al_get_touch_input_event_source(); + ev->touch.timestamp = timestamp; + ev->touch.x = x; + ev->touch.y = y; + } +#endif } static inline void HandleDebugEvent(struct Game* game, ALLEGRO_EVENT* ev) {