Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 69 additions & 0 deletions app/src/main/feature/library/GameSettings.kt
Original file line number Diff line number Diff line change
Expand Up @@ -408,6 +408,10 @@ class GameSettingsStateHolder {
val containerEntries = mutableStateOf<List<String>>(emptyList())
val selectedContainer = mutableIntStateOf(0)
val screenSizeEntries = mutableStateOf<List<String>>(emptyList())
val standardScreenSizeEntries = mutableStateOf<List<String>>(emptyList())
val deviceScreenSizeEntries = mutableStateOf<List<String>>(emptyList())
val devicePanelSummary = mutableStateOf("")
val showDeviceResolutions = mutableStateOf(false)
val selectedScreenSize = mutableIntStateOf(0)
val customWidth = mutableStateOf("")
val customHeight = mutableStateOf("")
Expand Down Expand Up @@ -609,6 +613,51 @@ class GameSettingsStateHolder {
val drives = mutableStateOf("")

val isLoaded = mutableStateOf(false)

fun applyScreenSizeEntries(useDeviceResolutions: Boolean) {
val device = deviceScreenSizeEntries.value
val standard = standardScreenSizeEntries.value
val useDevice = useDeviceResolutions && device.size > 1
showDeviceResolutions.value = useDevice
val next = if (useDevice) device else standard
if (next.isEmpty()) return

val current = selectedScreenSizeValue()
screenSizeEntries.value = next
val index = next.indexOfFirst { StringUtils.parseIdentifier(it) == current }
if (index >= 0) {
selectedScreenSize.intValue = index
return
}
val currentHeight = heightOf(current)
if (currentHeight > 0) {
val tierIndex = next.indexOfFirst { heightOf(StringUtils.parseIdentifier(it)) == currentHeight }
if (tierIndex >= 0) {
selectedScreenSize.intValue = tierIndex
return
}
}
selectedScreenSize.intValue = 0
val parts = current.split("x")
if (parts.size == 2) {
customWidth.value = parts[0]
customHeight.value = parts[1]
}
}

private fun heightOf(screenSize: String): Int {
val parts = screenSize.split("x")
return if (parts.size == 2) parts[1].toIntOrNull() ?: 0 else 0
}

private fun selectedScreenSizeValue(): String {
val entries = screenSizeEntries.value
val index = selectedScreenSize.intValue
if (index > 0 && index in entries.indices) return StringUtils.parseIdentifier(entries[index])
val width = customWidth.value.trim()
val height = customHeight.value.trim()
return if (width.isEmpty() || height.isEmpty()) "" else "${width}x$height"
}
}

interface GameSettingsCallbacks {
Expand Down Expand Up @@ -1591,6 +1640,26 @@ private fun GeneralSection(
}
}

if (state.deviceScreenSizeEntries.value.size > 1) {
Spacer(Modifier.height(SettingItemGap))
Column(verticalArrangement = Arrangement.spacedBy(6.dp)) {
SettingSwitch(
label = stringResource(R.string.container_config_show_device_resolutions),
checked = state.showDeviceResolutions.value,
onCheckedChange = { on -> state.applyScreenSizeEntries(on) }
)
Text(
stringResource(
R.string.container_config_show_device_resolutions_help,
state.devicePanelSummary.value
),
color = TextDim,
fontSize = 11.sp,
lineHeight = 16.sp
)
}
}

// Custom resolution fields when "Custom" is selected (index 0)
if (state.selectedScreenSize.intValue == 0) {
Spacer(Modifier.height(SettingItemGap))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ import com.winlator.cmod.feature.library.GameSettingsStateHolder
import com.winlator.cmod.feature.library.WinComponentItem
import com.winlator.cmod.feature.library.parseEnvVarItems
import com.winlator.cmod.runtime.audio.directaudio.DirectAudioDriver
import com.winlator.cmod.shared.android.DeviceResolutions
import com.winlator.cmod.runtime.compat.box64.Box64Preset
import com.winlator.cmod.runtime.compat.box64.Box64PresetManager
import com.winlator.cmod.runtime.container.Container
Expand Down Expand Up @@ -522,7 +523,14 @@ class ContainerSettingsComposeDialog @JvmOverloads constructor(
val c = container

val screenSizeArr = context.resources.getStringArray(R.array.screen_size_entries).toList()
state.standardScreenSizeEntries.value = screenSizeArr
state.deviceScreenSizeEntries.value =
DeviceResolutions.screenSizeEntries(activity, screenSizeArr.firstOrNull() ?: "Custom")
state.devicePanelSummary.value = DeviceResolutions.panelSummary(activity)
state.screenSizeEntries.value = screenSizeArr
state.applyScreenSizeEntries(
DeviceResolutions.isEnabled(c?.getExtra(DeviceResolutions.EXTRA_ENABLED))
)
selectScreenSize(c?.getScreenSize() ?: Container.DEFAULT_SCREEN_SIZE)

try {
Expand Down Expand Up @@ -863,6 +871,10 @@ class ContainerSettingsComposeDialog @JvmOverloads constructor(
c.setDXWrapper(dxwrapper)
c.setDXWrapperConfig(dxwrapperConfig)
c.putExtra("swapRB", if (state.selectedSurfaceEffect.intValue == 1) "1" else "0")
c.putExtra(
DeviceResolutions.EXTRA_ENABLED,
DeviceResolutions.extraValue(state.showDeviceResolutions.value)
)
c.putExtra("refreshRate", getRefreshRateFromState())
writeFrameGenExtras(c)
writeNetworkingExtras(c)
Expand Down Expand Up @@ -956,6 +968,10 @@ class ContainerSettingsComposeDialog @JvmOverloads constructor(
"swapRB",
if (state.selectedSurfaceEffect.intValue == 1) "1" else "0"
)
newContainer.putExtra(
DeviceResolutions.EXTRA_ENABLED,
DeviceResolutions.extraValue(state.showDeviceResolutions.value)
)
getRefreshRateFromState()?.let { newContainer.putExtra("refreshRate", it) }
newContainer.putExtra(
DirectAudioDriver.EXTRA_MIC,
Expand Down
20 changes: 20 additions & 0 deletions app/src/main/feature/shortcuts/ShortcutSettingsComposeDialog.kt
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ import com.winlator.cmod.feature.settings.WineD3DConfigUtils
import com.winlator.cmod.feature.setup.SetupWizardActivity
import com.winlator.cmod.feature.stores.steam.events.AndroidEvent
import com.winlator.cmod.runtime.audio.directaudio.DirectAudioDriver
import com.winlator.cmod.shared.android.DeviceResolutions
import com.winlator.cmod.runtime.compat.box64.Box64Preset
import com.winlator.cmod.runtime.compat.box64.Box64PresetManager
import com.winlator.cmod.runtime.container.Container
Expand Down Expand Up @@ -480,7 +481,19 @@ class ShortcutSettingsComposeDialog private constructor(
// Screen sizes
val screenSizeArr =
context.resources.getStringArray(R.array.screen_size_entries).toList()
state.standardScreenSizeEntries.value = screenSizeArr
state.deviceScreenSizeEntries.value =
DeviceResolutions.screenSizeEntries(activity, screenSizeArr.firstOrNull() ?: "Custom")
state.devicePanelSummary.value = DeviceResolutions.panelSummary(activity)
state.screenSizeEntries.value = screenSizeArr
state.applyScreenSizeEntries(
DeviceResolutions.isEnabled(
getShortcutSetting(
DeviceResolutions.EXTRA_ENABLED,
container.getExtra(DeviceResolutions.EXTRA_ENABLED)
)
)
)
val screenSize = getShortcutSetting("screenSize", container.getScreenSize())
selectScreenSize(screenSize)

Expand Down Expand Up @@ -1093,6 +1106,13 @@ class ShortcutSettingsComposeDialog private constructor(
val screenSize = getScreenSizeFromState()
hasContainerOverride =
hasContainerOverride or saveOverride("screenSize", screenSize, container.getScreenSize())
hasContainerOverride = hasContainerOverride or saveOverride(
DeviceResolutions.EXTRA_ENABLED,
DeviceResolutions.extraValue(state.showDeviceResolutions.value),
DeviceResolutions.extraValue(
DeviceResolutions.isEnabled(container.getExtra(DeviceResolutions.EXTRA_ENABLED))
)
)

// Graphics driver
val graphicsDriver = getIdentifierFromEntries(
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-b+es+419/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -404,6 +404,8 @@

<!-- Container > Configuration -->
<string name="container_config_screen_size">Tamaño de pantalla</string>
<string name="container_config_show_device_resolutions">Mostrar resoluciones del dispositivo</string>
<string name="container_config_show_device_resolutions_help">Ajusta cada resolución estándar a esta pantalla para que nada se estire ni tenga bordes negros (%1$s).</string>
<string name="container_config_new_env_var">Nueva variable de entorno</string>
<string name="container_config_env_vars">Variables de entorno</string>
<string name="container_config_processor_affinity">Afinidad del procesador</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-da/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -344,6 +344,8 @@

<!-- Container > Configuration -->
<string name="container_config_screen_size">Skærmstørrelse</string>
<string name="container_config_show_device_resolutions">Vis enhedens opløsninger</string>
<string name="container_config_show_device_resolutions_help">Skalerer hver standardopløsning til denne skærm, så intet strækkes eller får sorte bjælker (%1$s).</string>
<string name="container_config_new_env_var">Ny miljøvariabel</string>
<string name="container_config_env_vars">Miljøvariabler</string>
<string name="container_config_processor_affinity">Processoraffinitet</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-de/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -344,6 +344,8 @@

<!-- Container > Configuration -->
<string name="container_config_screen_size">Bildschirmgröße</string>
<string name="container_config_show_device_resolutions">Geräteauflösungen anzeigen</string>
<string name="container_config_show_device_resolutions_help">Skaliert jede Standardauflösung auf diesen Bildschirm, sodass nichts verzerrt oder mit schwarzen Balken dargestellt wird (%1$s).</string>
<string name="container_config_new_env_var">Neue Umgebungsvariable</string>
<string name="container_config_env_vars">Umgebungsvariablen</string>
<string name="container_config_processor_affinity">Prozessoraffinität</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-es/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -344,6 +344,8 @@

<!-- Container > Configuration -->
<string name="container_config_screen_size">Tamaño de pantalla</string>
<string name="container_config_show_device_resolutions">Mostrar resoluciones del dispositivo</string>
<string name="container_config_show_device_resolutions_help">Ajusta cada resolución estándar a esta pantalla para que nada se estire ni tenga bordes negros (%1$s).</string>
<string name="container_config_new_env_var">Nueva variable de entorno</string>
<string name="container_config_env_vars">Variables de entorno</string>
<string name="container_config_processor_affinity">Afinidad de procesador</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-fi/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -404,6 +404,8 @@

<!-- Container > Configuration -->
<string name="container_config_screen_size">Näytön koko</string>
<string name="container_config_show_device_resolutions">Näytä laitteen tarkkuudet</string>
<string name="container_config_show_device_resolutions_help">Skaalaa jokaisen vakiotarkkuuden tälle näytölle, jotta mikään ei veny tai jää mustien palkkien väliin (%1$s).</string>
<string name="container_config_new_env_var">Uusi ympäristömuuttuja</string>
<string name="container_config_env_vars">Ympäristömuuttujat</string>
<string name="container_config_processor_affinity">Suorittimen affiniteetti</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-fr/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -344,6 +344,8 @@

<!-- Container > Configuration -->
<string name="container_config_screen_size">Taille de l\'écran</string>
<string name="container_config_show_device_resolutions">Afficher les résolutions de l\'appareil</string>
<string name="container_config_show_device_resolutions_help">Adapte chaque résolution standard à cet écran afin que rien ne soit étiré ni bordé de bandes noires (%1$s).</string>
<string name="container_config_new_env_var">Nouvelle variable d\'environnement</string>
<string name="container_config_env_vars">Variables d\'environnement</string>
<string name="container_config_processor_affinity">Affinité processeur</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-hi/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -380,6 +380,8 @@
<string name="input_controls_editor_osc_transparency">ऑन-स्क्रीन नियंत्रण पारदर्शिता</string>
<string name="input_controls_editor_osc_transparency_description">ऑन-स्क्रीन नियंत्रणों की पारदर्शिता को समायोजित करें।</string>
<string name="container_config_screen_size">स्क्रीन आकार</string>
<string name="container_config_show_device_resolutions">डिवाइस रिज़ॉल्यूशन दिखाएँ</string>
<string name="container_config_show_device_resolutions_help">हर मानक रिज़ॉल्यूशन को इस स्क्रीन के अनुसार बदलता है, ताकि कुछ भी खिंचे या काली पट्टियों के साथ न दिखे (%1$s)।</string>
<string name="container_config_new_env_var">नया पर्यावरण वैरिएबल</string>
<string name="container_config_env_vars">पर्यावरण वैरिएबल</string>
<string name="container_config_processor_affinity">प्रोसेसर अफ़िनिटी</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-it/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -344,6 +344,8 @@

<!-- Container > Configuration -->
<string name="container_config_screen_size">Dimensione schermo</string>
<string name="container_config_show_device_resolutions">Mostra risoluzioni del dispositivo</string>
<string name="container_config_show_device_resolutions_help">Adatta ogni risoluzione standard a questo schermo, così nulla viene stirato o mostrato con bande nere (%1$s).</string>
<string name="container_config_new_env_var">Nuova variabile d\'ambiente</string>
<string name="container_config_env_vars">Variabili d\'ambiente</string>
<string name="container_config_processor_affinity">Affinità processore</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-ja/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -404,6 +404,8 @@

<!-- Container > Configuration -->
<string name="container_config_screen_size">画面サイズ</string>
<string name="container_config_show_device_resolutions">デバイスの解像度を表示</string>
<string name="container_config_show_device_resolutions_help">各標準解像度をこの画面に合わせて調整し、引き伸ばしや黒帯が出ないようにします (%1$s)。</string>
<string name="container_config_new_env_var">新しい環境変数</string>
<string name="container_config_env_vars">環境変数</string>
<string name="container_config_processor_affinity">プロセッサアフィニティ</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-ko/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -344,6 +344,8 @@

<!-- Container > Configuration -->
<string name="container_config_screen_size">화면 크기</string>
<string name="container_config_show_device_resolutions">기기 해상도 표시</string>
<string name="container_config_show_device_resolutions_help">각 표준 해상도를 이 화면에 맞게 조정해 늘어나거나 검은 여백이 생기지 않도록 합니다 (%1$s).</string>
<string name="container_config_new_env_var">새 환경 변수</string>
<string name="container_config_env_vars">환경 변수</string>
<string name="container_config_processor_affinity">프로세서 선호도</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-no/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -404,6 +404,8 @@

<!-- Container > Configuration -->
<string name="container_config_screen_size">Skjermstørrelse</string>
<string name="container_config_show_device_resolutions">Vis enhetens oppløsninger</string>
<string name="container_config_show_device_resolutions_help">Skalerer hver standardoppløsning til denne skjermen, slik at ingenting strekkes eller får svarte kanter (%1$s).</string>
<string name="container_config_new_env_var">Ny miljøvariabel</string>
<string name="container_config_env_vars">Miljøvariabler</string>
<string name="container_config_processor_affinity">Prosessortilknytning</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-pl/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -348,6 +348,8 @@

<!-- Container > Configuration -->
<string name="container_config_screen_size">Rozmiar ekranu</string>
<string name="container_config_show_device_resolutions">Pokaż rozdzielczości urządzenia</string>
<string name="container_config_show_device_resolutions_help">Dopasowuje każdą standardową rozdzielczość do tego ekranu, aby nic nie było rozciągnięte ani otoczone czarnymi pasami (%1$s).</string>
<string name="container_config_new_env_var">Nowa zmienna środowiskowa</string>
<string name="container_config_env_vars">Zmienne środowiskowe</string>
<string name="container_config_processor_affinity">Powinowactwo procesora</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-pt-rBR/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -344,6 +344,8 @@

<!-- Container > Configuration -->
<string name="container_config_screen_size">Tamanho da Tela</string>
<string name="container_config_show_device_resolutions">Mostrar Resoluções do Dispositivo</string>
<string name="container_config_show_device_resolutions_help">Ajusta cada resolução padrão a esta tela para que nada fique esticado ou com barras pretas (%1$s).</string>
<string name="container_config_new_env_var">Nova Variavel de Ambiente</string>
<string name="container_config_env_vars">Variaveis de Ambiente</string>
<string name="container_config_processor_affinity">Afinidade do Processador</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-pt/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -404,6 +404,8 @@

<!-- Container > Configuration -->
<string name="container_config_screen_size">Tamanho do ecrã</string>
<string name="container_config_show_device_resolutions">Mostrar resoluções do dispositivo</string>
<string name="container_config_show_device_resolutions_help">Ajusta cada resolução padrão a este ecrã para que nada fique esticado ou com barras pretas (%1$s).</string>
<string name="container_config_new_env_var">Nova variável de ambiente</string>
<string name="container_config_env_vars">Variáveis de ambiente</string>
<string name="container_config_processor_affinity">Afinidade do processador</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-ro/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -344,6 +344,8 @@

<!-- Container > Configuration -->
<string name="container_config_screen_size">Dimensiune ecran</string>
<string name="container_config_show_device_resolutions">Afișează rezoluțiile dispozitivului</string>
<string name="container_config_show_device_resolutions_help">Adaptează fiecare rezoluție standard la acest ecran, astfel încât nimic să nu fie întins sau cu benzi negre (%1$s).</string>
<string name="container_config_new_env_var">Variabila de mediu noua</string>
<string name="container_config_env_vars">Variabile de mediu</string>
<string name="container_config_processor_affinity">Afinitate procesor</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-ru/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -393,6 +393,8 @@
<string name="input_controls_editor_osc_transparency_description">Настройте прозрачность экранных элементов управления.</string>
<!-- Container > Configuration -->
<string name="container_config_screen_size">Размер экрана</string>
<string name="container_config_show_device_resolutions">Показывать разрешения устройства</string>
<string name="container_config_show_device_resolutions_help">Подгоняет каждое стандартное разрешение под этот экран, чтобы изображение не растягивалось и не появлялись чёрные полосы (%1$s).</string>
<string name="container_config_new_env_var">Новая переменная среды</string>
<string name="container_config_env_vars">Переменные среды</string>
<string name="container_config_processor_affinity">Привязка процессора</string>
Expand Down
Loading
Loading