android: Add screen vertical alignment setting
It's a bit of a hack since I'm moving the view instead of telling the Vulkan surface to bias itself to the top/bottom/center but it works fine for now.
This commit is contained in:
parent
a0513bc45b
commit
3c823254ff
|
@ -25,6 +25,7 @@ enum class IntSetting(override val key: String) : AbstractIntSetting {
|
|||
OVERLAY_SCALE("control_scale"),
|
||||
OVERLAY_OPACITY("control_opacity"),
|
||||
LOCK_DRAWER("lock_drawer"),
|
||||
VERTICAL_ALIGNMENT("vertical_alignment"),
|
||||
FSR_SHARPENING_SLIDER("fsr_sharpening_slider");
|
||||
|
||||
override fun getInt(needsGlobal: Boolean): Int = NativeConfig.getInt(key, needsGlobal)
|
||||
|
|
|
@ -93,4 +93,15 @@ object Settings {
|
|||
entries.firstOrNull { it.int == int } ?: Unspecified
|
||||
}
|
||||
}
|
||||
|
||||
enum class EmulationVerticalAlignment(val int: Int) {
|
||||
Top(1),
|
||||
Center(0),
|
||||
Bottom(2);
|
||||
|
||||
companion object {
|
||||
fun from(int: Int): EmulationVerticalAlignment =
|
||||
entries.firstOrNull { it.int == int } ?: Center
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -225,6 +225,15 @@ abstract class SettingsItem(
|
|||
R.array.rendererAspectRatioValues
|
||||
)
|
||||
)
|
||||
put(
|
||||
SingleChoiceSetting(
|
||||
IntSetting.VERTICAL_ALIGNMENT,
|
||||
R.string.vertical_alignment,
|
||||
0,
|
||||
R.array.verticalAlignmentEntries,
|
||||
R.array.verticalAlignmentValues
|
||||
)
|
||||
)
|
||||
put(
|
||||
SwitchSetting(
|
||||
BooleanSetting.RENDERER_USE_DISK_SHADER_CACHE,
|
||||
|
|
|
@ -148,6 +148,7 @@ class SettingsFragmentPresenter(
|
|||
add(IntSetting.MAX_ANISOTROPY.key)
|
||||
add(IntSetting.RENDERER_SCREEN_LAYOUT.key)
|
||||
add(IntSetting.RENDERER_ASPECT_RATIO.key)
|
||||
add(IntSetting.VERTICAL_ALIGNMENT.key)
|
||||
add(BooleanSetting.PICTURE_IN_PICTURE.key)
|
||||
add(BooleanSetting.RENDERER_USE_DISK_SHADER_CACHE.key)
|
||||
add(BooleanSetting.RENDERER_FORCE_MAX_CLOCK.key)
|
||||
|
|
|
@ -15,7 +15,9 @@ import android.os.Handler
|
|||
import android.os.Looper
|
||||
import android.os.PowerManager
|
||||
import android.os.SystemClock
|
||||
import android.util.Rational
|
||||
import android.view.*
|
||||
import android.widget.FrameLayout
|
||||
import android.widget.TextView
|
||||
import android.widget.Toast
|
||||
import androidx.activity.OnBackPressedCallback
|
||||
|
@ -24,6 +26,7 @@ import androidx.core.content.res.ResourcesCompat
|
|||
import androidx.core.graphics.Insets
|
||||
import androidx.core.view.ViewCompat
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
import androidx.core.view.updateLayoutParams
|
||||
import androidx.core.view.updatePadding
|
||||
import androidx.drawerlayout.widget.DrawerLayout
|
||||
import androidx.drawerlayout.widget.DrawerLayout.DrawerListener
|
||||
|
@ -52,6 +55,7 @@ import org.yuzu.yuzu_emu.features.settings.model.BooleanSetting
|
|||
import org.yuzu.yuzu_emu.features.settings.model.IntSetting
|
||||
import org.yuzu.yuzu_emu.features.settings.model.Settings
|
||||
import org.yuzu.yuzu_emu.features.settings.model.Settings.EmulationOrientation
|
||||
import org.yuzu.yuzu_emu.features.settings.model.Settings.EmulationVerticalAlignment
|
||||
import org.yuzu.yuzu_emu.features.settings.utils.SettingsFile
|
||||
import org.yuzu.yuzu_emu.model.DriverViewModel
|
||||
import org.yuzu.yuzu_emu.model.Game
|
||||
|
@ -617,7 +621,46 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
|
|||
}
|
||||
|
||||
private fun updateScreenLayout() {
|
||||
val verticalAlignment =
|
||||
EmulationVerticalAlignment.from(IntSetting.VERTICAL_ALIGNMENT.getInt())
|
||||
val aspectRatio = when (IntSetting.RENDERER_ASPECT_RATIO.getInt()) {
|
||||
0 -> Rational(16, 9)
|
||||
1 -> Rational(4, 3)
|
||||
2 -> Rational(21, 9)
|
||||
3 -> Rational(16, 10)
|
||||
else -> null // Best fit
|
||||
}
|
||||
when (verticalAlignment) {
|
||||
EmulationVerticalAlignment.Top -> {
|
||||
binding.surfaceEmulation.setAspectRatio(aspectRatio)
|
||||
val params = FrameLayout.LayoutParams(
|
||||
ViewGroup.LayoutParams.MATCH_PARENT,
|
||||
ViewGroup.LayoutParams.WRAP_CONTENT
|
||||
)
|
||||
params.gravity = Gravity.TOP or Gravity.CENTER_HORIZONTAL
|
||||
binding.surfaceEmulation.layoutParams = params
|
||||
}
|
||||
|
||||
EmulationVerticalAlignment.Center -> {
|
||||
binding.surfaceEmulation.setAspectRatio(null)
|
||||
binding.surfaceEmulation.updateLayoutParams {
|
||||
width = ViewGroup.LayoutParams.MATCH_PARENT
|
||||
height = ViewGroup.LayoutParams.MATCH_PARENT
|
||||
}
|
||||
}
|
||||
|
||||
EmulationVerticalAlignment.Bottom -> {
|
||||
binding.surfaceEmulation.setAspectRatio(aspectRatio)
|
||||
val params =
|
||||
FrameLayout.LayoutParams(
|
||||
ViewGroup.LayoutParams.MATCH_PARENT,
|
||||
ViewGroup.LayoutParams.WRAP_CONTENT
|
||||
)
|
||||
params.gravity = Gravity.BOTTOM or Gravity.CENTER_HORIZONTAL
|
||||
binding.surfaceEmulation.layoutParams = params
|
||||
}
|
||||
}
|
||||
emulationState.updateSurface()
|
||||
emulationActivity?.buildPictureInPictureParams()
|
||||
updateOrientation()
|
||||
}
|
||||
|
|
|
@ -38,6 +38,13 @@ struct Values {
|
|||
Settings::Specialization::Default,
|
||||
true,
|
||||
true};
|
||||
Settings::Setting<s32> vertical_alignment{linkage,
|
||||
0,
|
||||
"vertical_alignment",
|
||||
Settings::Category::Android,
|
||||
Settings::Specialization::Default,
|
||||
true,
|
||||
true};
|
||||
|
||||
Settings::SwitchableSetting<std::string, false> driver_path{linkage, "", "driver_path",
|
||||
Settings::Category::GpuDriver};
|
||||
|
|
|
@ -292,4 +292,15 @@
|
|||
<item>5</item>
|
||||
</integer-array>
|
||||
|
||||
<string-array name="verticalAlignmentEntries">
|
||||
<item>@string/top</item>
|
||||
<item>@string/center</item>
|
||||
<item>@string/bottom</item>
|
||||
</string-array>
|
||||
<integer-array name="verticalAlignmentValues">
|
||||
<item>1</item>
|
||||
<item>0</item>
|
||||
<item>2</item>
|
||||
</integer-array>
|
||||
|
||||
</resources>
|
||||
|
|
|
@ -560,6 +560,12 @@
|
|||
<string name="mute">Mute</string>
|
||||
<string name="unmute">Unmute</string>
|
||||
|
||||
<!-- Emulation vertical alignment -->
|
||||
<string name="vertical_alignment">Vertical alignment</string>
|
||||
<string name="top">Top</string>
|
||||
<string name="center">Center</string>
|
||||
<string name="bottom">Bottom</string>
|
||||
|
||||
<!-- Licenses screen strings -->
|
||||
<string name="licenses">Licenses</string>
|
||||
<string name="license_fidelityfx_fsr" translatable="false">FidelityFX-FSR</string>
|
||||
|
|
Reference in New Issue