commit
d4d90b3f07
14 changed files with 205 additions and 4 deletions
|
@ -146,7 +146,8 @@ OSystem_Android::OSystem_Android(int audio_sample_rate, int audio_buffer_size) :
|
|||
_touchpad_scale(66),
|
||||
_dpad_scale(4),
|
||||
_fingersDown(0),
|
||||
_trackball_scale(2) {
|
||||
_trackball_scale(2),
|
||||
_joystick_scale(10) {
|
||||
|
||||
_fsFactory = new POSIXFilesystemFactory();
|
||||
|
||||
|
|
|
@ -231,6 +231,7 @@ private:
|
|||
int _touchpad_scale;
|
||||
int _trackball_scale;
|
||||
int _dpad_scale;
|
||||
int _joystick_scale;
|
||||
int _fingersDown;
|
||||
|
||||
void clipMouse(Common::Point &p);
|
||||
|
|
|
@ -27,11 +27,14 @@ PORT_DISTFILES = $(PATH_DIST)/README.Android
|
|||
|
||||
RESOURCES = \
|
||||
$(PATH_RESOURCES)/values/strings.xml \
|
||||
$(PATH_RESOURCES)/values/margins.xml \
|
||||
$(PATH_RESOURCES)/values-television/margins.xml \
|
||||
$(PATH_RESOURCES)/layout/main.xml \
|
||||
$(PATH_RESOURCES)/layout/splash.xml \
|
||||
$(PATH_RESOURCES)/drawable/gradient.xml \
|
||||
$(PATH_RESOURCES)/drawable/scummvm.png \
|
||||
$(PATH_RESOURCES)/drawable/scummvm_big.png
|
||||
$(PATH_RESOURCES)/drawable/scummvm_big.png \
|
||||
$(PATH_RESOURCES)/drawable-xhdpi/ouya_icon.png
|
||||
|
||||
PLUGIN_RESOURCES = \
|
||||
$(PATH_RESOURCES)/values/strings.xml \
|
||||
|
|
|
@ -64,6 +64,10 @@ enum {
|
|||
JE_RMB_DOWN = 11,
|
||||
JE_RMB_UP = 12,
|
||||
JE_MOUSE_MOVE = 13,
|
||||
JE_GAMEPAD = 14,
|
||||
JE_JOYSTICK = 15,
|
||||
JE_MMB_DOWN = 16,
|
||||
JE_MMB_UP = 17,
|
||||
JE_QUIT = 0x1000
|
||||
};
|
||||
|
||||
|
@ -109,6 +113,25 @@ enum {
|
|||
JKEYCODE_DPAD_CENTER = 23
|
||||
};
|
||||
|
||||
// gamepad
|
||||
enum {
|
||||
JKEYCODE_BUTTON_A = 96,
|
||||
JKEYCODE_BUTTON_B = 97,
|
||||
JKEYCODE_BUTTON_C = 98,
|
||||
JKEYCODE_BUTTON_X = 99,
|
||||
JKEYCODE_BUTTON_Y = 100,
|
||||
JKEYCODE_BUTTON_Z = 101,
|
||||
JKEYCODE_BUTTON_L1 = 102,
|
||||
JKEYCODE_BUTTON_R1 = 103,
|
||||
JKEYCODE_BUTTON_L2 = 104,
|
||||
JKEYCODE_BUTTON_R2 = 105,
|
||||
JKEYCODE_BUTTON_THUMBL = 106,
|
||||
JKEYCODE_BUTTON_THUMBR = 107,
|
||||
JKEYCODE_BUTTON_START = 108,
|
||||
JKEYCODE_BUTTON_SELECT = 109,
|
||||
JKEYCODE_BUTTON_MODE = 110,
|
||||
};
|
||||
|
||||
// meta modifier
|
||||
enum {
|
||||
JMETA_SHIFT = 0x01,
|
||||
|
@ -827,6 +850,94 @@ void OSystem_Android::pushEvent(int type, int arg1, int arg2, int arg3,
|
|||
|
||||
return;
|
||||
|
||||
case JE_GAMEPAD:
|
||||
switch (arg1) {
|
||||
case JACTION_DOWN:
|
||||
e.type = Common::EVENT_KEYDOWN;
|
||||
break;
|
||||
case JACTION_UP:
|
||||
e.type = Common::EVENT_KEYUP;
|
||||
break;
|
||||
default:
|
||||
LOGE("unhandled jaction on gamepad key: %d", arg1);
|
||||
return;
|
||||
}
|
||||
|
||||
switch (arg2) {
|
||||
case JKEYCODE_BUTTON_A:
|
||||
case JKEYCODE_BUTTON_B:
|
||||
switch (arg1) {
|
||||
case JACTION_DOWN:
|
||||
e.type = (arg2 == JKEYCODE_BUTTON_A?
|
||||
Common::EVENT_LBUTTONDOWN :
|
||||
Common::EVENT_RBUTTONDOWN);
|
||||
break;
|
||||
case JACTION_UP:
|
||||
e.type = (arg2 == JKEYCODE_BUTTON_A?
|
||||
Common::EVENT_LBUTTONUP :
|
||||
Common::EVENT_RBUTTONUP);
|
||||
break;
|
||||
}
|
||||
|
||||
e.mouse = getEventManager()->getMousePos();
|
||||
|
||||
break;
|
||||
|
||||
case JKEYCODE_BUTTON_X:
|
||||
e.kbd.keycode = Common::KEYCODE_ESCAPE;
|
||||
e.kbd.ascii = Common::ASCII_ESCAPE;
|
||||
break;
|
||||
|
||||
default:
|
||||
LOGW("unmapped gamepad key: %d", arg2);
|
||||
return;
|
||||
}
|
||||
|
||||
lockMutex(_event_queue_lock);
|
||||
_event_queue.push(e);
|
||||
unlockMutex(_event_queue_lock);
|
||||
|
||||
break;
|
||||
|
||||
case JE_JOYSTICK:
|
||||
e.mouse = getEventManager()->getMousePos();
|
||||
|
||||
switch (arg1) {
|
||||
case JACTION_MULTIPLE:
|
||||
e.type = Common::EVENT_MOUSEMOVE;
|
||||
|
||||
// already multiplied by 100
|
||||
e.mouse.x += arg2 * _joystick_scale / _eventScaleX;
|
||||
e.mouse.y += arg3 * _joystick_scale / _eventScaleY;
|
||||
|
||||
clipMouse(e.mouse);
|
||||
|
||||
break;
|
||||
default:
|
||||
LOGE("unhandled jaction on joystick: %d", arg1);
|
||||
return;
|
||||
}
|
||||
|
||||
lockMutex(_event_queue_lock);
|
||||
_event_queue.push(e);
|
||||
unlockMutex(_event_queue_lock);
|
||||
|
||||
return;
|
||||
|
||||
case JE_MMB_DOWN:
|
||||
e.type = Common::EVENT_MAINMENU;
|
||||
|
||||
lockMutex(_event_queue_lock);
|
||||
_event_queue.push(e);
|
||||
unlockMutex(_event_queue_lock);
|
||||
|
||||
return;
|
||||
|
||||
case JE_MMB_UP:
|
||||
// No action
|
||||
|
||||
return;
|
||||
|
||||
case JE_QUIT:
|
||||
e.type = Common::EVENT_QUIT;
|
||||
|
||||
|
|
|
@ -14,6 +14,7 @@ public class MouseHelper {
|
|||
private long _rmbGuardTime;
|
||||
private boolean _rmbPressed;
|
||||
private boolean _lmbPressed;
|
||||
private boolean _mmbPressed;
|
||||
|
||||
/**
|
||||
* Class initialization fails when this throws an exception.
|
||||
|
@ -114,6 +115,23 @@ public class MouseHelper {
|
|||
_rmbPressed = false;
|
||||
}
|
||||
|
||||
boolean mmbDown = (buttonState & MotionEvent.BUTTON_TERTIARY) == MotionEvent.BUTTON_TERTIARY;
|
||||
if (mmbDown) {
|
||||
if (!_mmbPressed) {
|
||||
// middle mouse button was pressed just now
|
||||
_scummvm.pushEvent(ScummVMEvents.JE_MMB_DOWN, (int)e.getX(), (int)e.getY(), e.getButtonState(), 0, 0);
|
||||
}
|
||||
|
||||
_mmbPressed = true;
|
||||
} else {
|
||||
if (_mmbPressed) {
|
||||
// middle mouse button was released just now
|
||||
_scummvm.pushEvent(ScummVMEvents.JE_MMB_UP, (int)e.getX(), (int)e.getY(), e.getButtonState(), 0, 0);
|
||||
}
|
||||
|
||||
_mmbPressed = false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -240,6 +240,14 @@ public class ScummVMActivity extends Activity {
|
|||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onGenericMotionEvent(final MotionEvent e) {
|
||||
if (_events != null)
|
||||
return _events.onGenericMotionEvent(e);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private void showKeyboard(boolean show) {
|
||||
SurfaceView main_surface = (SurfaceView)findViewById(R.id.main_surface);
|
||||
InputMethodManager imm = (InputMethodManager)
|
||||
|
|
|
@ -9,6 +9,7 @@ import android.view.MotionEvent;
|
|||
import android.view.View;
|
||||
import android.view.ViewConfiguration;
|
||||
import android.view.GestureDetector;
|
||||
import android.view.InputDevice;
|
||||
import android.view.inputmethod.InputMethodManager;
|
||||
|
||||
public class ScummVMEvents implements
|
||||
|
@ -31,6 +32,10 @@ public class ScummVMEvents implements
|
|||
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_GAMEPAD = 14;
|
||||
public static final int JE_JOYSTICK = 15;
|
||||
public static final int JE_MMB_DOWN = 16;
|
||||
public static final int JE_MMB_UP = 17;
|
||||
public static final int JE_QUIT = 0x1000;
|
||||
|
||||
final protected Context _context;
|
||||
|
@ -63,6 +68,18 @@ public class ScummVMEvents implements
|
|||
return true;
|
||||
}
|
||||
|
||||
public boolean onGenericMotionEvent(final MotionEvent e) {
|
||||
if((e.getSource() & InputDevice.SOURCE_CLASS_JOYSTICK) != 0) {
|
||||
_scummvm.pushEvent(JE_JOYSTICK, e.getAction(),
|
||||
(int)(e.getAxisValue(MotionEvent.AXIS_X)*100),
|
||||
(int)(e.getAxisValue(MotionEvent.AXIS_Y)*100),
|
||||
0, 0);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
final static int MSG_MENU_LONG_PRESS = 1;
|
||||
|
||||
final private Handler keyHandler = new Handler() {
|
||||
|
@ -177,6 +194,25 @@ public class ScummVMEvents implements
|
|||
(int)(e.getEventTime() - e.getDownTime()),
|
||||
e.getRepeatCount(), 0);
|
||||
return true;
|
||||
case KeyEvent.KEYCODE_BUTTON_A:
|
||||
case KeyEvent.KEYCODE_BUTTON_B:
|
||||
case KeyEvent.KEYCODE_BUTTON_C:
|
||||
case KeyEvent.KEYCODE_BUTTON_X:
|
||||
case KeyEvent.KEYCODE_BUTTON_Y:
|
||||
case KeyEvent.KEYCODE_BUTTON_Z:
|
||||
case KeyEvent.KEYCODE_BUTTON_L1:
|
||||
case KeyEvent.KEYCODE_BUTTON_R1:
|
||||
case KeyEvent.KEYCODE_BUTTON_L2:
|
||||
case KeyEvent.KEYCODE_BUTTON_R2:
|
||||
case KeyEvent.KEYCODE_BUTTON_THUMBL:
|
||||
case KeyEvent.KEYCODE_BUTTON_THUMBR:
|
||||
case KeyEvent.KEYCODE_BUTTON_START:
|
||||
case KeyEvent.KEYCODE_BUTTON_SELECT:
|
||||
case KeyEvent.KEYCODE_BUTTON_MODE:
|
||||
_scummvm.pushEvent(JE_GAMEPAD, action, keyCode,
|
||||
(int)(e.getEventTime() - e.getDownTime()),
|
||||
e.getRepeatCount(), 0);
|
||||
return true;
|
||||
}
|
||||
|
||||
_scummvm.pushEvent(JE_KEY, action, keyCode,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue