From 15c9e3e007b4ab9901b35a99ed4bdc2e4fbff523 Mon Sep 17 00:00:00 2001 From: gperrio Date: Sun, 7 Apr 2024 23:31:28 +0200 Subject: [PATCH] Android: new overlay button to swap screens (#51) Co-authored-by: gperrio Co-authored-by: OpenSauce04 --- .../github/lime3ds/android/NativeLibrary.kt | 1 + .../android/fragments/EmulationFragment.kt | 8 ++-- .../lime3ds/android/overlay/InputOverlay.kt | 45 +++++++++++++++++- .../main/res/drawable-hdpi/button_swap.png | Bin 0 -> 4844 bytes .../res/drawable-hdpi/button_swap_pressed.png | Bin 0 -> 4329 bytes .../main/res/drawable-xhdpi/button_swap.png | Bin 0 -> 6361 bytes .../drawable-xhdpi/button_swap_pressed.png | Bin 0 -> 5773 bytes .../main/res/drawable-xxhdpi/button_swap.png | Bin 0 -> 9425 bytes .../drawable-xxhdpi/button_swap_pressed.png | Bin 0 -> 8470 bytes .../main/res/drawable-xxxhdpi/button_swap.png | Bin 0 -> 4496 bytes .../drawable-xxxhdpi/button_swap_pressed.png | Bin 0 -> 4406 bytes .../app/src/main/res/values/arrays.xml | 1 + .../app/src/main/res/values/integers.xml | 4 ++ .../app/src/main/res/values/strings.xml | 1 + 14 files changed, 55 insertions(+), 5 deletions(-) create mode 100644 src/android/app/src/main/res/drawable-hdpi/button_swap.png create mode 100644 src/android/app/src/main/res/drawable-hdpi/button_swap_pressed.png create mode 100644 src/android/app/src/main/res/drawable-xhdpi/button_swap.png create mode 100644 src/android/app/src/main/res/drawable-xhdpi/button_swap_pressed.png create mode 100644 src/android/app/src/main/res/drawable-xxhdpi/button_swap.png create mode 100644 src/android/app/src/main/res/drawable-xxhdpi/button_swap_pressed.png create mode 100644 src/android/app/src/main/res/drawable-xxxhdpi/button_swap.png create mode 100644 src/android/app/src/main/res/drawable-xxxhdpi/button_swap_pressed.png diff --git a/src/android/app/src/main/java/io/github/lime3ds/android/NativeLibrary.kt b/src/android/app/src/main/java/io/github/lime3ds/android/NativeLibrary.kt index 9b7261977..ab9a99dd1 100644 --- a/src/android/app/src/main/java/io/github/lime3ds/android/NativeLibrary.kt +++ b/src/android/app/src/main/java/io/github/lime3ds/android/NativeLibrary.kt @@ -708,6 +708,7 @@ object NativeLibrary { const val DPAD = 780 const val BUTTON_DEBUG = 781 const val BUTTON_GPIO14 = 782 + const val BUTTON_SWAP = 800 } /** diff --git a/src/android/app/src/main/java/io/github/lime3ds/android/fragments/EmulationFragment.kt b/src/android/app/src/main/java/io/github/lime3ds/android/fragments/EmulationFragment.kt index 0f3d77da6..a104802d6 100644 --- a/src/android/app/src/main/java/io/github/lime3ds/android/fragments/EmulationFragment.kt +++ b/src/android/app/src/main/java/io/github/lime3ds/android/fragments/EmulationFragment.kt @@ -738,12 +738,12 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback, Choreographer.Fram private fun showToggleControlsDialog() { val editor = preferences.edit() - val enabledButtons = BooleanArray(14) + val enabledButtons = BooleanArray(15) enabledButtons.forEachIndexed { i: Int, _: Boolean -> // Buttons that are disabled by default var defaultValue = true when (i) { - 6, 7, 12, 13 -> defaultValue = false + 6, 7, 12, 13, 14 -> defaultValue = false } enabledButtons[i] = preferences.getBoolean("buttonToggle$i", defaultValue) } @@ -816,10 +816,10 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback, Choreographer.Fram .apply() val editor = preferences.edit() - for (i in 0 until 14) { + for (i in 0 until 15) { var defaultValue = true when (i) { - 6, 7, 12, 13 -> defaultValue = false + 6, 7, 12, 13, 14 -> defaultValue = false } editor.putBoolean("buttonToggle$i", defaultValue) } diff --git a/src/android/app/src/main/java/io/github/lime3ds/android/overlay/InputOverlay.kt b/src/android/app/src/main/java/io/github/lime3ds/android/overlay/InputOverlay.kt index a479d8a8a..b9b91e244 100644 --- a/src/android/app/src/main/java/io/github/lime3ds/android/overlay/InputOverlay.kt +++ b/src/android/app/src/main/java/io/github/lime3ds/android/overlay/InputOverlay.kt @@ -76,6 +76,15 @@ class InputOverlay(context: Context?, attrs: AttributeSet?) : SurfaceView(contex 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 { if (isInEditMode) { return onTouchWhileEditing(event) @@ -85,6 +94,11 @@ class InputOverlay(context: Context?, attrs: AttributeSet?) : SurfaceView(contex if (!button.updateStatus(event)) { continue } + + if (button.id == NativeLibrary.ButtonType.BUTTON_SWAP && button.status == NativeLibrary.ButtonState.PRESSED) { + swapScreen() + } + NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, button.id, button.status) 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() { @@ -634,6 +660,14 @@ class InputOverlay(context: Context?, attrs: AttributeSet?) : SurfaceView(contex NativeLibrary.ButtonType.STICK_LEFT.toString() + "-Y", 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() } @@ -769,6 +803,14 @@ class InputOverlay(context: Context?, attrs: AttributeSet?) : SurfaceView(contex NativeLibrary.ButtonType.STICK_LEFT.toString() + portrait + "-Y", 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() } @@ -879,7 +921,8 @@ class InputOverlay(context: Context?, attrs: AttributeSet?) : SurfaceView(contex var scale: Float = when (buttonId) { NativeLibrary.ButtonType.BUTTON_HOME, 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_R, diff --git a/src/android/app/src/main/res/drawable-hdpi/button_swap.png b/src/android/app/src/main/res/drawable-hdpi/button_swap.png new file mode 100644 index 0000000000000000000000000000000000000000..6f17924e74ecccad284a525d46cbe6c0aeff64a1 GIT binary patch literal 4844 zcmd6rS2WyF*T(-dqSt5n!7c_-icuHWnT;+(Vg**9mcbIxx+&qf;?YSB`$Qvm=#tD~)HN?cq24GJ>i zY&z>sPFz4frdsMi)d1%oVsOPp%|HzRJ|l-}A_J^(=1@o#`$-=^aL0LBO% zO*QiX_+~b>FSAp6*ZOdhufMi@Hk4aZAR6FfgMXp=_HfkXKJw8uU;2$2PNf#*#m9d3 zmR7zo84Pa#6Eg+RVA*?HW8cU2>=)=nTv#`jC-mykCd1RJ_X1g zqeepje}1zq2eNgD9~fYtnE9h!&KjMUUlv!$MaGMGC1B+wBtFsD!)V03sTAnAx*>bH zn{Hgp<#~S`B_|Cr@>UACEUsR0Of)q7{mQ(P#!j<@B%cK{XK&0>k$%PBv@1cJt0|$S zYutTc~4Z+$e)9Nx2oXQJIZ3-c?cU@16r2XRX{sHMea}n96 z(L##I&TqFix;GSC5t3}mk|+kZR|csbsfnqTZrHFAknmD-IiWh{jNzd5NX>m$!@z!L zvLgGtR-*PDuOr7nN_3WDX?-jsTmZ{E&c|`{;mx-RKiRx4kkUHK9!SagtwC9 z3zywb9YfSZ5*huTnLt!=s*9wUztPc!)>!Gsjhf21(e5HHl5lF8`?V9!NJkwRTtrYn z{W;(rQ6`KT%M8)M8KagAq8yFuh04%ao0N%7$fJQPfU_%1>-$-}#^z?*{p(a@PXK2U@_;vFcXvqE; zq}I{ZDzYKrYimM4dw{RNyU_cUz%C%zd%tKPl z@;6aN=nJJ{JV#E32M0o${DYkDKk)kc!}fh?sg5spF2Cz1`pN6N*@n*pk!=niue2*f z3wag1n#W@6_`NzmRqS)Gf+K*GAH?HuDJ@OLU@*~X zY0NyQRtxoRmKpgSa5LV(XNVIqQBnQU%1T*o<)G0%nuqB4cySJAuLBaNVGw6F>0X;Dd^#oi3j0Y?aWHiN5XfOsS(v3pX>- z!>glXV^*b^K9?8g$_s(3*=ogx*^G+5zqgsLz5>?P*AmMw>JWo(q#nOi11fKb;BE$@ z?p$Qpp#mS`QRf3+ySn5}P=GBYs9p5u<%mRo7`3M!4&&att9T(BxE%9ukCL{ z=E$iZg7ZEYA~w-~qYs^j{9O!NwGv5bJS2`jYu;nje=0fnbphOyw~3|#0YmWr`X#N= z!g2jfhc}w9)5NUgPJ7tI3h1<@`|y7rmK8LKo0bx3%B459v2lNZanu=3HBvbyrM)_i z)Z)x4RIeSMRA#fvoVuYbj;5LYxzi!`pvL~JVFBeFBtXj_L+i z<9{beBAN2r|7+QjmtE!!5q3+XN2jEpKZFgi~tuErdl$IN%9} z?GzOi>F|W^57&&9TNaOvkBfA7ck31=;z=zG`JQVZ|dk(X;?yA=6IfT zX}O#g`3DWAgfqT~%K{WyY4d8Lgcfn9TiC}L;RW{roSMCa^B!^8kkbVS*9>P;i$Em6@r0Re&N&|O+uTK?r* zq8WE;yz^}3SuZ&}8NfR4RYoj0sH5}Z)0+pr)L|1K>SL+p>+~N%YlqQ7fQ*?H>71xh>xk9+f`4v z!COL(DTH)M#M1AbcHa(G;%?{g!aa?)y%g1pnJK!ShUoBF9T0q-p022;tNZTZC-eWFzD%FE*Z0gNM!=vt#-PbQ zHX3^6{h=Kq)UGAz)f*dVDYTN%D|rVD<*8k`!i&IQS3v>bZNJduCekQ4Mky#3!6_28 zHHVe2c|`$UB;7^U$r)K#SO`+WONP-v#d$~e2Y*ggAfWAc!W0ebs=SuP{ex*#?I zI@2#`&T&6ji~=+(gyRUS0RF$QYCZ=_NQBI1o-b%lm1uI3^G(#wDEWFWGeLfC1S{|#>(3+yk7`3z% z%Tx7ds@4VO>A9s4-}&9sE0K>x_1Q1&ll5wRj$6HTb$~7V;rD7ge5;;B^S)CsJoiEZ zi)uJIIcX%aMm+d%OLjQEw!YnxSM9s^Z&*41WtKVP?_ff+|3Z0nOV;bm%)sU4m0=l9 zYfJD0Oh|W!ApYU^Ocv*FrM@yW@0*&e9TXxu2A&MiTPr;aZoQDl{`zZ{t4$-y?B=h5 z^VufP^AYHzYAGStegMj;@XYZ> zIm_(;FOe25Uo(497_`M@QF-Bfv+h<7bY4sY5tiuKorE0JZd$iZlX?GIJZ!r4m2kFjE{z@e>b&ceyOlg+{vtq-_ z&|k?~2es_C^7Z(?QZ?LW(B#!^UDKhi@bfFC1vwkN}Z8FW?Bqw-5LQYq~CFlM?N-rqM zl&39w_rjGFq4j`9e{);CvxusA@F&xAic|SDm%HAJQ2GO2!po#2{CAqQodC@&a!A<4 z*&tCJJT6q0m?PJFx&CJ7*ea1%+C;O_5p@Op0>B8A=XZPut(@~y`aw5|6`k-8h<44Q zaWk8&v21S>CAjyjdYKLGTPx-&9+bF| zawbqix%sOdB5L=J_g1+q%4HF~AR=M(fiFZ%CtQ<&*GUt)Jj9^&ykZY5%+1pnczAf~ zmjTc$SzP`Vqg<8jJ|8yC_L|H?ql%Ie$;^IdituaS_7pf@wh|E^v@wTmNa}RhG2_(d zi$Lo3sV^jJ8Zmi4p#A*-i`+D}AdwkNdSSsEK10+m5!`2Ao>ObNPhplliRH@-Rv*~R z&(6;o&k-tbvDfX{0I8~}kqn)}IMKIUUYv4e8@iaUsu3lHcX3{;=+U2T*+SoSvJ{|UU+Vs{}tLGHNG4Gj8YS8h%+ZhP~a5wMvyl3;j zd`~hp*pEWFKd$U@k&JGgYoX?uNVb&?aB47Nm?Y3|Cmb3Ma#r(lL?$Ee% zP$)H^0A+KnsvL9NF+5qv-(o{uQXKCV1#MDLkdMVUy+7w0Ns)mEc$&R4S~F^u<57CeZdj>)f>W)4ewRfkutp+o-4m2w=mfgAvKTE&ff4 zy&vVl1K9BP-Y=@y(2OZO!bRjUXo>@k>M2g0W@b}5O*VE#Q@U&1uPIS@~j!bwC&9C4h=ly!s33HsCi~9^a zX)lh%;?A~TvRhj5BR~x6uZaHKQj+Mky$n&sDkm#nneIW1f|~yt>ZI_38B$;5Gw+jU zxw{O6m`OjMQrg6RKk@n3SLj@&4+MkoEd0Pnvg`Q#Be7!L7L$YQ5GA7-F&p%${}xl$ zM(70B26Gr;o6f=|vfFXzN|c%jga$gQ{>TWrGxcVt{B27X&bOO7QV+6U0KE9uZ?GEh zBOg8L^OSQd_AT$+V!3DXoB=AM9wQNlG5;w-@ZJ68d6;u!B;D5IO!GlI9KThsQ(AgX zFf!;hVPZ@{(B7}LgfVBrZn%npo1O;+l%~c{AD5P<{&OH6=;P|;n4I&eZuPT9eDEgU zzkWgg#y5;&szgzdQ$|TyWX|I}$hV&(+hl7?MTX*t)#88FWZ3XCnc7hpXA}V2+x~l# Q*r5V+?ip%UsoO{X2d8A>P5=M^ literal 0 HcmV?d00001 diff --git a/src/android/app/src/main/res/drawable-hdpi/button_swap_pressed.png b/src/android/app/src/main/res/drawable-hdpi/button_swap_pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..be07c6598993dc8498f19f70d05f5112d143cb3c GIT binary patch literal 4329 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 literal 0 HcmV?d00001 diff --git a/src/android/app/src/main/res/drawable-xhdpi/button_swap_pressed.png b/src/android/app/src/main/res/drawable-xhdpi/button_swap_pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..02b4e4e2f85883c124361370ec6f6559f56c417c GIT binary patch literal 5773 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 MwwZ37j^nfc0O5PK-T(jq literal 0 HcmV?d00001 diff --git a/src/android/app/src/main/res/drawable-xxhdpi/button_swap.png b/src/android/app/src/main/res/drawable-xxhdpi/button_swap.png new file mode 100644 index 0000000000000000000000000000000000000000..f92effc581762b65ccce0318e05782fa83dcd9b1 GIT binary patch literal 9425 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 literal 0 HcmV?d00001 diff --git a/src/android/app/src/main/res/drawable-xxhdpi/button_swap_pressed.png b/src/android/app/src/main/res/drawable-xxhdpi/button_swap_pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..8092e175dcbc3c90700e533a6c39bd18d90fd1d9 GIT binary patch literal 8470 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 ai(_?sFE@AAv||6Fz^Y~5UfE08hyDfOM=^2$ literal 0 HcmV?d00001 diff --git a/src/android/app/src/main/res/drawable-xxxhdpi/button_swap_pressed.png b/src/android/app/src/main/res/drawable-xxxhdpi/button_swap_pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..b17a9fa0e054d314c0eb207e785e903453f4095f GIT binary patch literal 4406 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 literal 0 HcmV?d00001 diff --git a/src/android/app/src/main/res/values/arrays.xml b/src/android/app/src/main/res/values/arrays.xml index cd542bae8..10ccfefd4 100644 --- a/src/android/app/src/main/res/values/arrays.xml +++ b/src/android/app/src/main/res/values/arrays.xml @@ -78,6 +78,7 @@ @string/controller_circlepad @string/controller_c @string/button_home + @string/button_swap diff --git a/src/android/app/src/main/res/values/integers.xml b/src/android/app/src/main/res/values/integers.xml index 8fee8e96f..50cde75f8 100644 --- a/src/android/app/src/main/res/values/integers.xml +++ b/src/android/app/src/main/res/values/integers.xml @@ -31,6 +31,8 @@ 850 510 850 + 370 + 850 810 @@ -61,5 +63,7 @@ 794 520 794 + 460 + 675 diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml index 63b6fbb69..da2b4b3ea 100644 --- a/src/android/app/src/main/res/values/strings.xml +++ b/src/android/app/src/main/res/values/strings.xml @@ -121,6 +121,7 @@ SELECT START HOME + Swap Screens X Y L