mirror of
https://github.com/mauiaaron/apple2.git
synced 2024-12-27 06:29:19 +00:00
Fix cycling between different touch devices in the GL touch menu
This commit is contained in:
parent
52ef663a2c
commit
3f934ecd3f
@ -362,13 +362,8 @@ public class Apple2Activity extends Activity {
|
||||
|
||||
if ((nativeFlags & NATIVE_TOUCH_INPUT_DEVICE_CHANGED) != 0) {
|
||||
int touchDevice = Apple2Preferences.nativeGetCurrentTouchDevice();
|
||||
if (touchDevice == Apple2Preferences.TouchDeviceVariant.JOYSTICK.ordinal()) {
|
||||
Apple2Preferences.CURRENT_TOUCH_DEVICE.saveTouchDevice(this, Apple2Preferences.TouchDeviceVariant.JOYSTICK);
|
||||
} else if (touchDevice == Apple2Preferences.TouchDeviceVariant.JOYSTICK_KEYPAD.ordinal()) {
|
||||
Apple2Preferences.CURRENT_TOUCH_DEVICE.saveTouchDevice(this, Apple2Preferences.TouchDeviceVariant.JOYSTICK_KEYPAD);
|
||||
} else {
|
||||
Apple2Preferences.CURRENT_TOUCH_DEVICE.saveTouchDevice(this, Apple2Preferences.TouchDeviceVariant.KEYBOARD);
|
||||
}
|
||||
Apple2Preferences.TouchDeviceVariant nextVariant = Apple2Preferences.TouchDeviceVariant.next(touchDevice);
|
||||
Apple2Preferences.CURRENT_TOUCH_DEVICE.saveTouchDevice(this, nextVariant);
|
||||
}
|
||||
if ((nativeFlags & NATIVE_TOUCH_CPU_SPEED_DEC) != 0) {
|
||||
int percentSpeed = Apple2Preferences.nativeGetCPUSpeed();
|
||||
|
@ -465,9 +465,19 @@ public enum Apple2Preferences {
|
||||
KEYBOARD(3);
|
||||
private int dev;
|
||||
|
||||
public static final int size = TouchDeviceVariant.values().length;
|
||||
|
||||
TouchDeviceVariant(int dev) {
|
||||
this.dev = dev;
|
||||
}
|
||||
|
||||
static TouchDeviceVariant next(int ord) {
|
||||
++ord;
|
||||
if (ord >= size) {
|
||||
ord = 1;
|
||||
}
|
||||
return TouchDeviceVariant.values()[ord];
|
||||
}
|
||||
}
|
||||
|
||||
public enum TouchJoystickButtons {
|
||||
|
@ -169,6 +169,8 @@ void Java_org_deadc0de_apple2ix_Apple2Activity_nativeOnPause(JNIEnv *env, jobjec
|
||||
}
|
||||
LOG("%s", "native onPause...");
|
||||
|
||||
video_backend->animation_hideTouchMenu();
|
||||
|
||||
if (isSystemPause) {
|
||||
// going to background
|
||||
cpu_pauseBackground();
|
||||
|
@ -13,17 +13,8 @@
|
||||
|
||||
#include <jni.h>
|
||||
|
||||
typedef enum AndroidTouchDevice {
|
||||
// Maps to values in Apple2Preferences.java
|
||||
ANDROID_TOUCH_NONE = 0,
|
||||
ANDROID_TOUCH_JOYSTICK,
|
||||
ANDROID_TOUCH_JOYSTICK_KEYPAD,
|
||||
ANDROID_TOUCH_KEYBOARD,
|
||||
ANDROID_TOUCH_DEVICE_MAX,
|
||||
} AndroidTouchDevice;
|
||||
|
||||
typedef enum AndroidTouchJoystickButtonValues {
|
||||
//ANDROID_TOUCH_NONE = 0,
|
||||
//ANDROID_TOUCHJOY_NONE = 0,
|
||||
ANDROID_TOUCHJOY_BUTTON0 = 1,
|
||||
ANDROID_TOUCHJOY_BUTTON1,
|
||||
ANDROID_TOUCHJOY_BUTTON_BOTH,
|
||||
@ -78,29 +69,29 @@ void Java_org_deadc0de_apple2ix_Apple2Preferences_nativeSetMockingboardVolume(JN
|
||||
|
||||
void Java_org_deadc0de_apple2ix_Apple2Preferences_nativeSetCurrentTouchDevice(JNIEnv *env, jclass cls, jint touchDevice) {
|
||||
LOG("native set default touch device : %d", touchDevice);
|
||||
assert(touchDevice >= 0 && touchDevice < ANDROID_TOUCH_DEVICE_MAX);
|
||||
assert(touchDevice >= 0 && touchDevice < TOUCH_DEVICE_DEVICE_MAX);
|
||||
switch (touchDevice) {
|
||||
case ANDROID_TOUCH_JOYSTICK:
|
||||
case TOUCH_DEVICE_JOYSTICK:
|
||||
keydriver_setTouchKeyboardOwnsScreen(false);
|
||||
joydriver_setTouchJoystickOwnsScreen(true);
|
||||
joydriver_setTouchVariant(EMULATED_JOYSTICK);
|
||||
video_backend->animation_showTouchJoystick();
|
||||
break;
|
||||
|
||||
case ANDROID_TOUCH_JOYSTICK_KEYPAD:
|
||||
case TOUCH_DEVICE_JOYSTICK_KEYPAD:
|
||||
keydriver_setTouchKeyboardOwnsScreen(false);
|
||||
joydriver_setTouchJoystickOwnsScreen(true);
|
||||
joydriver_setTouchVariant(EMULATED_KEYPAD);
|
||||
video_backend->animation_showTouchJoystick();
|
||||
break;
|
||||
|
||||
case ANDROID_TOUCH_KEYBOARD:
|
||||
case TOUCH_DEVICE_KEYBOARD:
|
||||
keydriver_setTouchKeyboardOwnsScreen(true);
|
||||
joydriver_setTouchJoystickOwnsScreen(false);
|
||||
video_backend->animation_showTouchKeyboard();
|
||||
break;
|
||||
|
||||
case ANDROID_TOUCH_NONE:
|
||||
case TOUCH_DEVICE_NONE:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -111,14 +102,14 @@ jint Java_org_deadc0de_apple2ix_Apple2Preferences_nativeGetCurrentTouchDevice(JN
|
||||
if (joydriver_ownsScreen()) {
|
||||
touchjoy_variant_t variant = joydriver_getTouchVariant();
|
||||
if (variant == EMULATED_JOYSTICK) {
|
||||
return ANDROID_TOUCH_JOYSTICK;
|
||||
return TOUCH_DEVICE_JOYSTICK;
|
||||
} else if (variant == EMULATED_KEYPAD) {
|
||||
return ANDROID_TOUCH_JOYSTICK_KEYPAD;
|
||||
return TOUCH_DEVICE_JOYSTICK_KEYPAD;
|
||||
}
|
||||
} else if (keydriver_ownsScreen()) {
|
||||
return ANDROID_TOUCH_KEYBOARD;
|
||||
return TOUCH_DEVICE_KEYBOARD;
|
||||
}
|
||||
return ANDROID_TOUCH_NONE;
|
||||
return TOUCH_DEVICE_NONE;
|
||||
}
|
||||
|
||||
void Java_org_deadc0de_apple2ix_Apple2Preferences_nativeSetTouchMenuEnabled(JNIEnv *env, jclass cls, jboolean enabled) {
|
||||
|
@ -321,8 +321,8 @@ const unsigned char interface_glyphs[256] =
|
||||
0x7f, 0x77, 0x77, 0x41, 0x77, 0x77, 0x7f, 0x00,
|
||||
/* : 0x17 ----------------------- glyph_backspace */
|
||||
0x00, 0x08, 0x04, 0x7e, 0x04, 0x08, 0x00, 0x00,
|
||||
/* : 0x18 */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* : 0x18 ----------------------- glyph_joystick_kpad */
|
||||
0x08, 0x2a, 0x08, 0x77, 0x08, 0x2a, 0x08, 0x00,
|
||||
/* : 0x19 ----------------------- glyph_leftspace */
|
||||
0x00, 0x7e, 0x02, 0x42, 0x42, 0x42, 0x02, 0x7e,
|
||||
/* : 0x1A ----------------------- glyph_midspace */
|
||||
|
16
src/font.txt
16
src/font.txt
@ -1390,14 +1390,14 @@
|
||||
...#...
|
||||
.......
|
||||
.......
|
||||
: 0x18
|
||||
.......
|
||||
.......
|
||||
.......
|
||||
.......
|
||||
.......
|
||||
.......
|
||||
.......
|
||||
: 0x18 ----------------------- glyph_joystick_kpad
|
||||
...#...
|
||||
.#.#.#.
|
||||
...#...
|
||||
###.###
|
||||
...#...
|
||||
.#.#.#.
|
||||
...#...
|
||||
.......
|
||||
: 0x19 ----------------------- glyph_leftspace
|
||||
.......
|
||||
|
@ -45,6 +45,14 @@ void interface_plotChar(uint8_t *fboff, int fb_pix_width, interface_colorscheme_
|
||||
void interface_plotMessage(uint8_t *fb, interface_colorscheme_t cs, char *message, int message_cols, int message_rows);
|
||||
|
||||
#if INTERFACE_TOUCH
|
||||
typedef enum interface_device_t {
|
||||
TOUCH_DEVICE_NONE = 0,
|
||||
TOUCH_DEVICE_JOYSTICK,
|
||||
TOUCH_DEVICE_JOYSTICK_KEYPAD,
|
||||
TOUCH_DEVICE_KEYBOARD,
|
||||
TOUCH_DEVICE_DEVICE_MAX,
|
||||
} interface_device_t;
|
||||
|
||||
typedef enum interface_touch_event_t {
|
||||
TOUCH_CANCEL = 0,
|
||||
TOUCH_DOWN,
|
||||
|
@ -35,7 +35,8 @@ void c_calibrate_joystick(void);
|
||||
#if INTERFACE_TOUCH
|
||||
|
||||
typedef enum touchjoy_variant_t {
|
||||
EMULATED_JOYSTICK = 0, // touch interface emulates a physical joystick device
|
||||
EMULATED_NONE = 0,
|
||||
EMULATED_JOYSTICK, // touch interface emulates a physical joystick device
|
||||
EMULATED_KEYPAD, // touch interface generates key presses
|
||||
} touchjoy_variant_t;
|
||||
|
||||
|
@ -705,6 +705,18 @@ static void gltouchjoy_setTouchButtonTypes(
|
||||
|
||||
buttons.northChar = northChar;
|
||||
buttons.northScancode = northScancode;
|
||||
|
||||
buttons.activeChar = ICONTEXT_NONACTIONABLE;
|
||||
|
||||
char currButtonDisplayChar = touchDownChar;
|
||||
if (touchDownChar == TOUCH_BUTTON0) {
|
||||
currButtonDisplayChar = MOUSETEXT_OPENAPPLE;
|
||||
} else if (touchDownChar == TOUCH_BUTTON1) {
|
||||
currButtonDisplayChar = MOUSETEXT_CLOSEDAPPLE;
|
||||
} else if (touchDownChar == TOUCH_BOTH) {
|
||||
currButtonDisplayChar = '+';
|
||||
}
|
||||
_setup_button_object_with_char(currButtonDisplayChar);
|
||||
}
|
||||
|
||||
static void gltouchjoy_setTapDelay(float secs) {
|
||||
|
@ -96,7 +96,17 @@ static inline void _present_menu(GLModel *parent) {
|
||||
static inline void _show_top_left(void) {
|
||||
topMenuTemplate[0][0] = ICONTEXT_MENU_SPROUT;
|
||||
topMenuTemplate[0][1] = MOUSETEXT_RIGHT;
|
||||
topMenuTemplate[1][0] = joydriver_ownsScreen() ? ICONTEXT_UPPERCASE : ICONTEXT_MENU_TOUCHJOY;
|
||||
|
||||
if (joydriver_ownsScreen()) {
|
||||
if (joydriver_getTouchVariant() == EMULATED_JOYSTICK) {
|
||||
topMenuTemplate[1][0] = ICONTEXT_MENU_TOUCHJOY_KPAD;
|
||||
} else {
|
||||
topMenuTemplate[1][0] = ICONTEXT_UPPERCASE;
|
||||
}
|
||||
} else {
|
||||
topMenuTemplate[1][0] = ICONTEXT_MENU_TOUCHJOY;
|
||||
}
|
||||
|
||||
topMenuTemplate[1][1] = ICONTEXT_NONACTIONABLE;
|
||||
menu.topLeftShowing = true;
|
||||
_present_menu(menu.model);
|
||||
@ -269,29 +279,9 @@ static inline int64_t _tap_menu_item(float x, float y) {
|
||||
break;
|
||||
|
||||
case ICONTEXT_MENU_TOUCHJOY:
|
||||
LOG("showing touch joystick ...");
|
||||
keydriver_setTouchKeyboardOwnsScreen(false);
|
||||
if (video_backend->animation_hideTouchKeyboard) {
|
||||
video_backend->animation_hideTouchKeyboard();
|
||||
}
|
||||
joydriver_setTouchJoystickOwnsScreen(true);
|
||||
if (video_backend->animation_showTouchJoystick) {
|
||||
video_backend->animation_showTouchJoystick();
|
||||
}
|
||||
flags |= TOUCH_FLAGS_INPUT_DEVICE_CHANGE;
|
||||
_hide_top_left();
|
||||
break;
|
||||
|
||||
case ICONTEXT_MENU_TOUCHJOY_KPAD:
|
||||
case ICONTEXT_UPPERCASE:
|
||||
LOG("showing touch keyboard ...");
|
||||
joydriver_setTouchJoystickOwnsScreen(false);
|
||||
if (video_backend->animation_hideTouchJoystick) {
|
||||
video_backend->animation_hideTouchJoystick();
|
||||
}
|
||||
keydriver_setTouchKeyboardOwnsScreen(true);
|
||||
if (video_backend->animation_showTouchKeyboard) {
|
||||
video_backend->animation_showTouchKeyboard();
|
||||
}
|
||||
LOG("switching input device ...");
|
||||
flags |= TOUCH_FLAGS_INPUT_DEVICE_CHANGE;
|
||||
_hide_top_left();
|
||||
break;
|
||||
@ -524,10 +514,8 @@ static void _animation_showTouchMenu(void) {
|
||||
}
|
||||
|
||||
static void _animation_hideTouchMenu(void) {
|
||||
timingBegin = (struct timespec){ 0 };
|
||||
}
|
||||
|
||||
static void gltouchmenu_set(void) {
|
||||
_hide_top_left();
|
||||
_hide_top_right();
|
||||
timingBegin = (struct timespec){ 0 };
|
||||
}
|
||||
|
||||
|
@ -212,6 +212,7 @@ uint8_t floating_bus_hibit(const bool hibit);
|
||||
|
||||
#define ICONTEXT_MENU_SPROUT (MOUSETEXT_BEGIN+0x1B)
|
||||
#define ICONTEXT_MENU_TOUCHJOY (ICONTEXT_BEGIN+0x12)
|
||||
#define ICONTEXT_MENU_TOUCHJOY_KPAD (ICONTEXT_BEGIN+0x18)
|
||||
|
||||
#define ICONTEXT_KBD_BEGIN (ICONTEXT_BEGIN+0x13)
|
||||
#define ICONTEXT_CTRL (ICONTEXT_KBD_BEGIN+0x00)
|
||||
|
Loading…
Reference in New Issue
Block a user