diff --git a/src/android/app/src/main/java/org/citron/citron_emu/activities/EmulationActivity.kt b/src/android/app/src/main/java/org/citron/citron_emu/activities/EmulationActivity.kt
index 5d314985c..85abf9d72 100644
--- a/src/android/app/src/main/java/org/citron/citron_emu/activities/EmulationActivity.kt
+++ b/src/android/app/src/main/java/org/citron/citron_emu/activities/EmulationActivity.kt
@@ -314,6 +314,7 @@ class EmulationActivity : AppCompatActivity(), SensorEventListener {
2 -> Rational(21, 9)
3 -> Rational(16, 10)
4 -> Rational(32, 9)
+ 5 -> null // Stretch to window
else -> null // Best fit
}
return this.apply { aspectRatio?.let { setAspectRatio(it) } }
diff --git a/src/android/app/src/main/java/org/citron/citron_emu/fragments/EmulationFragment.kt b/src/android/app/src/main/java/org/citron/citron_emu/fragments/EmulationFragment.kt
index f9479354d..5ea9d6d34 100644
--- a/src/android/app/src/main/java/org/citron/citron_emu/fragments/EmulationFragment.kt
+++ b/src/android/app/src/main/java/org/citron/citron_emu/fragments/EmulationFragment.kt
@@ -668,6 +668,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
2 -> Rational(21, 9)
3 -> Rational(16, 10)
4 -> Rational(32, 9)
+ 5 -> null // Stretch to window
else -> null // Best fit
}
when (verticalAlignment) {
diff --git a/src/android/app/src/main/java/org/citron/citron_emu/views/FixedRatioSurfaceView.kt b/src/android/app/src/main/java/org/citron/citron_emu/views/FixedRatioSurfaceView.kt
index bb009b32e..b4f1745a2 100644
--- a/src/android/app/src/main/java/org/citron/citron_emu/views/FixedRatioSurfaceView.kt
+++ b/src/android/app/src/main/java/org/citron/citron_emu/views/FixedRatioSurfaceView.kt
@@ -1,4 +1,5 @@
// SPDX-FileCopyrightText: 2023 yuzu Emulator Project
+// SPDX-FileCopyrightText: 2025 citron Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
package org.citron.citron_emu.views
@@ -27,7 +28,15 @@ class FixedRatioSurfaceView @JvmOverloads constructor(
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
val displayWidth: Float = MeasureSpec.getSize(widthMeasureSpec).toFloat()
val displayHeight: Float = MeasureSpec.getSize(heightMeasureSpec).toFloat()
- if (aspectRatio != 0f) {
+
+ // Safety check: ensure we have valid dimensions
+ if (displayWidth <= 0f || displayHeight <= 0f || aspectRatio == 0f) {
+ // Fall back to default behavior for stretch or invalid dimensions
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec)
+ return
+ }
+
+ if (aspectRatio > 0f) {
val displayAspect = displayWidth / displayHeight
if (displayAspect < aspectRatio) {
// Max out width
diff --git a/src/android/app/src/main/res/values/arrays.xml b/src/android/app/src/main/res/values/arrays.xml
index 97fa1ebb6..b41369260 100644
--- a/src/android/app/src/main/res/values/arrays.xml
+++ b/src/android/app/src/main/res/values/arrays.xml
@@ -142,6 +142,7 @@
- @string/ratio_force_four_three
- @string/ratio_force_twenty_one_nine
- @string/ratio_force_sixteen_ten
+ - @string/ratio_force_thirty_two_nine
- @string/ratio_stretch
@@ -151,6 +152,7 @@
- 2
- 3
- 4
+ - 5
diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml
index 9842db990..13a49eb1b 100644
--- a/src/android/app/src/main/res/values/strings.xml
+++ b/src/android/app/src/main/res/values/strings.xml
@@ -656,6 +656,7 @@
Force 4:3
Force 21:9
Force 16:10
+ Force 32:9
Stretch to window