diff options
author | Lauri Härsilä | 2012-10-07 04:53:52 +0300 |
---|---|---|
committer | Alyssa Milburn | 2012-10-19 22:50:09 +0200 |
commit | 21093175646b8d359e8108b93e28898ed9695457 (patch) | |
tree | e049dbbc84a1eb9599679dc3a254305ad7c34192 | |
parent | ca256a23b31ba10294cf1f426ebefbc070389357 (diff) | |
download | scummvm-rg350-21093175646b8d359e8108b93e28898ed9695457.tar.gz scummvm-rg350-21093175646b8d359e8108b93e28898ed9695457.tar.bz2 scummvm-rg350-21093175646b8d359e8108b93e28898ed9695457.zip |
ANDROID: Mouse and stylus support
From pull request #285.
-rw-r--r-- | backends/platform/android/android.h | 2 | ||||
-rw-r--r-- | backends/platform/android/android.mk | 21 | ||||
-rw-r--r-- | backends/platform/android/events.cpp | 78 | ||||
-rw-r--r-- | backends/platform/android/org/scummvm/scummvm/MouseHelper.java | 214 | ||||
-rw-r--r-- | backends/platform/android/org/scummvm/scummvm/ScummVMActivity.java | 21 | ||||
-rw-r--r-- | backends/platform/android/org/scummvm/scummvm/ScummVMEvents.java | 51 |
6 files changed, 365 insertions, 22 deletions
diff --git a/backends/platform/android/android.h b/backends/platform/android/android.h index 4b13ca4b0f..5f2f40b726 100644 --- a/backends/platform/android/android.h +++ b/backends/platform/android/android.h @@ -234,7 +234,7 @@ private: int _fingersDown; void clipMouse(Common::Point &p); - void scaleMouse(Common::Point &p, int x, int y, bool deductDrawRect = true); + void scaleMouse(Common::Point &p, int x, int y, bool deductDrawRect = true, bool touchpadMode = false); void updateEventScale(); void disableCursorPalette(); diff --git a/backends/platform/android/android.mk b/backends/platform/android/android.mk index 9292a16595..0651fc796e 100644 --- a/backends/platform/android/android.mk +++ b/backends/platform/android/android.mk @@ -10,6 +10,7 @@ JAVA_FILES = \ ScummVMApplication.java \ ScummVMActivity.java \ EditableSurfaceView.java \ + MouseHelper.java \ Unpacker.java JAVA_FILES_PLUGIN = \ @@ -47,13 +48,7 @@ APKBUILDER = $(ANDROID_SDK)/tools/apkbuilder JAVAC ?= javac JAVACFLAGS = -source 1.5 -target 1.5 -# This is a bit silly. I want to compile against the 1.6 android.jar, -# to make the compiler check that I don't use something that requires -# a newer Android. However, in order to use android:installLocation, -# we need to give aapt a version >=8 android.jar - even though the -# result will work ok on 1.5+. -ANDROID_JAR = $(ANDROID_SDK)/platforms/android-4/android.jar -ANDROID_JAR8 = $(ANDROID_SDK)/platforms/android-8/android.jar +ANDROID_JAR = $(ANDROID_SDK)/platforms/android-14/android.jar PATH_BUILD = build.tmp PATH_BUILD_ASSETS = $(PATH_BUILD)/assets @@ -92,9 +87,9 @@ $(FILE_MANIFEST): $(FILE_MANIFEST_SRC) @$(MKDIR) -p $(@D) sed "s/@ANDROID_VERSIONCODE@/$(ANDROID_VERSIONCODE)/" < $< > $@ -$(SRC_GEN): $(FILE_MANIFEST) $(filter %.xml,$(RESOURCES)) $(ANDROID_JAR8) +$(SRC_GEN): $(FILE_MANIFEST) $(filter %.xml,$(RESOURCES)) $(ANDROID_JAR) @$(MKDIR) -p $(PATH_GEN_TOP) - $(AAPT) package -m -J $(PATH_GEN_TOP) -M $< -S $(PATH_RESOURCES) -I $(ANDROID_JAR8) + $(AAPT) package -m -J $(PATH_GEN_TOP) -M $< -S $(PATH_RESOURCES) -I $(ANDROID_JAR) $(PATH_CLASSES_MAIN)/%.class: $(PATH_GEN)/%.java $(SRC_GEN) @$(MKDIR) -p $(@D) @@ -127,7 +122,7 @@ $(PATH_STAGE_PREFIX).%/res/drawable/scummvm.png: $(PATH_RESOURCES)/drawable/scum @$(MKDIR) -p $(@D) $(CP) $< $@ -$(FILE_RESOURCES_MAIN): $(FILE_MANIFEST) $(RESOURCES) $(ANDROID_JAR8) $(DIST_FILES_THEMES) $(DIST_FILES_ENGINEDATA) +$(FILE_RESOURCES_MAIN): $(FILE_MANIFEST) $(RESOURCES) $(ANDROID_JAR) $(DIST_FILES_THEMES) $(DIST_FILES_ENGINEDATA) $(INSTALL) -d $(PATH_BUILD_ASSETS) $(INSTALL) -c -m 644 $(DIST_FILES_THEMES) $(DIST_FILES_ENGINEDATA) $(PATH_BUILD_ASSETS)/ work_dir=`pwd`; \ @@ -141,10 +136,10 @@ $(FILE_RESOURCES_MAIN): $(FILE_MANIFEST) $(RESOURCES) $(ANDROID_JAR8) $(DIST_FIL zip -r ../`basename $$i` *; \ done @$(RM) -rf $(PATH_BUILD_ASSETS)/tmp - $(AAPT) package -f -0 zip -M $< -S $(PATH_RESOURCES) -A $(PATH_BUILD_ASSETS) -I $(ANDROID_JAR8) -F $@ + $(AAPT) package -f -0 zip -M $< -S $(PATH_RESOURCES) -A $(PATH_BUILD_ASSETS) -I $(ANDROID_JAR) -F $@ -$(PATH_BUILD)/%/$(FILE_RESOURCES): $(PATH_BUILD)/%/AndroidManifest.xml $(PATH_STAGE_PREFIX).%/res/values/strings.xml $(PATH_STAGE_PREFIX).%/res/drawable/scummvm.png plugins/lib%.so $(ANDROID_JAR8) - $(AAPT) package -f -M $< -S $(PATH_STAGE_PREFIX).$*/res -I $(ANDROID_JAR8) -F $@ +$(PATH_BUILD)/%/$(FILE_RESOURCES): $(PATH_BUILD)/%/AndroidManifest.xml $(PATH_STAGE_PREFIX).%/res/values/strings.xml $(PATH_STAGE_PREFIX).%/res/drawable/scummvm.png plugins/lib%.so $(ANDROID_JAR) + $(AAPT) package -f -M $< -S $(PATH_STAGE_PREFIX).$*/res -I $(ANDROID_JAR) -F $@ # Package installer won't delete old libscummvm.so on upgrade so # replace it with a zero size file diff --git a/backends/platform/android/events.cpp b/backends/platform/android/events.cpp index 21d2344fa7..db1261e432 100644 --- a/backends/platform/android/events.cpp +++ b/backends/platform/android/events.cpp @@ -59,6 +59,11 @@ enum { JE_DOUBLE_TAP = 6, JE_MULTI = 7, JE_BALL = 8, + JE_LMB_DOWN = 9, + JE_LMB_UP = 10, + JE_RMB_DOWN = 11, + JE_RMB_UP = 12, + JE_MOUSE_MOVE = 13, JE_QUIT = 0x1000 }; @@ -272,7 +277,7 @@ void OSystem_Android::clipMouse(Common::Point &p) { } void OSystem_Android::scaleMouse(Common::Point &p, int x, int y, - bool deductDrawRect) { + bool deductDrawRect, bool touchpadMode) { const GLESBaseTexture *tex; if (_show_overlay) @@ -282,7 +287,7 @@ void OSystem_Android::scaleMouse(Common::Point &p, int x, int y, const Common::Rect &r = tex->getDrawRect(); - if (_touchpad_mode) { + if (touchpadMode) { x = x * 100 / _touchpad_scale; y = y * 100 / _touchpad_scale; } @@ -327,11 +332,16 @@ void OSystem_Android::pushEvent(int type, int arg1, int arg2, int arg3, } switch (arg2) { + + // special case. we'll only get it's up event case JKEYCODE_BACK: e.kbd.keycode = Common::KEYCODE_ESCAPE; e.kbd.ascii = Common::ASCII_ESCAPE; lockMutex(_event_queue_lock); + e.type = Common::EVENT_KEYDOWN; + _event_queue.push(e); + e.type = Common::EVENT_KEYUP; _event_queue.push(e); unlockMutex(_event_queue_lock); @@ -554,7 +564,7 @@ void OSystem_Android::pushEvent(int type, int arg1, int arg2, int arg3, } scaleMouse(e.mouse, arg3 - _touch_pt_scroll.x, - arg4 - _touch_pt_scroll.y, false); + arg4 - _touch_pt_scroll.y, false, true); e.mouse += _touch_pt_down; clipMouse(e.mouse); } else { @@ -652,7 +662,7 @@ void OSystem_Android::pushEvent(int type, int arg1, int arg2, int arg3, if (_touchpad_mode) { scaleMouse(e.mouse, arg1 - _touch_pt_dt.x, - arg2 - _touch_pt_dt.y, false); + arg2 - _touch_pt_dt.y, false, true); e.mouse += _touch_pt_down; clipMouse(e.mouse); @@ -757,6 +767,66 @@ void OSystem_Android::pushEvent(int type, int arg1, int arg2, int arg3, return; + case JE_MOUSE_MOVE: + e.type = Common::EVENT_MOUSEMOVE; + + scaleMouse(e.mouse, arg1, arg2); + clipMouse(e.mouse); + + lockMutex(_event_queue_lock); + _event_queue.push(e); + unlockMutex(_event_queue_lock); + + return; + + case JE_LMB_DOWN: + e.type = Common::EVENT_LBUTTONDOWN; + + scaleMouse(e.mouse, arg1, arg2); + clipMouse(e.mouse); + + lockMutex(_event_queue_lock); + _event_queue.push(e); + unlockMutex(_event_queue_lock); + + return; + + case JE_LMB_UP: + e.type = Common::EVENT_LBUTTONUP; + + scaleMouse(e.mouse, arg1, arg2); + clipMouse(e.mouse); + + lockMutex(_event_queue_lock); + _event_queue.push(e); + unlockMutex(_event_queue_lock); + + return; + + case JE_RMB_DOWN: + e.type = Common::EVENT_RBUTTONDOWN; + + scaleMouse(e.mouse, arg1, arg2); + clipMouse(e.mouse); + + lockMutex(_event_queue_lock); + _event_queue.push(e); + unlockMutex(_event_queue_lock); + + return; + + case JE_RMB_UP: + e.type = Common::EVENT_RBUTTONUP; + + scaleMouse(e.mouse, arg1, arg2); + clipMouse(e.mouse); + + lockMutex(_event_queue_lock); + _event_queue.push(e); + unlockMutex(_event_queue_lock); + + return; + case JE_QUIT: e.type = Common::EVENT_QUIT; diff --git a/backends/platform/android/org/scummvm/scummvm/MouseHelper.java b/backends/platform/android/org/scummvm/scummvm/MouseHelper.java new file mode 100644 index 0000000000..ae30bcd1da --- /dev/null +++ b/backends/platform/android/org/scummvm/scummvm/MouseHelper.java @@ -0,0 +1,214 @@ +package org.scummvm.scummvm; + +import android.view.InputDevice; +import android.view.MotionEvent; +import android.view.SurfaceView; +import android.view.View; + +/** + * Contains helper methods for mouse/hover events that were introduced in Android 4.0. + * + * Mouse (hover) events seem to be a bit arbitrary, so here's couple of scenarios: + * + * + * 1. Galaxy Note 2 (4.1) + stylus: + * Tool type: TOOL_TYPE_STYLUS + * + * Key: 238 ACTION_DOWN (once) + * Key: 238 ACTION_UP (once) + * Hover: ACTION_HOVER_ENTER (once) + * Hover: ACTION_HOVER_MOVE (multiple, while hovering) + * + * touch screen with the pen: + * Hover: ACTION_HOVER_EXIT, ButtonState: 0 (once) + * Touch: ACTION_DOWN, ButtonState: 0 (once) + * Touch: ACTION_MOVE, ButtonState: 0 (multiple, while pressing) + * Touch: ACTION_UP, ButtonState: 0 (once) + * Hover: ACTION_HOVER_ENTER (once) + * + * press the stylus button while hovering: + * Hover: ACTION_HOVER_MOVE, ButtonState: 2 (multiple, while pressing button) + * Hover: ACTION_HOVER_MOVE, ButtonState: 0 (multiple, after release) + * + * + * 2. Galaxy Note 2 (4.1) + mouse (usb): + * Tool type: TOOL_TYPE_MOUSE + * + * Hover: ACTION_HOVER_ENTER (once) + * Hover: ACTION_HOVER_MOVE (multiple, while hovering) + * + * press left button: + * Hover: ACTION_HOVER_EXIT, ButtonState: 1 (once) + * Touch: ACTION_DOWN, ButtonState: 1 (once) + * Touch: ACTION_MOVE, ButtonState: 1 (multiple, while pressing) + * Touch: ACTION_UP, ButtonState: 0 (once) + * Hover: ACTION_HOVER_ENTER, ButtonState: 0 (once) + * + * press right button: + * Key: KEYCODE_BACK, ACTION_DOWN + * Hover: ACTION_HOVER_MOVE, ButtonState: 2 (multiple, while pressing button) + * Hover: ACTION_HOVER_MOVE, ButtonState: 0 (once) + * Key: KEYCODE_BACK, ACTION_UP + * + * + * 3. Asus eeePad Transformer Prime running CyanogenMod 10 (Android 4.1) + mouse (usb): + * Tool type: TOOL_TYPE_MOUSE + * + * Hover: ACTION_HOVER_ENTER (once) + * Hover: ACTION_HOVER_MOVE (multiple, while hovering) + * + * press left button: + * Hover: ACTION_HOVER_EXIT, ButtonState: 1 (once) + * Touch: ACTION_DOWN, ButtonState: 1 (once) + * Touch: ACTION_MOVE, ButtonState: 1 (multiple, while pressing) + * Touch: ACTION_UP, ButtonState: 0 (once) + * Hover: ACTION_HOVER_ENTER, ButtonState: 0 (once) + * + * press right button: + * Hover: ACTION_HOVER_EXIT, ButtonState: 2 (once) + * Touch: ACTION_DOWN, ButtonState: 2 (once) + * Touch: ACTION_MOVE, ButtonState: 2 (multiple, while pressing) + * Touch: ACTION_UP, ButtonState: 0 (once) + * Hover: ACTION_HOVER_ENTER, ButtonState: 0 (once) + * + * + * 4. Asus eeePad Transformer Prime running CyanogenMod 10 (Android 4.1) + touchpad: + * Tool type: TOOL_TYPE_FINGER + * + * Hover: ACTION_HOVER_ENTER (once) + * Hover: ACTION_HOVER_MOVE (multiple, while hovering) + * + * press left button: + * Hover: ACTION_HOVER_EXIT, ButtonState: 1 (once) + * Touch: ACTION_DOWN, ButtonState: 1 (once) + * Touch: ACTION_MOVE, ButtonState: 1 (multiple, while pressing) + * Touch: ACTION_UP, ButtonState: 0 (once) + * Hover: ACTION_HOVER_ENTER, ButtonState: 0 (once) + * + * press right button: + * Hover: ACTION_HOVER_EXIT, ButtonState: 2 (once) + * Touch: ACTION_DOWN, ButtonState: 2 (once) + * Touch: ACTION_MOVE, ButtonState: 2 (multiple, while pressing) + * Touch: ACTION_UP, ButtonState: 0 (once) + * Hover: ACTION_HOVER_ENTER, ButtonState: 0 (once) + * + */ +public class MouseHelper { + private View.OnHoverListener _listener; + private ScummVM _scummvm; + private long _rmbGuardTime; + private boolean _rmbPressed; + private boolean _lmbPressed; + + /** + * Class initialization fails when this throws an exception. + * Checking hover availability is done on static class initialization for Android 1.6 compatibility. + */ + static { + try { + Class.forName("android.view.View$OnHoverListener"); + } catch (Exception ex) { + throw new RuntimeException(ex); + } + } + + /** + * Calling this forces class initialization + */ + public static void checkHoverAvailable() {} + + public MouseHelper(ScummVM scummvm) { + _scummvm = scummvm; + _listener = createListener(); + } + + private View.OnHoverListener createListener() { + return new View.OnHoverListener() { + @Override + public boolean onHover(View view, MotionEvent e) { + return onTouch(e, true); + } + }; + } + + public void attach(SurfaceView main_surface) { + main_surface.setOnHoverListener(_listener); + } + + public static boolean isMouse(MotionEvent e) { + if (e == null) { + return false; + } + + InputDevice device = e.getDevice(); + + if (device == null) { + return false; + } + + int sources = device.getSources(); + + return ((sources & InputDevice.SOURCE_MOUSE) == InputDevice.SOURCE_MOUSE) || + ((sources & InputDevice.SOURCE_STYLUS) == InputDevice.SOURCE_STYLUS) || + ((sources & InputDevice.SOURCE_TOUCHPAD) == InputDevice.SOURCE_TOUCHPAD); + } + + public boolean onTouch(MotionEvent e, boolean hover) { + _scummvm.pushEvent(ScummVMEvents.JE_MOUSE_MOVE, (int)e.getX(), (int)e.getY(), 0, 0, 0); + + int buttonState = e.getButtonState(); + + boolean lmbDown = (buttonState & MotionEvent.BUTTON_PRIMARY) == MotionEvent.BUTTON_PRIMARY; + + if (e.getToolType(0) == MotionEvent.TOOL_TYPE_STYLUS) { + // when using stylus, ButtonState is 0 + lmbDown = !hover; + } + + if (lmbDown) { + if (!_lmbPressed) { + // left mouse button was pressed just now + _scummvm.pushEvent(ScummVMEvents.JE_LMB_DOWN, (int)e.getX(), (int)e.getY(), e.getButtonState(), 0, 0); + } + + _lmbPressed = true; + } else { + if (_lmbPressed) { + // left mouse button was released just now + _scummvm.pushEvent(ScummVMEvents.JE_LMB_UP, (int)e.getX(), (int)e.getY(), e.getButtonState(), 0, 0); + } + + _lmbPressed = false; + } + + boolean rmbDown = (buttonState & MotionEvent.BUTTON_SECONDARY) == MotionEvent.BUTTON_SECONDARY; + if (rmbDown) { + if (!_rmbPressed) { + // right mouse button was pressed just now + _scummvm.pushEvent(ScummVMEvents.JE_RMB_DOWN, (int)e.getX(), (int)e.getY(), e.getButtonState(), 0, 0); + } + + _rmbPressed = true; + } else { + if (_rmbPressed) { + // right mouse button was released just now + _scummvm.pushEvent(ScummVMEvents.JE_RMB_UP, (int)e.getX(), (int)e.getY(), e.getButtonState(), 0, 0); + _rmbGuardTime = System.currentTimeMillis(); + } + + _rmbPressed = false; + } + + return true; + } + + /** + * Checks whether right mouse button is pressed or was pressed just previously. This is used to prevent sending + * extra back key on right mouse click which is the default behaviour in some platforms. + * + * @return true if right mouse button is (or was in the last 200ms) pressed + */ + public boolean getRmbGuard() { + return _rmbPressed || _rmbGuardTime + 200 > System.currentTimeMillis(); + } +} diff --git a/backends/platform/android/org/scummvm/scummvm/ScummVMActivity.java b/backends/platform/android/org/scummvm/scummvm/ScummVMActivity.java index fbd6513761..34c6df3a3a 100644 --- a/backends/platform/android/org/scummvm/scummvm/ScummVMActivity.java +++ b/backends/platform/android/org/scummvm/scummvm/ScummVMActivity.java @@ -18,6 +18,18 @@ import java.io.File; public class ScummVMActivity extends Activity { + /* Establish whether the hover events are available */ + private static boolean _hoverAvailable; + + static { + try { + MouseHelper.checkHoverAvailable(); // this throws exception if we're on too old version + _hoverAvailable = true; + } catch (Throwable t) { + _hoverAvailable = false; + } + } + private class MyScummVM extends ScummVM { private boolean usingSmallScreen() { // Multiple screen sizes came in with Android 1.6. Have @@ -94,6 +106,7 @@ public class ScummVMActivity extends Activity { private MyScummVM _scummvm; private ScummVMEvents _events; + private MouseHelper _mouseHelper; private Thread _scummvm_thread; @Override @@ -151,7 +164,13 @@ public class ScummVMActivity extends Activity { "--savepath=" + savePath }); - _events = new ScummVMEvents(this, _scummvm); + Log.d(ScummVM.LOG_TAG, "Hover available: " + _hoverAvailable); + if (_hoverAvailable) { + _mouseHelper = new MouseHelper(_scummvm); + _mouseHelper.attach(main_surface); + } + + _events = new ScummVMEvents(this, _scummvm, _mouseHelper); main_surface.setOnKeyListener(_events); main_surface.setOnTouchListener(_events); diff --git a/backends/platform/android/org/scummvm/scummvm/ScummVMEvents.java b/backends/platform/android/org/scummvm/scummvm/ScummVMEvents.java index 86227b9352..45c1f8bcb5 100644 --- a/backends/platform/android/org/scummvm/scummvm/ScummVMEvents.java +++ b/backends/platform/android/org/scummvm/scummvm/ScummVMEvents.java @@ -2,7 +2,6 @@ package org.scummvm.scummvm; import android.os.Handler; import android.os.Message; -import android.util.Log; import android.content.Context; import android.view.KeyEvent; import android.view.KeyCharacterMap; @@ -27,16 +26,23 @@ public class ScummVMEvents implements public static final int JE_DOUBLE_TAP = 6; public static final int JE_MULTI = 7; public static final int JE_BALL = 8; + public static final int JE_LMB_DOWN = 9; + public static final int JE_LMB_UP = 10; + public static final int JE_RMB_DOWN = 11; + public static final int JE_RMB_UP = 12; + public static final int JE_MOUSE_MOVE = 13; public static final int JE_QUIT = 0x1000; final protected Context _context; final protected ScummVM _scummvm; final protected GestureDetector _gd; final protected int _longPress; + final protected MouseHelper _mouseHelper; - public ScummVMEvents(Context context, ScummVM scummvm) { + public ScummVMEvents(Context context, ScummVM scummvm, MouseHelper mouseHelper) { _context = context; _scummvm = scummvm; + _mouseHelper = mouseHelper; _gd = new GestureDetector(context, this); _gd.setOnDoubleTapListener(this); @@ -64,7 +70,7 @@ public class ScummVMEvents implements public void handleMessage(Message msg) { if (msg.what == MSG_MENU_LONG_PRESS) { InputMethodManager imm = (InputMethodManager) - _context.getSystemService(_context.INPUT_METHOD_SERVICE); + _context.getSystemService(Context.INPUT_METHOD_SERVICE); if (imm != null) imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); @@ -73,9 +79,30 @@ public class ScummVMEvents implements }; // OnKeyListener + @Override final public boolean onKey(View v, int keyCode, KeyEvent e) { final int action = e.getAction(); + if (keyCode == 238) { + // this (undocumented) event is sent when ACTION_HOVER_ENTER or ACTION_HOVER_EXIT occurs + return false; + } + + if (keyCode == KeyEvent.KEYCODE_BACK) { + if (action != KeyEvent.ACTION_UP) { + // only send event from back button on up event, since down event is sent on right mouse click and + // cannot be caught (thus rmb click would send escape key first) + return true; + } + + if (_mouseHelper != null) { + if (_mouseHelper.getRmbGuard()) { + // right mouse button was just clicked which sends an extra back button press + return true; + } + } + } + if (e.isSystem()) { // filter what we handle switch (keyCode) { @@ -160,7 +187,16 @@ public class ScummVMEvents implements } // OnTouchListener + @Override final public boolean onTouch(View v, MotionEvent e) { + if (_mouseHelper != null) { + boolean isMouse = MouseHelper.isMouse(e); + if (isMouse) { + // mouse button is pressed + return _mouseHelper.onTouch(e, false); + } + } + final int action = e.getAction(); // constants from APIv5: @@ -177,11 +213,13 @@ public class ScummVMEvents implements } // OnGestureListener + @Override final public boolean onDown(MotionEvent e) { _scummvm.pushEvent(JE_DOWN, (int)e.getX(), (int)e.getY(), 0, 0, 0); return true; } + @Override final public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { //Log.d(ScummVM.LOG_TAG, String.format("onFling: %s -> %s (%.3f %.3f)", @@ -191,10 +229,12 @@ public class ScummVMEvents implements return true; } + @Override final public void onLongPress(MotionEvent e) { // disabled, interferes with drag&drop } + @Override final public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { _scummvm.pushEvent(JE_SCROLL, (int)e1.getX(), (int)e1.getY(), @@ -203,9 +243,11 @@ public class ScummVMEvents implements return true; } + @Override final public void onShowPress(MotionEvent e) { } + @Override final public boolean onSingleTapUp(MotionEvent e) { _scummvm.pushEvent(JE_TAP, (int)e.getX(), (int)e.getY(), (int)(e.getEventTime() - e.getDownTime()), 0, 0); @@ -214,10 +256,12 @@ public class ScummVMEvents implements } // OnDoubleTapListener + @Override final public boolean onDoubleTap(MotionEvent e) { return true; } + @Override final public boolean onDoubleTapEvent(MotionEvent e) { _scummvm.pushEvent(JE_DOUBLE_TAP, (int)e.getX(), (int)e.getY(), e.getAction(), 0, 0); @@ -225,6 +269,7 @@ public class ScummVMEvents implements return true; } + @Override final public boolean onSingleTapConfirmed(MotionEvent e) { return true; } |