diff --git a/project/java/Globals.java b/project/java/Globals.java
index 7adf59542..14ff608c1 100644
--- a/project/java/Globals.java
+++ b/project/java/Globals.java
@@ -65,6 +65,7 @@ class Globals {
public static final int RIGHT_CLICK_WITH_PRESSURE = 3;
public static int RightClickMethod = RIGHT_CLICK_WITH_MENU_BUTTON;
public static boolean LeftClickUsesPressure = false;
+ public static boolean LeftClickUsesMultitouch = false;
public static boolean ShowScreenUnderFinger = false;
public static int ClickScreenPressure = 0;
public static int ClickScreenTouchspotSize = 0;
diff --git a/project/java/Settings.java b/project/java/Settings.java
index b8952975e..2408f64ad 100644
--- a/project/java/Settings.java
+++ b/project/java/Settings.java
@@ -52,6 +52,7 @@ class Settings
out.writeInt(Globals.RightClickMethod);
out.writeBoolean(Globals.ShowScreenUnderFinger);
out.writeBoolean(Globals.LeftClickUsesPressure);
+ out.writeBoolean(Globals.LeftClickUsesMultitouch);
out.writeInt(Globals.ClickScreenPressure);
out.writeInt(Globals.ClickScreenTouchspotSize);
@@ -89,6 +90,7 @@ class Settings
Globals.RightClickMethod = settingsFile.readInt();
Globals.ShowScreenUnderFinger = settingsFile.readBoolean();
Globals.LeftClickUsesPressure = settingsFile.readBoolean();
+ Globals.LeftClickUsesMultitouch = settingsFile.readBoolean();
Globals.ClickScreenPressure = settingsFile.readInt();
Globals.ClickScreenTouchspotSize = settingsFile.readInt();
@@ -493,17 +495,26 @@ class Settings
{
Globals.ShowScreenUnderFinger = false;
Globals.LeftClickUsesPressure = false;
+ Globals.LeftClickUsesMultitouch = false;
if( ! Globals.AppNeedsTwoButtonMouse )
{
showTouchPressureMeasurementTool(p);
return;
}
- CharSequence[] items = { p.getResources().getString(R.string.pointandclick_showcreenunderfinger),
- p.getResources().getString(R.string.pointandclick_usepressure) };
+ CharSequence[] items = { p.getResources().getString(R.string.pointandclick_showcreenunderfinger),
+ p.getResources().getString(R.string.pointandclick_usepressure),
+ p.getResources().getString(R.string.pointandclick_multitouch) };
if( Globals.RightClickMethod == Globals.RIGHT_CLICK_WITH_PRESSURE )
{
- CharSequence[] items2 = { p.getResources().getString(R.string.pointandclick_showcreenunderfinger) };
+ CharSequence[] items2 = { p.getResources().getString(R.string.pointandclick_showcreenunderfinger),
+ p.getResources().getString(R.string.pointandclick_multitouch) };
+ items = items2;
+ }
+ if( Globals.RightClickMethod == Globals.RIGHT_CLICK_WITH_MULTITOUCH )
+ {
+ CharSequence[] items2 = { p.getResources().getString(R.string.pointandclick_showcreenunderfinger),
+ p.getResources().getString(R.string.pointandclick_usepressure) };
items = items2;
}
@@ -516,7 +527,14 @@ class Settings
if( item == 0 )
Globals.ShowScreenUnderFinger = isChecked;
if( item == 1 )
- Globals.LeftClickUsesPressure = isChecked;
+ {
+ if( Globals.RightClickMethod == Globals.RIGHT_CLICK_WITH_PRESSURE )
+ Globals.LeftClickUsesMultitouch = isChecked;
+ else
+ Globals.LeftClickUsesPressure = isChecked;
+ }
+ if( item == 2 )
+ Globals.LeftClickUsesMultitouch = isChecked;
}
});
builder.setPositiveButton(p.getResources().getString(R.string.ok), new DialogInterface.OnClickListener()
@@ -610,6 +628,7 @@ class Settings
nativeSetMouseUsed( Globals.RightClickMethod,
Globals.ShowScreenUnderFinger ? 1 : 0,
Globals.LeftClickUsesPressure ? 1 : 0,
+ Globals.LeftClickUsesMultitouch ? 1 : 0,
Globals.ClickScreenPressure,
Globals.ClickScreenTouchspotSize );
if( Globals.AppUsesJoystick && (Globals.UseAccelerometerAsArrowKeys || Globals.UseTouchscreenKeyboard) )
@@ -670,7 +689,7 @@ class Settings
private static native void nativeSetTrackballUsed();
private static native void nativeSetTrackballDampening(int value);
private static native void nativeSetAccelerometerSettings(int sensitivity, int centerPos);
- private static native void nativeSetMouseUsed(int RightClickMethod, int ShowScreenUnderFinger, int LeftClickUsesPressure, int MaxForce, int MaxRadius);
+ private static native void nativeSetMouseUsed(int RightClickMethod, int ShowScreenUnderFinger, int LeftClickUsesPressure, int LeftClickUsesMultitouch, int MaxForce, int MaxRadius);
private static native void nativeSetJoystickUsed();
private static native void nativeSetMultitouchUsed();
private static native void nativeSetTouchscreenKeyboardUsed();
diff --git a/project/java/translations/values/strings.xml b/project/java/translations/values/strings.xml
index a9a28b748..7cc2764c0 100644
--- a/project/java/translations/values/strings.xml
+++ b/project/java/translations/values/strings.xml
@@ -67,6 +67,7 @@
Advanced point-and-click features
Show screen under finger in separate window
Left click triggered by touch force
+ Left click triggered by touch with second finger
Please slide finger across the screen for two seconds
Pressure %03d radius %03d
diff --git a/project/jni/sdl-1.3/src/video/android/SDL_androidinput.c b/project/jni/sdl-1.3/src/video/android/SDL_androidinput.c
index b5bfe084c..257082a46 100644
--- a/project/jni/sdl-1.3/src/video/android/SDL_androidinput.c
+++ b/project/jni/sdl-1.3/src/video/android/SDL_androidinput.c
@@ -51,6 +51,7 @@ static int rightClickMethod = RIGHT_CLICK_NONE;
int SDL_ANDROID_ShowScreenUnderFinger = 0;
SDL_Rect SDL_ANDROID_ShowScreenUnderFingerRect = {0, 0, 0, 0}, SDL_ANDROID_ShowScreenUnderFingerRectSrc = {0, 0, 0, 0};
static int leftClickUsesPressure = 0;
+static int leftClickUsesMultitouch = 0;
static int maxForce = 0;
static int maxRadius = 0;
int SDL_ANDROID_isJoystickUsed = 0;
@@ -193,7 +194,7 @@ JAVA_EXPORT_NAME(DemoGLSurfaceView_nativeMouse) ( JNIEnv* env, jobject thiz, j
}
if( action == MOUSE_DOWN )
{
- if( !leftClickUsesPressure )
+ if( !leftClickUsesPressure && !leftClickUsesMultitouch )
SDL_SendMouseButton( NULL, (action == MOUSE_DOWN) ? SDL_PRESSED : SDL_RELEASED, SDL_BUTTON_LEFT );
else
action == MOUSE_MOVE;
@@ -215,9 +216,16 @@ JAVA_EXPORT_NAME(DemoGLSurfaceView_nativeMouse) ( JNIEnv* env, jobject thiz, j
}
if( pointerId == 1 && rightClickMethod == RIGHT_CLICK_WITH_MULTITOUCH && (action == MOUSE_DOWN || action == MOUSE_UP) )
{
- if( SDL_GetMouseState( NULL, NULL ) & SDL_BUTTON(SDL_BUTTON_LEFT) )
- SDL_SendMouseButton( NULL, SDL_RELEASED, SDL_BUTTON_LEFT );
- SDL_SendMouseButton( NULL, (action == MOUSE_DOWN) ? SDL_PRESSED : SDL_RELEASED, SDL_BUTTON_RIGHT );
+ if( leftClickUsesMultitouch )
+ {
+ SDL_SendMouseButton( NULL, (action == MOUSE_DOWN) ? SDL_PRESSED : SDL_RELEASED, SDL_BUTTON_LEFT );
+ }
+ else
+ {
+ if( SDL_GetMouseState( NULL, NULL ) & SDL_BUTTON(SDL_BUTTON_LEFT) )
+ SDL_SendMouseButton( NULL, SDL_RELEASED, SDL_BUTTON_LEFT );
+ SDL_SendMouseButton( NULL, (action == MOUSE_DOWN) ? SDL_PRESSED : SDL_RELEASED, SDL_BUTTON_RIGHT );
+ }
}
}
@@ -294,12 +302,13 @@ JAVA_EXPORT_NAME(Settings_nativeSetTrackballUsed) ( JNIEnv* env, jobject thiz)
}
JNIEXPORT void JNICALL
-JAVA_EXPORT_NAME(Settings_nativeSetMouseUsed) ( JNIEnv* env, jobject thiz, jint RightClickMethod, jint ShowScreenUnderFinger, jint LeftClickUsesPressure, jint MaxForce, jint MaxRadius)
+JAVA_EXPORT_NAME(Settings_nativeSetMouseUsed) ( JNIEnv* env, jobject thiz, jint RightClickMethod, jint ShowScreenUnderFinger, jint LeftClickUsesPressure, jint LeftClickUsesMultitouch, jint MaxForce, jint MaxRadius)
{
isMouseUsed = 1;
rightClickMethod = RightClickMethod;
SDL_ANDROID_ShowScreenUnderFinger = ShowScreenUnderFinger;
leftClickUsesPressure = LeftClickUsesPressure;
+ leftClickUsesMultitouch = LeftClickUsesMultitouch;
maxForce = MaxForce;
maxRadius = MaxRadius;
}