diff options
| author | 2023-05-28 20:05:55 -0400 | |
|---|---|---|
| committer | 2023-06-03 00:06:04 -0700 | |
| commit | d49eb7faad11c700d982a4e8023404da13a2a93f (patch) | |
| tree | 3d8546e9bf1e48b875f8528089abc1a57f5ce9ee /src | |
| parent | CI: use the verify pipeline to do releases (diff) | |
| download | yuzu-d49eb7faad11c700d982a4e8023404da13a2a93f.tar.gz yuzu-d49eb7faad11c700d982a4e8023404da13a2a93f.tar.xz yuzu-d49eb7faad11c700d982a4e8023404da13a2a93f.zip | |
android: Add FPS toggle
Diffstat (limited to 'src')
4 files changed, 37 insertions, 10 deletions
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt index 1d1c1333d..a31414a0e 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt | |||
| @@ -111,19 +111,23 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { | |||
| 111 | } | 111 | } |
| 112 | true | 112 | true |
| 113 | } | 113 | } |
| 114 | |||
| 114 | R.id.menu_settings -> { | 115 | R.id.menu_settings -> { |
| 115 | SettingsActivity.launch(requireContext(), SettingsFile.FILE_NAME_CONFIG, "") | 116 | SettingsActivity.launch(requireContext(), SettingsFile.FILE_NAME_CONFIG, "") |
| 116 | true | 117 | true |
| 117 | } | 118 | } |
| 119 | |||
| 118 | R.id.menu_overlay_controls -> { | 120 | R.id.menu_overlay_controls -> { |
| 119 | showOverlayOptions() | 121 | showOverlayOptions() |
| 120 | true | 122 | true |
| 121 | } | 123 | } |
| 124 | |||
| 122 | R.id.menu_exit -> { | 125 | R.id.menu_exit -> { |
| 123 | requireActivity().finish() | 126 | requireActivity().finish() |
| 124 | emulationState.stop() | 127 | emulationState.stop() |
| 125 | true | 128 | true |
| 126 | } | 129 | } |
| 130 | |||
| 127 | else -> true | 131 | else -> true |
| 128 | } | 132 | } |
| 129 | } | 133 | } |
| @@ -224,6 +228,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { | |||
| 224 | popup.menuInflater.inflate(R.menu.menu_overlay_options, popup.menu) | 228 | popup.menuInflater.inflate(R.menu.menu_overlay_options, popup.menu) |
| 225 | 229 | ||
| 226 | popup.menu.apply { | 230 | popup.menu.apply { |
| 231 | findItem(R.id.menu_toggle_fps).isChecked = EmulationMenuSettings.showFps | ||
| 227 | findItem(R.id.menu_rel_stick_center).isChecked = EmulationMenuSettings.joystickRelCenter | 232 | findItem(R.id.menu_rel_stick_center).isChecked = EmulationMenuSettings.joystickRelCenter |
| 228 | findItem(R.id.menu_dpad_slide).isChecked = EmulationMenuSettings.dpadSlide | 233 | findItem(R.id.menu_dpad_slide).isChecked = EmulationMenuSettings.dpadSlide |
| 229 | findItem(R.id.menu_show_overlay).isChecked = EmulationMenuSettings.showOverlay | 234 | findItem(R.id.menu_show_overlay).isChecked = EmulationMenuSettings.showOverlay |
| @@ -232,12 +237,20 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { | |||
| 232 | 237 | ||
| 233 | popup.setOnMenuItemClickListener { | 238 | popup.setOnMenuItemClickListener { |
| 234 | when (it.itemId) { | 239 | when (it.itemId) { |
| 240 | R.id.menu_toggle_fps -> { | ||
| 241 | it.isChecked = !it.isChecked | ||
| 242 | EmulationMenuSettings.showFps = it.isChecked | ||
| 243 | updateShowFpsOverlay() | ||
| 244 | true | ||
| 245 | } | ||
| 246 | |||
| 235 | R.id.menu_edit_overlay -> { | 247 | R.id.menu_edit_overlay -> { |
| 236 | binding.drawerLayout.close() | 248 | binding.drawerLayout.close() |
| 237 | binding.surfaceInputOverlay.requestFocus() | 249 | binding.surfaceInputOverlay.requestFocus() |
| 238 | startConfiguringControls() | 250 | startConfiguringControls() |
| 239 | true | 251 | true |
| 240 | } | 252 | } |
| 253 | |||
| 241 | R.id.menu_toggle_controls -> { | 254 | R.id.menu_toggle_controls -> { |
| 242 | val preferences = | 255 | val preferences = |
| 243 | PreferenceManager.getDefaultSharedPreferences(YuzuApplication.appContext) | 256 | PreferenceManager.getDefaultSharedPreferences(YuzuApplication.appContext) |
| @@ -276,32 +289,38 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { | |||
| 276 | } | 289 | } |
| 277 | true | 290 | true |
| 278 | } | 291 | } |
| 292 | |||
| 279 | R.id.menu_show_overlay -> { | 293 | R.id.menu_show_overlay -> { |
| 280 | it.isChecked = !it.isChecked | 294 | it.isChecked = !it.isChecked |
| 281 | EmulationMenuSettings.showOverlay = it.isChecked | 295 | EmulationMenuSettings.showOverlay = it.isChecked |
| 282 | refreshInputOverlay() | 296 | refreshInputOverlay() |
| 283 | true | 297 | true |
| 284 | } | 298 | } |
| 299 | |||
| 285 | R.id.menu_rel_stick_center -> { | 300 | R.id.menu_rel_stick_center -> { |
| 286 | it.isChecked = !it.isChecked | 301 | it.isChecked = !it.isChecked |
| 287 | EmulationMenuSettings.joystickRelCenter = it.isChecked | 302 | EmulationMenuSettings.joystickRelCenter = it.isChecked |
| 288 | true | 303 | true |
| 289 | } | 304 | } |
| 305 | |||
| 290 | R.id.menu_dpad_slide -> { | 306 | R.id.menu_dpad_slide -> { |
| 291 | it.isChecked = !it.isChecked | 307 | it.isChecked = !it.isChecked |
| 292 | EmulationMenuSettings.dpadSlide = it.isChecked | 308 | EmulationMenuSettings.dpadSlide = it.isChecked |
| 293 | true | 309 | true |
| 294 | } | 310 | } |
| 311 | |||
| 295 | R.id.menu_haptics -> { | 312 | R.id.menu_haptics -> { |
| 296 | it.isChecked = !it.isChecked | 313 | it.isChecked = !it.isChecked |
| 297 | EmulationMenuSettings.hapticFeedback = it.isChecked | 314 | EmulationMenuSettings.hapticFeedback = it.isChecked |
| 298 | true | 315 | true |
| 299 | } | 316 | } |
| 317 | |||
| 300 | R.id.menu_reset_overlay -> { | 318 | R.id.menu_reset_overlay -> { |
| 301 | binding.drawerLayout.close() | 319 | binding.drawerLayout.close() |
| 302 | resetInputOverlay() | 320 | resetInputOverlay() |
| 303 | true | 321 | true |
| 304 | } | 322 | } |
| 323 | |||
| 305 | else -> true | 324 | else -> true |
| 306 | } | 325 | } |
| 307 | } | 326 | } |
| @@ -333,12 +352,14 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { | |||
| 333 | right = cutInsets.right | 352 | right = cutInsets.right |
| 334 | } | 353 | } |
| 335 | 354 | ||
| 336 | // Don't use padding if the navigation bar isn't in the way | 355 | v.setPadding(left, cutInsets.top, right, 0) |
| 337 | if (InsetsHelper.getBottomPaddingRequired(requireActivity()) > 0) { | 356 | |
| 338 | v.setPadding(left, cutInsets.top, right, 0) | 357 | binding.showFpsText.setPadding( |
| 339 | } else { | 358 | cutInsets.left, |
| 340 | v.setPadding(left, cutInsets.top, right, 0) | 359 | cutInsets.top, |
| 341 | } | 360 | cutInsets.right, |
| 361 | cutInsets.bottom | ||
| 362 | ) | ||
| 342 | windowInsets | 363 | windowInsets |
| 343 | } | 364 | } |
| 344 | } | 365 | } |
| @@ -431,6 +452,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { | |||
| 431 | NativeLibrary.surfaceDestroyed() | 452 | NativeLibrary.surfaceDestroyed() |
| 432 | state = State.PAUSED | 453 | state = State.PAUSED |
| 433 | } | 454 | } |
| 455 | |||
| 434 | State.PAUSED -> Log.warning("[EmulationFragment] Surface cleared while emulation paused.") | 456 | State.PAUSED -> Log.warning("[EmulationFragment] Surface cleared while emulation paused.") |
| 435 | else -> Log.warning("[EmulationFragment] Surface cleared while emulation stopped.") | 457 | else -> Log.warning("[EmulationFragment] Surface cleared while emulation stopped.") |
| 436 | } | 458 | } |
| @@ -448,11 +470,13 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { | |||
| 448 | }, "NativeEmulation") | 470 | }, "NativeEmulation") |
| 449 | mEmulationThread.start() | 471 | mEmulationThread.start() |
| 450 | } | 472 | } |
| 473 | |||
| 451 | State.PAUSED -> { | 474 | State.PAUSED -> { |
| 452 | Log.debug("[EmulationFragment] Resuming emulation.") | 475 | Log.debug("[EmulationFragment] Resuming emulation.") |
| 453 | NativeLibrary.surfaceChanged(surface) | 476 | NativeLibrary.surfaceChanged(surface) |
| 454 | NativeLibrary.unPauseEmulation() | 477 | NativeLibrary.unPauseEmulation() |
| 455 | } | 478 | } |
| 479 | |||
| 456 | else -> Log.debug("[EmulationFragment] Bug, run called while already running.") | 480 | else -> Log.debug("[EmulationFragment] Bug, run called while already running.") |
| 457 | } | 481 | } |
| 458 | state = State.RUNNING | 482 | state = State.RUNNING |
diff --git a/src/android/app/src/main/res/layout/fragment_emulation.xml b/src/android/app/src/main/res/layout/fragment_emulation.xml index 68eedffe1..648b5aaed 100644 --- a/src/android/app/src/main/res/layout/fragment_emulation.xml +++ b/src/android/app/src/main/res/layout/fragment_emulation.xml | |||
| @@ -32,11 +32,8 @@ | |||
| 32 | android:id="@+id/show_fps_text" | 32 | android:id="@+id/show_fps_text" |
| 33 | android:layout_width="wrap_content" | 33 | android:layout_width="wrap_content" |
| 34 | android:layout_height="wrap_content" | 34 | android:layout_height="wrap_content" |
| 35 | android:layout_marginStart="18dp" | ||
| 36 | android:layout_marginTop="2dp" | ||
| 37 | android:clickable="false" | 35 | android:clickable="false" |
| 38 | android:linksClickable="false" | 36 | android:focusable="false" |
| 39 | android:longClickable="false" | ||
| 40 | android:shadowColor="@android:color/black" | 37 | android:shadowColor="@android:color/black" |
| 41 | android:textColor="@android:color/white" | 38 | android:textColor="@android:color/white" |
| 42 | android:textSize="12sp" /> | 39 | android:textSize="12sp" /> |
diff --git a/src/android/app/src/main/res/menu/menu_overlay_options.xml b/src/android/app/src/main/res/menu/menu_overlay_options.xml index 9acc29405..09e8b7970 100644 --- a/src/android/app/src/main/res/menu/menu_overlay_options.xml +++ b/src/android/app/src/main/res/menu/menu_overlay_options.xml | |||
| @@ -2,6 +2,11 @@ | |||
| 2 | <menu xmlns:android="http://schemas.android.com/apk/res/android"> | 2 | <menu xmlns:android="http://schemas.android.com/apk/res/android"> |
| 3 | 3 | ||
| 4 | <item | 4 | <item |
| 5 | android:id="@+id/menu_toggle_fps" | ||
| 6 | android:title="@string/emulation_fps_counter" | ||
| 7 | android:checkable="true" /> | ||
| 8 | |||
| 9 | <item | ||
| 5 | android:id="@+id/menu_edit_overlay" | 10 | android:id="@+id/menu_edit_overlay" |
| 6 | android:title="@string/emulation_touch_overlay_edit" /> | 11 | android:title="@string/emulation_touch_overlay_edit" /> |
| 7 | 12 | ||
diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml index 87e07b581..09b95848f 100644 --- a/src/android/app/src/main/res/values/strings.xml +++ b/src/android/app/src/main/res/values/strings.xml | |||
| @@ -183,6 +183,7 @@ | |||
| 183 | <!-- Emulation Menu --> | 183 | <!-- Emulation Menu --> |
| 184 | <string name="emulation_exit">Exit Emulation</string> | 184 | <string name="emulation_exit">Exit Emulation</string> |
| 185 | <string name="emulation_done">Done</string> | 185 | <string name="emulation_done">Done</string> |
| 186 | <string name="emulation_fps_counter">FPS Counter</string> | ||
| 186 | <string name="emulation_toggle_controls">Toggle Controls</string> | 187 | <string name="emulation_toggle_controls">Toggle Controls</string> |
| 187 | <string name="emulation_rel_stick_center">Relative Stick Center</string> | 188 | <string name="emulation_rel_stick_center">Relative Stick Center</string> |
| 188 | <string name="emulation_dpad_slide">DPad Slide</string> | 189 | <string name="emulation_dpad_slide">DPad Slide</string> |