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) {