From a5ff12846e806cdf4d199e6e5c35b1ec6c120ed0 Mon Sep 17 00:00:00 2001 From: pelya Date: Tue, 12 Oct 2010 15:47:57 +0300 Subject: [PATCH] Added SDL 1.3 multitouch support via SDL_FINGERDOWN/UP/MOTION events --- ChangeAppSettings.sh | 2 +- project/AndroidManifest.xml | 6 ++-- project/jni/Android.mk | 14 ++++---- project/jni/Application.mk | 4 +-- .../alienblaster/SdlForwardCompat.h | 13 +++++++- .../application/alienblaster/surfaceDB.cpp | 1 + project/jni/application/src | 2 +- project/jni/sdl | 2 +- project/res/values/strings.xml | 2 +- .../sdl/sdl-1.3/include/SDL_config_android.h | 2 ++ project/sdl/sdl-1.3/src/video/SDL_sysvideo.h | 3 -- project/sdl/sdl-1.3/src/video/SDL_video.c | 3 -- .../src/video/android/SDL_androidinput.c | 32 +++++++++++++++++++ .../src/video/android/SDL_androidinput.h | 2 +- .../src/video/android/SDL_androidvideo-1.3.c | 3 ++ project/src/Accelerometer.java | 2 +- project/src/AssetExtract.java | 2 +- project/src/Audio.java | 2 +- project/src/DataDownloader.java | 2 +- project/src/GLSurfaceView_SDL.java | 2 +- project/src/Globals.java | 16 +++++----- project/src/MainActivity.java | 2 +- project/src/Settings.java | 2 +- project/src/Video.java | 2 +- 24 files changed, 83 insertions(+), 40 deletions(-) diff --git a/ChangeAppSettings.sh b/ChangeAppSettings.sh index 3d3525fd0..d63543834 100755 --- a/ChangeAppSettings.sh +++ b/ChangeAppSettings.sh @@ -98,7 +98,7 @@ if [ -n "$var" ] ; then AppUsesJoystick="$var" fi -echo -n "\nApplication uses multitouch (y) or (n), multitouch events are passed as \n4-axis joysticks 1-5, including pressure and size ($AppUsesMultitouch): " +echo -n "\nApplication uses multitouch (y) or (n), multitouch events are passed as 4-axis joysticks 1-5, with pressure and size,\nor additionally as SDL_FINGERDOWN/UP/MOTION events in SDL 1.3, with SDL pressure = Android pressure * Andorid touchspot size ($AppUsesMultitouch): " read var if [ -n "$var" ] ; then AppUsesMultitouch="$var" diff --git a/project/AndroidManifest.xml b/project/AndroidManifest.xml index 83559d173..bf765cd4e 100644 --- a/project/AndroidManifest.xml +++ b/project/AndroidManifest.xml @@ -1,8 +1,8 @@ format, 0 ); - + + SDL_LockSurface(converted); + + // debug + /* + for( int x=0; xw; x++ ) + for( int y=0; yh; y++ ) + *(Sint16 *) ( ((Uint8 *)converted->pixels) + y*converted->pitch + x*2 ) = y*4; + */ + // end debug + SDL_UpdateTexture( surface->t, NULL, converted->pixels, converted->pitch ); + SDL_UnlockSurface(converted); SDL_FreeSurface(converted); SDL_FreeSurface(formatsurf); diff --git a/project/jni/application/alienblaster/surfaceDB.cpp b/project/jni/application/alienblaster/surfaceDB.cpp index 7ce038b67..e2edc7095 100644 --- a/project/jni/application/alienblaster/surfaceDB.cpp +++ b/project/jni/application/alienblaster/surfaceDB.cpp @@ -125,6 +125,7 @@ SdlCompat_AcceleratedSurface *SurfaceDB::getSurface( string fn ) { void SurfaceDB::reloadAllSurfacesToVideoMemory() { + __android_log_print(ANDROID_LOG_ERROR, "Alien Blaster", "Reloading all video surfaces" ); for( StringSurfaceMap::iterator it = surfaceDB.begin(); it != surfaceDB.end(); it++ ) { SdlCompat_ReloadSurfaceToVideoMemory( it->second.first, loadSurfaceInternal( it->first, it->second.second ) ); diff --git a/project/jni/application/src b/project/jni/application/src index 299033683..4de17cd97 120000 --- a/project/jni/application/src +++ b/project/jni/application/src @@ -1 +1 @@ -teeworlds \ No newline at end of file +alienblaster \ No newline at end of file diff --git a/project/jni/sdl b/project/jni/sdl index 73bcf85be..d92c7931b 120000 --- a/project/jni/sdl +++ b/project/jni/sdl @@ -1 +1 @@ -../sdl/sdl-1.2 \ No newline at end of file +../sdl/sdl-1.3 \ No newline at end of file diff --git a/project/res/values/strings.xml b/project/res/values/strings.xml index 6a74a6572..be07da4d5 100644 --- a/project/res/values/strings.xml +++ b/project/res/values/strings.xml @@ -1,4 +1,4 @@ - TeeWorlds + Alien Blaster diff --git a/project/sdl/sdl-1.3/include/SDL_config_android.h b/project/sdl/sdl-1.3/include/SDL_config_android.h index 30965faa5..1d46b7219 100644 --- a/project/sdl/sdl-1.3/include/SDL_config_android.h +++ b/project/sdl/sdl-1.3/include/SDL_config_android.h @@ -155,6 +155,8 @@ #define HAVE_SIN 1 #define HAVE_SINF 1 #define HAVE_SQRT 1 +#define HAVE_ATAN 1 +#define HAVE_ATAN2 1 #define HAVE_SYSCONF 1 #undef HAVE_SYSCTLBYNAME #undef SDL_ALTIVEC_BLITTERS diff --git a/project/sdl/sdl-1.3/src/video/SDL_sysvideo.h b/project/sdl/sdl-1.3/src/video/SDL_sysvideo.h index ec37ba91d..24d2e3b7f 100644 --- a/project/sdl/sdl-1.3/src/video/SDL_sysvideo.h +++ b/project/sdl/sdl-1.3/src/video/SDL_sysvideo.h @@ -455,9 +455,6 @@ extern VideoBootStrap NDS_bootstrap; #if SDL_VIDEO_DRIVER_PANDORA extern VideoBootStrap PND_bootstrap; #endif -#if SDL_VIDEO_DRIVER_ANDROID -extern VideoBootStrap Android_bootstrap; -#endif #define SDL_CurrentDisplay (&_this->displays[_this->current_display]) #define SDL_CurrentRenderer (SDL_CurrentDisplay->current_renderer) diff --git a/project/sdl/sdl-1.3/src/video/SDL_video.c b/project/sdl/sdl-1.3/src/video/SDL_video.c index 582c0a050..d78d50873 100644 --- a/project/sdl/sdl-1.3/src/video/SDL_video.c +++ b/project/sdl/sdl-1.3/src/video/SDL_video.c @@ -104,9 +104,6 @@ static VideoBootStrap *bootstrap[] = { #endif #if SDL_VIDEO_DRIVER_PANDORA &PND_bootstrap, -#endif -#if SDL_VIDEO_DRIVER_ANDROID - &Android_bootstrap, #endif NULL }; diff --git a/project/sdl/sdl-1.3/src/video/android/SDL_androidinput.c b/project/sdl/sdl-1.3/src/video/android/SDL_androidinput.c index 1f06e0f1a..2fa0b9554 100644 --- a/project/sdl/sdl-1.3/src/video/android/SDL_androidinput.c +++ b/project/sdl/sdl-1.3/src/video/android/SDL_androidinput.c @@ -30,12 +30,17 @@ #include "SDL_config.h" #include "SDL_version.h" +#if SDL_VERSION_ATLEAST(1,3,0) +#include "SDL_touch.h" +#include "../../events/SDL_touch_c.h" +#endif #include "../SDL_sysvideo.h" #include "SDL_androidvideo.h" #include "SDL_androidinput.h" #include "jniwrapperstuff.h" + SDLKey SDL_android_keymap[KEYCODE_LAST+1]; @@ -76,6 +81,15 @@ JAVA_EXPORT_NAME(DemoGLSurfaceView_nativeMouse) ( JNIEnv* env, jobject thiz, j if( isMultitouchUsed ) { + +#if SDL_VERSION_ATLEAST(1,3,0) + // Use nifty SDL 1.3 multitouch API + if( action == MOUSE_MOVE ) + SDL_SendTouchMotion(0, pointerId, 0, x, y, force*radius / 16); + else + SDL_SendFingerDown(0, pointerId, action == MOUSE_DOWN ? 1 : 0, x, y, force*radius / 16); +#endif + if( CurrentJoysticks[pointerId] ) { SDL_PrivateJoystickAxis(CurrentJoysticks[pointerId+1], 0, x); @@ -185,6 +199,24 @@ void ANDROID_InitOSKeymap() SDLKey defaultKeymap[SDL_NUM_SCANCODES]; SDL_GetDefaultKeymap(defaultKeymap); SDL_SetKeymap(0, defaultKeymap, SDL_NUM_SCANCODES); + + SDL_Touch touch; + memset( &touch, 0, sizeof(touch) ); + touch.x_min = touch.y_min = touch.pressure_min = 0.0f; + touch.pressure_max = 1000000; + touch.x_max = SDL_ANDROID_sWindowWidth; + touch.y_max = SDL_ANDROID_sWindowHeight; + + // These constants are hardcoded inside SDL_touch.c, which makes no sense for me. + touch.xres = touch.yres = 32768; + touch.native_xres = touch.native_yres = 32768.0f; + + touch.pressureres = 1; + touch.native_pressureres = 1.0f; + touch.id = 0; + + SDL_AddTouch(&touch, "Android touch screen"); + #endif // TODO: keys are mapped rather randomly diff --git a/project/sdl/sdl-1.3/src/video/android/SDL_androidinput.h b/project/sdl/sdl-1.3/src/video/android/SDL_androidinput.h index 889d569e7..1a4f69f94 100644 --- a/project/sdl/sdl-1.3/src/video/android/SDL_androidinput.h +++ b/project/sdl/sdl-1.3/src/video/android/SDL_androidinput.h @@ -71,7 +71,7 @@ static inline SDL_scancode GetKeysym(SDL_scancode scancode, SDL_keysym *keysym) return scancode; } -#define SDL_SendKeyboardKey(X, Y) SDL_SendKeyboardKey(X, Y, SDL_FALSE) +//#define SDL_SendKeyboardKey(X, Y, Z) SDL_SendKeyboardKey(X, Y) #else diff --git a/project/sdl/sdl-1.3/src/video/android/SDL_androidvideo-1.3.c b/project/sdl/sdl-1.3/src/video/android/SDL_androidvideo-1.3.c index cdac7c929..a58ad2b88 100644 --- a/project/sdl/sdl-1.3/src/video/android/SDL_androidvideo-1.3.c +++ b/project/sdl/sdl-1.3/src/video/android/SDL_androidvideo-1.3.c @@ -39,6 +39,8 @@ #include "../SDL_sysvideo.h" #include "../SDL_pixels_c.h" #include "../../events/SDL_events_c.h" +#include "SDL_touch.h" +#include "../../events/SDL_touch_c.h" #include "SDL_androidvideo.h" @@ -194,6 +196,7 @@ SDL_Window * ANDROID_CurrentWindow = NULL; int ANDROID_CreateWindow(_THIS, SDL_Window * window) { ANDROID_CurrentWindow = window; + SDL_SetTouchFocus(0, window); }; void ANDROID_DestroyWindow(_THIS, SDL_Window * window) { diff --git a/project/src/Accelerometer.java b/project/src/Accelerometer.java index a6a1efd6d..8218593d2 100644 --- a/project/src/Accelerometer.java +++ b/project/src/Accelerometer.java @@ -1,5 +1,5 @@ // This string is autogenerated by ChangeAppSettings.sh, do not change spaces amount -package com.teeworlds; +package de.schwardtnet.alienblaster; import android.app.Activity; import android.content.Context; diff --git a/project/src/AssetExtract.java b/project/src/AssetExtract.java index c5443b673..72f535f7e 100644 --- a/project/src/AssetExtract.java +++ b/project/src/AssetExtract.java @@ -1,6 +1,6 @@ // This string is autogenerated by ChangeAppSettings.sh, do not change // spaces amount -package com.teeworlds; +package de.schwardtnet.alienblaster; import java.util.zip.*; import java.io.*; diff --git a/project/src/Audio.java b/project/src/Audio.java index 3a344d041..a7a3bf744 100644 --- a/project/src/Audio.java +++ b/project/src/Audio.java @@ -1,5 +1,5 @@ // This string is autogenerated by ChangeAppSettings.sh, do not change spaces amount -package com.teeworlds; +package de.schwardtnet.alienblaster; import android.app.Activity; diff --git a/project/src/DataDownloader.java b/project/src/DataDownloader.java index ce0b7b432..99ba0d7a6 100644 --- a/project/src/DataDownloader.java +++ b/project/src/DataDownloader.java @@ -1,5 +1,5 @@ // This string is autogenerated by ChangeAppSettings.sh, do not change spaces amount -package com.teeworlds; +package de.schwardtnet.alienblaster; import android.app.Activity; import android.content.Context; diff --git a/project/src/GLSurfaceView_SDL.java b/project/src/GLSurfaceView_SDL.java index 8076c71c2..ecb423fcf 100644 --- a/project/src/GLSurfaceView_SDL.java +++ b/project/src/GLSurfaceView_SDL.java @@ -18,7 +18,7 @@ fixed with a hammer and rasp to work with libSDL port */ // This string is autogenerated by ChangeAppSettings.sh, do not change spaces amount -package com.teeworlds; +package de.schwardtnet.alienblaster; import java.io.Writer; import java.util.ArrayList; diff --git a/project/src/Globals.java b/project/src/Globals.java index 5c8aa9c13..2be5ca925 100644 --- a/project/src/Globals.java +++ b/project/src/Globals.java @@ -1,14 +1,14 @@ // This string is autogenerated by ChangeAppSettings.sh, do not change spaces amount anywhere -package com.teeworlds; +package de.schwardtnet.alienblaster; import android.app.Activity; import android.content.Context; class Globals { - public static String ApplicationName = "TeeWorlds"; + public static String ApplicationName = "AlienBlaster"; // Should be zip file - public static String DataDownloadUrl = "Game data is 8 Mb|http://sourceforge.net/projects/libsdl-android/files/TeeWorlds/teeworlds.zip/download"; + public static String DataDownloadUrl = "Data size is 2 Mb|http://sites.google.com/site/xpelyax/Home/alienblaster110_data.zip?attredirects=0%26d=1|http://sitesproxy.goapk.com/site/xpelyax/Home/alienblaster110_data.zip"; // Set this value to true if you're planning to render 3D using OpenGL - it eats some GFX resources, so disabled for 2D public static boolean NeedDepthBuffer = false; @@ -17,9 +17,9 @@ class Globals { public static boolean HorizontalOrientation = true; // Readme text to be shown on download page - public static String ReadmeText = "^You may press \"Home\" now - the data will be downloaded in background".replace("^","\n"); + public static String ReadmeText = "^You can press \"Home\" now - the data will be downloaded in background^In game press \"Menu\" for secondary fire, \"Volume Up/Down\" to cycle weapons".replace("^","\n"); - public static boolean AppUsesMouse = true; + public static boolean AppUsesMouse = false; public static boolean AppNeedsArrowKeys = true; @@ -29,9 +29,9 @@ class Globals { public static boolean NonBlockingSwapBuffers = false; - public static int AppTouchscreenKeyboardKeysAmount = 6; + public static int AppTouchscreenKeyboardKeysAmount = 4; - public static int AppTouchscreenKeyboardKeysAmountAutoFire = 0; + public static int AppTouchscreenKeyboardKeysAmountAutoFire = 1; // Phone-specific config // It will download app data to /sdcard/alienblaster if set to true, @@ -50,5 +50,5 @@ class Globals { } class LoadLibrary { - public LoadLibrary() { System.loadLibrary("sdl"); System.loadLibrary("sdl_image"); }; + public LoadLibrary() { System.loadLibrary("sdl"); System.loadLibrary("sdl_mixer"); System.loadLibrary("sdl_image"); }; } diff --git a/project/src/MainActivity.java b/project/src/MainActivity.java index c9210a383..d7addfc83 100644 --- a/project/src/MainActivity.java +++ b/project/src/MainActivity.java @@ -1,5 +1,5 @@ // This string is autogenerated by ChangeAppSettings.sh, do not change spaces amount -package com.teeworlds; +package de.schwardtnet.alienblaster; import android.app.Activity; import android.content.Context; diff --git a/project/src/Settings.java b/project/src/Settings.java index d6cfce06f..007deaa36 100644 --- a/project/src/Settings.java +++ b/project/src/Settings.java @@ -1,5 +1,5 @@ // This string is autogenerated by ChangeAppSettings.sh, do not change spaces amount -package com.teeworlds; +package de.schwardtnet.alienblaster; import android.app.Activity; import android.content.Context; diff --git a/project/src/Video.java b/project/src/Video.java index 913930086..b70c5f7ea 100644 --- a/project/src/Video.java +++ b/project/src/Video.java @@ -1,5 +1,5 @@ // This string is autogenerated by ChangeAppSettings.sh, do not change spaces amount -package com.teeworlds; +package de.schwardtnet.alienblaster; import javax.microedition.khronos.opengles.GL10;