Android: new overlay button to swap screens (#51)

Co-authored-by: gperrio <guillaume.perrio@ingenico.com>
Co-authored-by: OpenSauce04 <opensauce04@gmail.com>
This commit is contained in:
gperrio 2024-04-07 23:31:28 +02:00 committed by GitHub
parent a62fd26fca
commit 15c9e3e007
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
14 changed files with 55 additions and 5 deletions

View File

@ -708,6 +708,7 @@ object NativeLibrary {
const val DPAD = 780 const val DPAD = 780
const val BUTTON_DEBUG = 781 const val BUTTON_DEBUG = 781
const val BUTTON_GPIO14 = 782 const val BUTTON_GPIO14 = 782
const val BUTTON_SWAP = 800
} }
/** /**

View File

@ -738,12 +738,12 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback, Choreographer.Fram
private fun showToggleControlsDialog() { private fun showToggleControlsDialog() {
val editor = preferences.edit() val editor = preferences.edit()
val enabledButtons = BooleanArray(14) val enabledButtons = BooleanArray(15)
enabledButtons.forEachIndexed { i: Int, _: Boolean -> enabledButtons.forEachIndexed { i: Int, _: Boolean ->
// Buttons that are disabled by default // Buttons that are disabled by default
var defaultValue = true var defaultValue = true
when (i) { when (i) {
6, 7, 12, 13 -> defaultValue = false 6, 7, 12, 13, 14 -> defaultValue = false
} }
enabledButtons[i] = preferences.getBoolean("buttonToggle$i", defaultValue) enabledButtons[i] = preferences.getBoolean("buttonToggle$i", defaultValue)
} }
@ -816,10 +816,10 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback, Choreographer.Fram
.apply() .apply()
val editor = preferences.edit() val editor = preferences.edit()
for (i in 0 until 14) { for (i in 0 until 15) {
var defaultValue = true var defaultValue = true
when (i) { when (i) {
6, 7, 12, 13 -> defaultValue = false 6, 7, 12, 13, 14 -> defaultValue = false
} }
editor.putBoolean("buttonToggle$i", defaultValue) editor.putBoolean("buttonToggle$i", defaultValue)
} }

View File

@ -76,6 +76,15 @@ class InputOverlay(context: Context?, attrs: AttributeSet?) : SurfaceView(contex
overlayJoysticks.forEach { it.draw(canvas) } overlayJoysticks.forEach { it.draw(canvas) }
} }
private fun swapScreen() {
val isEnabled = !EmulationMenuSettings.swapScreens
EmulationMenuSettings.swapScreens = isEnabled
NativeLibrary.swapScreens(
isEnabled,
(context as Activity).windowManager.defaultDisplay.rotation
)
}
override fun onTouch(v: View, event: MotionEvent): Boolean { override fun onTouch(v: View, event: MotionEvent): Boolean {
if (isInEditMode) { if (isInEditMode) {
return onTouchWhileEditing(event) return onTouchWhileEditing(event)
@ -85,6 +94,11 @@ class InputOverlay(context: Context?, attrs: AttributeSet?) : SurfaceView(contex
if (!button.updateStatus(event)) { if (!button.updateStatus(event)) {
continue continue
} }
if (button.id == NativeLibrary.ButtonType.BUTTON_SWAP && button.status == NativeLibrary.ButtonState.PRESSED) {
swapScreen()
}
NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, button.id, button.status) NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, button.id, button.status)
shouldUpdateView = true shouldUpdateView = true
} }
@ -437,6 +451,18 @@ class InputOverlay(context: Context?, attrs: AttributeSet?) : SurfaceView(contex
) )
) )
} }
if (preferences.getBoolean("buttonToggle14", false)) {
overlayButtons.add(
initializeOverlayButton(
context,
R.drawable.button_swap,
R.drawable.button_swap_pressed,
NativeLibrary.ButtonType.BUTTON_SWAP,
orientation
)
)
}
} }
fun refreshControls() { fun refreshControls() {
@ -634,6 +660,14 @@ class InputOverlay(context: Context?, attrs: AttributeSet?) : SurfaceView(contex
NativeLibrary.ButtonType.STICK_LEFT.toString() + "-Y", NativeLibrary.ButtonType.STICK_LEFT.toString() + "-Y",
resources.getInteger(R.integer.N3DS_STICK_MAIN_Y).toFloat() / 1000 * maxY resources.getInteger(R.integer.N3DS_STICK_MAIN_Y).toFloat() / 1000 * maxY
) )
.putFloat(
NativeLibrary.ButtonType.BUTTON_SWAP.toString() + "-X",
resources.getInteger(R.integer.N3DS_BUTTON_SWAP_X).toFloat() / 1000 * maxX
)
.putFloat(
NativeLibrary.ButtonType.BUTTON_SWAP.toString() + "-Y",
resources.getInteger(R.integer.N3DS_BUTTON_SWAP_Y).toFloat() / 1000 * maxY
)
.apply() .apply()
} }
@ -769,6 +803,14 @@ class InputOverlay(context: Context?, attrs: AttributeSet?) : SurfaceView(contex
NativeLibrary.ButtonType.STICK_LEFT.toString() + portrait + "-Y", NativeLibrary.ButtonType.STICK_LEFT.toString() + portrait + "-Y",
resources.getInteger(R.integer.N3DS_STICK_MAIN_PORTRAIT_Y).toFloat() / 1000 * maxY resources.getInteger(R.integer.N3DS_STICK_MAIN_PORTRAIT_Y).toFloat() / 1000 * maxY
) )
.putFloat(
NativeLibrary.ButtonType.BUTTON_SWAP.toString() + portrait + "-X",
resources.getInteger(R.integer.N3DS_BUTTON_SWAP_PORTRAIT_X).toFloat() / 1000 * maxX
)
.putFloat(
NativeLibrary.ButtonType.BUTTON_SWAP.toString() + portrait + "-Y",
resources.getInteger(R.integer.N3DS_BUTTON_SWAP_PORTRAIT_Y).toFloat() / 1000 * maxY
)
.apply() .apply()
} }
@ -879,7 +921,8 @@ class InputOverlay(context: Context?, attrs: AttributeSet?) : SurfaceView(contex
var scale: Float = when (buttonId) { var scale: Float = when (buttonId) {
NativeLibrary.ButtonType.BUTTON_HOME, NativeLibrary.ButtonType.BUTTON_HOME,
NativeLibrary.ButtonType.BUTTON_START, NativeLibrary.ButtonType.BUTTON_START,
NativeLibrary.ButtonType.BUTTON_SELECT -> 0.08f NativeLibrary.ButtonType.BUTTON_SELECT,
NativeLibrary.ButtonType.BUTTON_SWAP -> 0.08f
NativeLibrary.ButtonType.TRIGGER_L, NativeLibrary.ButtonType.TRIGGER_L,
NativeLibrary.ButtonType.TRIGGER_R, NativeLibrary.ButtonType.TRIGGER_R,

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

@ -78,6 +78,7 @@
<item>@string/controller_circlepad</item> <item>@string/controller_circlepad</item>
<item>@string/controller_c</item> <item>@string/controller_c</item>
<item>@string/button_home</item> <item>@string/button_home</item>
<item>@string/button_swap</item>
</string-array> </string-array>
<string-array name="cameraImageSourceNames"> <string-array name="cameraImageSourceNames">

View File

@ -31,6 +31,8 @@
<integer name="N3DS_BUTTON_START_Y">850</integer> <integer name="N3DS_BUTTON_START_Y">850</integer>
<integer name="N3DS_BUTTON_HOME_X">510</integer> <integer name="N3DS_BUTTON_HOME_X">510</integer>
<integer name="N3DS_BUTTON_HOME_Y">850</integer> <integer name="N3DS_BUTTON_HOME_Y">850</integer>
<integer name="N3DS_BUTTON_SWAP_X">370</integer>
<integer name="N3DS_BUTTON_SWAP_Y">850</integer>
<!-- Default N3DS portrait layout --> <!-- Default N3DS portrait layout -->
<integer name="N3DS_BUTTON_A_PORTRAIT_X">810</integer> <integer name="N3DS_BUTTON_A_PORTRAIT_X">810</integer>
@ -61,5 +63,7 @@
<integer name="N3DS_BUTTON_SELECT_PORTRAIT_Y">794</integer> <integer name="N3DS_BUTTON_SELECT_PORTRAIT_Y">794</integer>
<integer name="N3DS_BUTTON_START_PORTRAIT_X">520</integer> <integer name="N3DS_BUTTON_START_PORTRAIT_X">520</integer>
<integer name="N3DS_BUTTON_START_PORTRAIT_Y">794</integer> <integer name="N3DS_BUTTON_START_PORTRAIT_Y">794</integer>
<integer name="N3DS_BUTTON_SWAP_PORTRAIT_X">460</integer>
<integer name="N3DS_BUTTON_SWAP_PORTRAIT_Y">675</integer>
</resources> </resources>

View File

@ -121,6 +121,7 @@
<string name="button_select" translatable="false">SELECT</string> <string name="button_select" translatable="false">SELECT</string>
<string name="button_start" translatable="false">START</string> <string name="button_start" translatable="false">START</string>
<string name="button_home">HOME</string> <string name="button_home">HOME</string>
<string name="button_swap">Swap Screens</string>
<string name="button_x" translatable="false">X</string> <string name="button_x" translatable="false">X</string>
<string name="button_y" translatable="false">Y</string> <string name="button_y" translatable="false">Y</string>
<string name="button_l" translatable="false">L</string> <string name="button_l" translatable="false">L</string>