Skip to content

Commit 074c5b5

Browse files
Introduce Display Mode Option on Display Settings, That Can Change Resolution Options Between 4:3, 16:9 and Native Aspect Ratios, Small Code Improvement
1 parent 3cf61a3 commit 074c5b5

File tree

11 files changed

+124
-26
lines changed

11 files changed

+124
-26
lines changed

app/src/main/java/com/micewine/emu/activities/GeneralSettingsActivity.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,8 @@ class GeneralSettingsActivity : AppCompatActivity() {
204204
const val SELECTED_DXVK_HUD_PRESET_DEFAULT_VALUE = ""
205205
const val SELECTED_MESA_VK_WSI_PRESENT_MODE = "MESA_VK_WSI_PRESENT_MODE"
206206
const val SELECTED_MESA_VK_WSI_PRESENT_MODE_DEFAULT_VALUE = "mailbox"
207+
const val DISPLAY_MODE = "displayMode"
208+
const val DISPLAY_MODE_DEFAULT_VALUE = "16:9"
207209
const val DISPLAY_RESOLUTION = "displayResolution"
208210
const val DISPLAY_RESOLUTION_DEFAULT_VALUE = "1280x720"
209211
const val DEAD_ZONE = "deadZone"

app/src/main/java/com/micewine/emu/activities/MainActivity.kt

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -967,9 +967,12 @@ class MainActivity : AppCompatActivity() {
967967
const val ACTION_INSTALL_RAT = "com.micewine.emu.ACTION_INSTALL_RAT"
968968
const val ACTION_STOP_ALL = "com.micewine.emu.ACTION_STOP_ALL"
969969
const val ACTION_SELECT_FILE_MANAGER = "com.micewine.emu.ACTION_SELECT_FILE_MANAGER"
970-
const val RAM_COUNTER_KEY = "ramCounter"
971-
const val CPU_COUNTER_KEY = "cpuCounter"
972-
const val ENABLE_DEBUG_INFO_KEY = "debugInfo"
970+
const val RAM_COUNTER = "ramCounter"
971+
const val RAM_COUNTER_DEFAULT_VALUE = true
972+
const val CPU_COUNTER = "cpuCounter"
973+
const val CPU_COUNTER_DEFAULT_VALUE = false
974+
const val ENABLE_DEBUG_INFO = "debugInfo"
975+
const val ENABLE_DEBUG_INFO_DEFAULT_VALUE = true
973976

974977
fun setupWinePrefix() {
975978
if (!winePrefix.exists()) {
@@ -1064,9 +1067,9 @@ class MainActivity : AppCompatActivity() {
10641067
selectedMesaVkWsiPresentMode = preferences.getString(SELECTED_MESA_VK_WSI_PRESENT_MODE, SELECTED_MESA_VK_WSI_PRESENT_MODE_DEFAULT_VALUE)
10651068
selectedTuDebugPreset = preferences.getString(SELECTED_TU_DEBUG_PRESET, SELECTED_TU_DEBUG_PRESET_DEFAULT_VALUE)
10661069
selectedResolution = preferences.getString(DISPLAY_RESOLUTION, DISPLAY_RESOLUTION_DEFAULT_VALUE)
1067-
enableRamCounter = preferences.getBoolean(RAM_COUNTER_KEY, true)
1068-
enableCpuCounter = preferences.getBoolean(CPU_COUNTER_KEY, false)
1069-
enableDebugInfo = preferences.getBoolean(ENABLE_DEBUG_INFO_KEY, true)
1070+
enableRamCounter = preferences.getBoolean(RAM_COUNTER, RAM_COUNTER_DEFAULT_VALUE)
1071+
enableCpuCounter = preferences.getBoolean(CPU_COUNTER, CPU_COUNTER_DEFAULT_VALUE)
1072+
enableDebugInfo = preferences.getBoolean(ENABLE_DEBUG_INFO, ENABLE_DEBUG_INFO_DEFAULT_VALUE)
10701073

10711074
cpuAffinity = preferences.getString(CPU_AFFINITY, availableCPUs.joinToString(","))
10721075

app/src/main/java/com/micewine/emu/adapters/AdapterSettingsPreferences.kt

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,21 @@ import androidx.preference.PreferenceManager
1818
import androidx.recyclerview.widget.RecyclerView
1919
import com.micewine.emu.R
2020
import com.micewine.emu.activities.GeneralSettingsActivity.Companion.CHECKBOX
21+
import com.micewine.emu.activities.GeneralSettingsActivity.Companion.DISPLAY_MODE
22+
import com.micewine.emu.activities.GeneralSettingsActivity.Companion.DISPLAY_MODE_DEFAULT_VALUE
23+
import com.micewine.emu.activities.GeneralSettingsActivity.Companion.DISPLAY_RESOLUTION
2124
import com.micewine.emu.activities.GeneralSettingsActivity.Companion.SPINNER
2225
import com.micewine.emu.activities.GeneralSettingsActivity.Companion.SWITCH
26+
import com.micewine.emu.fragments.DisplaySettingsFragment.Companion.getNativeResolutions
27+
import com.micewine.emu.fragments.DisplaySettingsFragment.Companion.resolutions16_9
28+
import com.micewine.emu.fragments.DisplaySettingsFragment.Companion.resolutions4_3
2329
import com.micewine.emu.fragments.InfoDialogFragment
2430

25-
class AdapterSettingsPreferences(private val settingsList: List<SettingsListSpinner>, private val activity: FragmentActivity) :
31+
class AdapterSettingsPreferences(
32+
private val settingsList: List<SettingsListSpinner>,
33+
private val activity: FragmentActivity,
34+
private val recyclerView: RecyclerView
35+
) :
2636
RecyclerView.Adapter<AdapterSettingsPreferences.ViewHolder>() {
2737

2838
val preferences = PreferenceManager.getDefaultSharedPreferences(activity)!!
@@ -41,6 +51,22 @@ class AdapterSettingsPreferences(private val settingsList: List<SettingsListSpin
4151
holder.settingsDescription.visibility = View.GONE
4252
}
4353

54+
if (sList.key == DISPLAY_RESOLUTION) {
55+
val aspectRatio = preferences.getString(DISPLAY_MODE, DISPLAY_MODE_DEFAULT_VALUE)
56+
57+
when (aspectRatio) {
58+
"4:3" -> {
59+
sList.spinnerOptions = resolutions4_3
60+
}
61+
"16:9" -> {
62+
sList.spinnerOptions = resolutions16_9
63+
}
64+
"Native" -> {
65+
sList.spinnerOptions = getNativeResolutions(activity).toTypedArray()
66+
}
67+
}
68+
}
69+
4470
when (sList.type) {
4571
SWITCH -> {
4672
holder.spinnerOptions.visibility = View.GONE
@@ -87,6 +113,12 @@ class AdapterSettingsPreferences(private val settingsList: List<SettingsListSpin
87113
putString(sList.key, selectedItem)
88114
apply()
89115
}
116+
117+
if (sList.key == DISPLAY_MODE) {
118+
activity.runOnUiThread {
119+
recyclerView.adapter?.notifyItemRangeChanged(holder.adapterPosition + 1, recyclerView.adapter?.itemCount!!)
120+
}
121+
}
90122
}
91123

92124
override fun onNothingSelected(parent: AdapterView<*>?) {

app/src/main/java/com/micewine/emu/fragments/Box64SettingsFragment.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ class Box64SettingsFragment : Fragment() {
8282
}
8383

8484
private fun setAdapter() {
85-
val adapterSettingsPreferences = AdapterSettingsPreferences(settingsList, requireActivity())
85+
val adapterSettingsPreferences = AdapterSettingsPreferences(settingsList, requireActivity(), recyclerView!!)
8686

8787
recyclerView?.setAdapter(adapterSettingsPreferences)
8888

app/src/main/java/com/micewine/emu/fragments/DisplaySettingsFragment.kt

Lines changed: 69 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,27 @@
11
package com.micewine.emu.fragments
22

3+
import android.app.Activity
34
import android.os.Bundle
5+
import android.util.DisplayMetrics
46
import android.view.LayoutInflater
57
import android.view.View
68
import android.view.ViewGroup
79
import androidx.fragment.app.Fragment
810
import androidx.recyclerview.widget.GridLayoutManager
911
import androidx.recyclerview.widget.RecyclerView
1012
import com.micewine.emu.R
13+
import com.micewine.emu.activities.GeneralSettingsActivity.Companion.DISPLAY_MODE
14+
import com.micewine.emu.activities.GeneralSettingsActivity.Companion.DISPLAY_MODE_DEFAULT_VALUE
1115
import com.micewine.emu.activities.GeneralSettingsActivity.Companion.DISPLAY_RESOLUTION
16+
import com.micewine.emu.activities.GeneralSettingsActivity.Companion.DISPLAY_RESOLUTION_DEFAULT_VALUE
1217
import com.micewine.emu.activities.GeneralSettingsActivity.Companion.SPINNER
1318
import com.micewine.emu.activities.GeneralSettingsActivity.Companion.SWITCH
14-
import com.micewine.emu.activities.MainActivity.Companion.CPU_COUNTER_KEY
15-
import com.micewine.emu.activities.MainActivity.Companion.ENABLE_DEBUG_INFO_KEY
16-
import com.micewine.emu.activities.MainActivity.Companion.RAM_COUNTER_KEY
19+
import com.micewine.emu.activities.MainActivity.Companion.CPU_COUNTER
20+
import com.micewine.emu.activities.MainActivity.Companion.CPU_COUNTER_DEFAULT_VALUE
21+
import com.micewine.emu.activities.MainActivity.Companion.ENABLE_DEBUG_INFO
22+
import com.micewine.emu.activities.MainActivity.Companion.ENABLE_DEBUG_INFO_DEFAULT_VALUE
23+
import com.micewine.emu.activities.MainActivity.Companion.RAM_COUNTER
24+
import com.micewine.emu.activities.MainActivity.Companion.RAM_COUNTER_DEFAULT_VALUE
1725
import com.micewine.emu.adapters.AdapterSettingsPreferences
1826
import com.micewine.emu.adapters.AdapterSettingsPreferences.SettingsListSpinner
1927

@@ -40,27 +48,72 @@ class DisplaySettingsFragment : Fragment() {
4048
}
4149

4250
private fun setAdapter() {
43-
recyclerView?.setAdapter(AdapterSettingsPreferences(settingsList, requireActivity()))
51+
recyclerView?.setAdapter(AdapterSettingsPreferences(settingsList, requireActivity(), recyclerView!!))
4452

4553
settingsList.clear()
4654

47-
addToAdapter(R.string.display_resolution_title, R.string.display_resolution_description, arrayOf(
48-
"640x480", "800x600",
49-
"960x540", "1024x768",
50-
"1280x720", "1440x720",
51-
"1600x900", "1800x900",
52-
"1920x1080", "2160x1080"
55+
addToAdapter(R.string.display_mode_title, R.string.display_mode_description, arrayOf(
56+
"16:9", "4:3", "Native"
5357
),
54-
SPINNER, "1280x720", DISPLAY_RESOLUTION)
58+
SPINNER, DISPLAY_MODE_DEFAULT_VALUE, DISPLAY_MODE)
59+
addToAdapter(R.string.display_resolution_title, R.string.display_resolution_description, null,
60+
SPINNER, DISPLAY_RESOLUTION_DEFAULT_VALUE, DISPLAY_RESOLUTION)
5561
addToAdapter(R.string.enable_ram_counter, R.string.enable_ram_counter_description, null,
56-
SWITCH, "true", RAM_COUNTER_KEY)
62+
SWITCH, RAM_COUNTER_DEFAULT_VALUE, RAM_COUNTER)
5763
addToAdapter(R.string.enable_cpu_counter, R.string.enable_cpu_counter_description, null,
58-
SWITCH, "false", CPU_COUNTER_KEY)
64+
SWITCH, CPU_COUNTER_DEFAULT_VALUE, CPU_COUNTER)
5965
addToAdapter(R.string.enable_debug_info, R.string.enable_debug_info_description, null,
60-
SWITCH, "true", ENABLE_DEBUG_INFO_KEY)
66+
SWITCH, ENABLE_DEBUG_INFO_DEFAULT_VALUE, ENABLE_DEBUG_INFO)
67+
}
68+
69+
private fun addToAdapter(titleId: Int, descriptionId: Int, valuesArray: Array<String>?, type: Int, defaultValue: Any, keyId: String) {
70+
settingsList.add(SettingsListSpinner(titleId, descriptionId, valuesArray, type, defaultValue.toString(), keyId))
6171
}
6272

63-
private fun addToAdapter(titleId: Int, descriptionId: Int, valuesArray: Array<String>?, type: Int, defaultValue: String, keyId: String) {
64-
settingsList.add(SettingsListSpinner(titleId, descriptionId, valuesArray, type, defaultValue, keyId))
73+
companion object {
74+
val resolutions16_9 = arrayOf(
75+
"640x360", "854x480",
76+
"960x540", "1280x720",
77+
"1366x768", "1600x900",
78+
"1920x1080", "2560x1440",
79+
"3840x2160"
80+
)
81+
82+
val resolutions4_3 = arrayOf(
83+
"640x480", "800x600",
84+
"1024x768", "1280x960",
85+
"1400x1050", "1600x1200"
86+
)
87+
88+
@Suppress("DEPRECATION")
89+
private fun getNativeResolution(activity: Activity): String {
90+
val displayMetrics = DisplayMetrics()
91+
activity.windowManager.defaultDisplay.getRealMetrics(displayMetrics)
92+
return "${displayMetrics.widthPixels}x${displayMetrics.heightPixels}"
93+
}
94+
95+
private fun getPercentOfResolution(original: String, percent: Int): String {
96+
val resolution = original.split("x")
97+
val width = resolution[0].toInt() * percent / 100
98+
val height = resolution[1].toInt() * percent / 100
99+
100+
return "${width}x${height}"
101+
}
102+
103+
fun getNativeResolutions(activity: Activity): List<String> {
104+
val parsedResolutions = mutableListOf<String>()
105+
val nativeResolution = getNativeResolution(activity)
106+
107+
parsedResolutions.add(nativeResolution)
108+
parsedResolutions.add(getPercentOfResolution(nativeResolution, 90))
109+
parsedResolutions.add(getPercentOfResolution(nativeResolution, 80))
110+
parsedResolutions.add(getPercentOfResolution(nativeResolution, 70))
111+
parsedResolutions.add(getPercentOfResolution(nativeResolution, 60))
112+
parsedResolutions.add(getPercentOfResolution(nativeResolution, 50))
113+
parsedResolutions.add(getPercentOfResolution(nativeResolution, 40))
114+
parsedResolutions.add(getPercentOfResolution(nativeResolution, 30))
115+
116+
return parsedResolutions
117+
}
65118
}
66119
}

app/src/main/java/com/micewine/emu/fragments/DriversSettingsFragment.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ class DriversSettingsFragment : Fragment() {
6565
}
6666

6767
private fun setAdapter() {
68-
recyclerView?.setAdapter(AdapterSettingsPreferences(settingsList, requireActivity()))
68+
recyclerView?.setAdapter(AdapterSettingsPreferences(settingsList, requireActivity(), recyclerView!!))
6969

7070
settingsList.clear()
7171
dxvkVersions.clear()

app/src/main/java/com/micewine/emu/fragments/WineSettingsFragment.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ class WineSettingsFragment : Fragment() {
4444
}
4545

4646
private fun setAdapter() {
47-
recyclerView?.setAdapter(AdapterSettingsPreferences(settingsList, requireActivity()))
47+
recyclerView?.setAdapter(AdapterSettingsPreferences(settingsList, requireActivity(), recyclerView!!))
4848

4949
settingsList.clear()
5050

app/src/main/res/values-pt-rBR/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,4 +152,6 @@
152152
<string name="application_version">Versão do Aplicativo</string>
153153
<string name="rootfs_version">Versão do RootFS</string>
154154
<string name="wine_version">Versão do Wine</string>
155+
<string name="display_mode_title">Modo do Display</string>
156+
<string name="display_mode_description">Alterar o Modo de Proporção de Tela</string>
155157
</resources>

app/src/main/res/values-ru/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,4 +148,6 @@
148148
<string name="application_version">Версия приложения</string>
149149
<string name="rootfs_version">Версия RootFS</string>
150150
<string name="wine_version">Версия Wine</string>
151+
<string name="display_mode_title">Режим отображения</string>
152+
<string name="display_mode_description">Изменить режим соотношения сторон экрана</string>
151153
</resources>

app/src/main/res/values-zh-rCN/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,4 +152,6 @@
152152
<string name="application_version">应用程序版本</string>
153153
<string name="rootfs_version">RootFS 版本</string>
154154
<string name="wine_version">Wine 版本</string>
155+
<string name="display_mode_title">显示模式</string>
156+
<string name="display_mode_description">更改显示比例模式</string>
155157
</resources>

0 commit comments

Comments
 (0)