diff --git a/src/android/app/src/main/java/org/citra/citra_emu/activities/EmulationActivity.java b/src/android/app/src/main/java/org/citra/citra_emu/activities/EmulationActivity.java
index 28cbd286a..4f058a76a 100644
--- a/src/android/app/src/main/java/org/citra/citra_emu/activities/EmulationActivity.java
+++ b/src/android/app/src/main/java/org/citra/citra_emu/activities/EmulationActivity.java
@@ -68,6 +68,7 @@ public final class EmulationActivity extends AppCompatActivity {
public static final int MENU_ACTION_LOAD_AMIIBO = 13;
public static final int MENU_ACTION_REMOVE_AMIIBO = 14;
public static final int MENU_ACTION_JOYSTICK_REL_CENTER = 15;
+ public static final int MENU_ACTION_DPAD_SLIDE_ENABLE = 16;
public static final int REQUEST_SELECT_AMIIBO = 2;
private static final int EMULATION_RUNNING_NOTIFICATION = 0x1000;
@@ -104,6 +105,8 @@ public final class EmulationActivity extends AppCompatActivity {
.append(R.id.menu_emulation_amiibo_remove, EmulationActivity.MENU_ACTION_REMOVE_AMIIBO);
buttonsActionsMap.append(R.id.menu_emulation_joystick_rel_center,
EmulationActivity.MENU_ACTION_JOYSTICK_REL_CENTER);
+ buttonsActionsMap.append(R.id.menu_emulation_dpad_slide_enable,
+ EmulationActivity.MENU_ACTION_DPAD_SLIDE_ENABLE);
}
private View mDecorView;
@@ -292,6 +295,7 @@ public final class EmulationActivity extends AppCompatActivity {
menu.findItem(layoutOptionMenuItem).setChecked(true);
menu.findItem(R.id.menu_emulation_joystick_rel_center).setChecked(EmulationMenuSettings.getJoystickRelCenter());
+ menu.findItem(R.id.menu_emulation_dpad_slide_enable).setChecked(EmulationMenuSettings.getDpadSlideEnable());
menu.findItem(R.id.menu_emulation_show_fps).setChecked(EmulationMenuSettings.getShowFps());
menu.findItem(R.id.menu_emulation_swap_screens).setChecked(EmulationMenuSettings.getSwapScreens());
menu.findItem(R.id.menu_emulation_show_overlay).setChecked(EmulationMenuSettings.getShowOverlay());
@@ -395,9 +399,14 @@ public final class EmulationActivity extends AppCompatActivity {
break;
case MENU_ACTION_JOYSTICK_REL_CENTER:
- final boolean isEnabled = !EmulationMenuSettings.getJoystickRelCenter();
- EmulationMenuSettings.setJoystickRelCenter(isEnabled);
- item.setChecked(isEnabled);
+ final boolean isJoystickRelCenterEnabled = !EmulationMenuSettings.getJoystickRelCenter();
+ EmulationMenuSettings.setJoystickRelCenter(isJoystickRelCenterEnabled);
+ item.setChecked(isJoystickRelCenterEnabled);
+ break;
+ case MENU_ACTION_DPAD_SLIDE_ENABLE:
+ final boolean isDpadSlideEnabled = !EmulationMenuSettings.getDpadSlideEnable();
+ EmulationMenuSettings.setDpadSlideEnable(isDpadSlideEnabled);
+ item.setChecked(isDpadSlideEnabled);
break;
}
diff --git a/src/android/app/src/main/java/org/citra/citra_emu/overlay/InputOverlay.java b/src/android/app/src/main/java/org/citra/citra_emu/overlay/InputOverlay.java
index 97de95ab7..cdb2f7666 100644
--- a/src/android/app/src/main/java/org/citra/citra_emu/overlay/InputOverlay.java
+++ b/src/android/app/src/main/java/org/citra/citra_emu/overlay/InputOverlay.java
@@ -52,6 +52,7 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener {
// Stores the ID of the pointer that interacted with the 3DS touchscreen.
private int mTouchscreenPointerId = -1;
+
/**
* Constructor
*
@@ -439,60 +440,64 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener {
boolean down = false;
boolean left = false;
boolean right = false;
- if (AxisY < -InputOverlayDrawableDpad.VIRT_AXIS_DEADZONE) {
- NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, dpad.getId(0),
- NativeLibrary.ButtonState.PRESSED);
- up = true;
- } else {
- NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, dpad.getId(0),
- NativeLibrary.ButtonState.RELEASED);
- }
- if (AxisY > InputOverlayDrawableDpad.VIRT_AXIS_DEADZONE) {
- NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, dpad.getId(1),
- NativeLibrary.ButtonState.PRESSED);
- down = true;
- } else {
- NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, dpad.getId(1),
- NativeLibrary.ButtonState.RELEASED);
- }
- if (AxisX < -InputOverlayDrawableDpad.VIRT_AXIS_DEADZONE) {
- NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, dpad.getId(2),
- NativeLibrary.ButtonState.PRESSED);
- left = true;
- } else {
- NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, dpad.getId(2),
- NativeLibrary.ButtonState.RELEASED);
- }
- if (AxisX > InputOverlayDrawableDpad.VIRT_AXIS_DEADZONE) {
- NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, dpad.getId(3),
- NativeLibrary.ButtonState.PRESSED);
- right = true;
- } else {
- NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, dpad.getId(3),
- NativeLibrary.ButtonState.RELEASED);
- }
+ if (EmulationMenuSettings.getDpadSlideEnable() ||
+ (event.getAction() & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_DOWN ||
+ (event.getAction() & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_POINTER_DOWN) {
+ if (AxisY < -InputOverlayDrawableDpad.VIRT_AXIS_DEADZONE) {
+ NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, dpad.getId(0),
+ NativeLibrary.ButtonState.PRESSED);
+ up = true;
+ } else {
+ NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, dpad.getId(0),
+ NativeLibrary.ButtonState.RELEASED);
+ }
+ if (AxisY > InputOverlayDrawableDpad.VIRT_AXIS_DEADZONE) {
+ NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, dpad.getId(1),
+ NativeLibrary.ButtonState.PRESSED);
+ down = true;
+ } else {
+ NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, dpad.getId(1),
+ NativeLibrary.ButtonState.RELEASED);
+ }
+ if (AxisX < -InputOverlayDrawableDpad.VIRT_AXIS_DEADZONE) {
+ NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, dpad.getId(2),
+ NativeLibrary.ButtonState.PRESSED);
+ left = true;
+ } else {
+ NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, dpad.getId(2),
+ NativeLibrary.ButtonState.RELEASED);
+ }
+ if (AxisX > InputOverlayDrawableDpad.VIRT_AXIS_DEADZONE) {
+ NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, dpad.getId(3),
+ NativeLibrary.ButtonState.PRESSED);
+ right = true;
+ } else {
+ NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, dpad.getId(3),
+ NativeLibrary.ButtonState.RELEASED);
+ }
- // Set state
- if (up) {
- if (left)
- dpad.setState(InputOverlayDrawableDpad.STATE_PRESSED_UP_LEFT);
- else if (right)
- dpad.setState(InputOverlayDrawableDpad.STATE_PRESSED_UP_RIGHT);
- else
- dpad.setState(InputOverlayDrawableDpad.STATE_PRESSED_UP);
- } else if (down) {
- if (left)
- dpad.setState(InputOverlayDrawableDpad.STATE_PRESSED_DOWN_LEFT);
- else if (right)
- dpad.setState(InputOverlayDrawableDpad.STATE_PRESSED_DOWN_RIGHT);
- else
- dpad.setState(InputOverlayDrawableDpad.STATE_PRESSED_DOWN);
- } else if (left) {
- dpad.setState(InputOverlayDrawableDpad.STATE_PRESSED_LEFT);
- } else if (right) {
- dpad.setState(InputOverlayDrawableDpad.STATE_PRESSED_RIGHT);
- } else {
- dpad.setState(InputOverlayDrawableDpad.STATE_DEFAULT);
+ // Set state
+ if (up) {
+ if (left)
+ dpad.setState(InputOverlayDrawableDpad.STATE_PRESSED_UP_LEFT);
+ else if (right)
+ dpad.setState(InputOverlayDrawableDpad.STATE_PRESSED_UP_RIGHT);
+ else
+ dpad.setState(InputOverlayDrawableDpad.STATE_PRESSED_UP);
+ } else if (down) {
+ if (left)
+ dpad.setState(InputOverlayDrawableDpad.STATE_PRESSED_DOWN_LEFT);
+ else if (right)
+ dpad.setState(InputOverlayDrawableDpad.STATE_PRESSED_DOWN_RIGHT);
+ else
+ dpad.setState(InputOverlayDrawableDpad.STATE_PRESSED_DOWN);
+ } else if (left) {
+ dpad.setState(InputOverlayDrawableDpad.STATE_PRESSED_LEFT);
+ } else if (right) {
+ dpad.setState(InputOverlayDrawableDpad.STATE_PRESSED_RIGHT);
+ } else {
+ dpad.setState(InputOverlayDrawableDpad.STATE_DEFAULT);
+ }
}
}
}
diff --git a/src/android/app/src/main/java/org/citra/citra_emu/overlay/InputOverlayDrawableDpad.java b/src/android/app/src/main/java/org/citra/citra_emu/overlay/InputOverlayDrawableDpad.java
index 893f99f55..87f3b7cd9 100644
--- a/src/android/app/src/main/java/org/citra/citra_emu/overlay/InputOverlayDrawableDpad.java
+++ b/src/android/app/src/main/java/org/citra/citra_emu/overlay/InputOverlayDrawableDpad.java
@@ -27,7 +27,7 @@ public final class InputOverlayDrawableDpad {
public static final int STATE_PRESSED_UP_RIGHT = 6;
public static final int STATE_PRESSED_DOWN_LEFT = 7;
public static final int STATE_PRESSED_DOWN_RIGHT = 8;
- public static final float VIRT_AXIS_DEADZONE = 0.2f;
+ public static final float VIRT_AXIS_DEADZONE = 0.5f;
// The ID identifying what type of button this Drawable represents.
private int[] mButtonType = new int[4];
private int mTrackId;
diff --git a/src/android/app/src/main/java/org/citra/citra_emu/utils/EmulationMenuSettings.java b/src/android/app/src/main/java/org/citra/citra_emu/utils/EmulationMenuSettings.java
index dc58d8f38..9664f8464 100644
--- a/src/android/app/src/main/java/org/citra/citra_emu/utils/EmulationMenuSettings.java
+++ b/src/android/app/src/main/java/org/citra/citra_emu/utils/EmulationMenuSettings.java
@@ -26,6 +26,16 @@ public class EmulationMenuSettings {
editor.apply();
}
+ public static boolean getDpadSlideEnable() {
+ return mPreferences.getBoolean("EmulationMenuSettings_DpadSlideEnable", true);
+ }
+
+ public static void setDpadSlideEnable(boolean value) {
+ final SharedPreferences.Editor editor = mPreferences.edit();
+ editor.putBoolean("EmulationMenuSettings_DpadSlideEnable", value);
+ editor.apply();
+ }
+
public static int getLandscapeScreenLayout() {
return mPreferences.getInt("EmulationMenuSettings_LandscapeScreenLayout", LayoutOption_MobileLandscape);
}
diff --git a/src/android/app/src/main/res/menu/menu_emulation.xml b/src/android/app/src/main/res/menu/menu_emulation.xml
index 377ba5f6d..a3ecb80d7 100644
--- a/src/android/app/src/main/res/menu/menu_emulation.xml
+++ b/src/android/app/src/main/res/menu/menu_emulation.xml
@@ -24,6 +24,10 @@
android:id="@+id/menu_emulation_joystick_rel_center"
android:checkable="true"
android:title="@string/emulation_control_joystick_rel_center"/>
+
- Toggle Controls
Adjust Scale
Relative Stick Center
+ Enable DPad Sliding
Open Settings
Landscape Screen Layout
Default