# HG changeset patch # User Xeli # Date 1313067391 -7200 # Node ID 76392a62da2f873fec785b153d5828a5c1af52ad # Parent dcfa3bf24a2a271e24457988b77e213d979e26e7 Android touch events propagate to hwengine now diff -r dcfa3bf24a2a -r 76392a62da2f hedgewars/hwengine.pas --- a/hedgewars/hwengine.pas Wed Aug 10 14:55:00 2011 +0200 +++ b/hedgewars/hwengine.pas Thu Aug 11 14:56:31 2011 +0200 @@ -169,6 +169,9 @@ cHasFocus:= true; onFocusStateChanged() end; + SDL_FINGERDOWN: WriteToConsole('finger down'); + SDL_FINGERMOTION: WriteToConsole('finger is moving'); + SDL_FINGERUP: WriteToConsole('finger up'); {$ELSE} KeyPressChat(event.key.keysym.unicode); SDL_MOUSEBUTTONDOWN: if event.button.button = SDL_BUTTON_WHEELDOWN then wheelDown:= true; diff -r dcfa3bf24a2a -r 76392a62da2f project_files/Android-build/SDL-android-project/jni/SDL/src/core/android/SDL_android.cpp --- a/project_files/Android-build/SDL-android-project/jni/SDL/src/core/android/SDL_android.cpp Wed Aug 10 14:55:00 2011 +0200 +++ b/project_files/Android-build/SDL-android-project/jni/SDL/src/core/android/SDL_android.cpp Thu Aug 11 14:56:31 2011 +0200 @@ -124,9 +124,9 @@ // Touch extern "C" void Java_org_hedgewars_mobile_SDLActivity_onNativeTouch( JNIEnv* env, jclass jcls, - jint action, jfloat x, jfloat y, jfloat p) + jint action, jint pointerId, jfloat x, jfloat y, jfloat p) { - Android_OnTouch(action, x, y, p); + Android_OnTouch(action, pointerId, x, y, p); } // Accelerometer diff -r dcfa3bf24a2a -r 76392a62da2f project_files/Android-build/SDL-android-project/jni/SDL/src/video/android/SDL_androidtouch.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/project_files/Android-build/SDL-android-project/jni/SDL/src/video/android/SDL_androidtouch.c Thu Aug 11 14:56:31 2011 +0200 @@ -0,0 +1,84 @@ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2011 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ +#include "SDL_config.h" + +#include + +#include "SDL_events.h" +#include "../../events/SDL_touch_c.h" + +#include "SDL_androidtouch.h" + + +#define ACTION_DOWN 0 +#define ACTION_UP 1 +#define ACTION_MOVE 2 +#define ACTION_CANCEL 3 +#define ACTION_OUTSIDE 4 +#define ACTION_POINTER_DOWN 5 +#define ACTION_POINTER_UP 6 + + +void Android_OnTouch(int action, int pointerId, float x, float y, float p) +{ + if (!Android_Window) { + return; + } + + //The first event will provide the x, y and pressure max values, + if(!SDL_GetTouch(1)){ + SDL_Touch touch; + touch.id = 1; + touch.x_min = 0; + touch.x_max = x; + touch.native_xres = touch.x_max - touch.x_min; + touch.y_min = 0; + touch.y_max = y; + touch.native_yres = touch.y_max - touch.y_min; + touch.pressure_min = 0; + touch.pressure_max = p; + touch.native_pressureres = touch.pressure_max - touch.pressure_min; + + if(SDL_AddTouch(&touch, "") < 0) return; + } + + + switch(action){ + case ACTION_DOWN: + case ACTION_POINTER_DOWN: + SDL_SetTouchFocus(pointerId, Android_Window); + SDL_SendFingerDown(1, pointerId, SDL_TRUE, x, y, p); + break; + case ACTION_CANCEL: + case ACTION_POINTER_UP: + case ACTION_UP: + SDL_SendFingerDown(1, pointerId, SDL_FALSE, x, y, p); + break; + case ACTION_MOVE: + SDL_SendTouchMotion(1, pointerId, 0, x, y, p); + break; + case ACTION_OUTSIDE: + break; + } +} + +/* vi: set ts=4 sw=4 expandtab: */ diff -r dcfa3bf24a2a -r 76392a62da2f project_files/Android-build/SDL-android-project/jni/SDL/src/video/android/SDL_androidtouch.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/project_files/Android-build/SDL-android-project/jni/SDL/src/video/android/SDL_androidtouch.h Thu Aug 11 14:56:31 2011 +0200 @@ -0,0 +1,28 @@ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2011 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ +#include "SDL_config.h" + +#include "SDL_androidvideo.h" + +extern void Android_OnTouch(int action, int pointerId, float x, float y, float p); + +/* vi: set ts=4 sw=4 expandtab: */ diff -r dcfa3bf24a2a -r 76392a62da2f project_files/Android-build/SDL-android-project/src/org/hedgewars/mobile/SDLActivity.java --- a/project_files/Android-build/SDL-android-project/src/org/hedgewars/mobile/SDLActivity.java Wed Aug 10 14:55:00 2011 +0200 +++ b/project_files/Android-build/SDL-android-project/src/org/hedgewars/mobile/SDLActivity.java Thu Aug 11 14:56:31 2011 +0200 @@ -8,6 +8,7 @@ import org.hedgewars.mobile.EngineProtocol.EngineProtocolNetwork; import org.hedgewars.mobile.EngineProtocol.GameConfig; +import org.hedgewars.mobile.TouchInterface.TouchInterface; import android.app.Activity; import android.content.Context; @@ -120,7 +121,7 @@ public static native void onNativeKeyUp(int keycode); - public static native void onNativeTouch(int action, float x, float y, + public static native void onNativeTouch(int action, int pointer, float x, float y, float p); public static native void onNativeAccel(float x, float y, float z); @@ -295,7 +296,7 @@ * Because of this, that's where we set up the SDL thread */ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback, - View.OnKeyListener, View.OnTouchListener, SensorEventListener { + View.OnKeyListener, SensorEventListener { // This is what SDL runs in. It invokes SDL_main(), eventually private Thread mSDLThread; @@ -319,7 +320,7 @@ setFocusableInTouchMode(true); requestFocus(); setOnKeyListener(this); - setOnTouchListener(this); + setOnTouchListener(TouchInterface.getTouchInterface()); mSensorManager = (SensorManager) context.getSystemService("sensor"); @@ -528,18 +529,6 @@ return false; } - // Touch events - public boolean onTouch(View v, MotionEvent event) { - - int action = event.getAction(); - float x = event.getX(); - float y = event.getY(); - float p = event.getPressure(); - // TODO: Anything else we need to pass? - SDLActivity.onNativeTouch(action, x, y, p); - return true; - } - // Sensor events public void enableSensor(int sensortype, boolean enabled) { // TODO: This uses getDefaultSensor - what if we have >1 accels?