Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge pull request #12095 from t895/color-space-settings
Android: Expose color space settings
  • Loading branch information
t895 committed Aug 30, 2023
2 parents efa8207 + 53fc344 commit 5e5887a
Show file tree
Hide file tree
Showing 15 changed files with 241 additions and 72 deletions.
Expand Up @@ -763,6 +763,18 @@ enum class BooleanSetting(
"ArbitraryMipmapDetection",
true
),
GFX_CC_CORRECT_COLOR_SPACE(
Settings.FILE_GFX,
Settings.SECTION_GFX_COLOR_CORRECTION,
"CorrectColorSpace",
false
),
GFX_CC_CORRECT_GAMMA(
Settings.FILE_GFX,
Settings.SECTION_GFX_COLOR_CORRECTION,
"CorrectGamma",
false
),
GFX_STEREO_SWAP_EYES(Settings.FILE_GFX, Settings.SECTION_STEREOSCOPY, "StereoSwapEyes", false),
GFX_HACK_EFB_ACCESS_ENABLE(
Settings.FILE_GFX,
Expand Down
Expand Up @@ -10,7 +10,8 @@ enum class FloatSetting(
) : AbstractFloatSetting {
// These entries have the same names and order as in C++, just for consistency.
MAIN_EMULATION_SPEED(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "EmulationSpeed", 1.0f),
MAIN_OVERCLOCK(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "Overclock", 1.0f);
MAIN_OVERCLOCK(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "Overclock", 1.0f),
GFX_CC_GAME_GAMMA(Settings.FILE_GFX, Settings.SECTION_GFX_COLOR_CORRECTION, "GameGamma", 2.35f);

override val isOverridden: Boolean
get() = NativeConfig.isOverridden(file, section, key)
Expand Down
Expand Up @@ -119,6 +119,12 @@ enum class IntSetting(
"MaxAnisotropy",
0
),
GFX_CC_GAME_COLOR_SPACE(
Settings.FILE_GFX,
Settings.SECTION_GFX_COLOR_CORRECTION,
"GameColorSpace",
0
),
GFX_STEREO_MODE(Settings.FILE_GFX, Settings.SECTION_STEREOSCOPY, "StereoMode", 0),
GFX_STEREO_DEPTH(Settings.FILE_GFX, Settings.SECTION_STEREOSCOPY, "StereoDepth", 20),
GFX_STEREO_CONVERGENCE_PERCENTAGE(
Expand Down
Expand Up @@ -135,6 +135,7 @@ class Settings : Closeable {
const val SECTION_LOGGER_OPTIONS = "Options"
const val SECTION_GFX_SETTINGS = "Settings"
const val SECTION_GFX_ENHANCEMENTS = "Enhancements"
const val SECTION_GFX_COLOR_CORRECTION = "ColorCorrection"
const val SECTION_GFX_HACKS = "Hacks"
const val SECTION_DEBUG = "Debug"
const val SECTION_EMULATED_USB_DEVICES = "EmulatedUSBDevices"
Expand Down
Expand Up @@ -6,7 +6,8 @@ import android.content.Context
import org.dolphinemu.dolphinemu.features.settings.model.AbstractFloatSetting
import org.dolphinemu.dolphinemu.features.settings.model.AbstractSetting
import org.dolphinemu.dolphinemu.features.settings.model.Settings
import kotlin.math.roundToInt
import java.math.BigDecimal
import java.math.MathContext

open class FloatSliderSetting : SliderSetting {
var floatSetting: AbstractFloatSetting
Expand All @@ -19,29 +20,34 @@ open class FloatSliderSetting : SliderSetting {
setting: AbstractFloatSetting,
titleId: Int,
descriptionId: Int,
min: Int,
max: Int,
min: Float,
max: Float,
units: String?,
stepSize: Int
) : super(context, titleId, descriptionId, min, max, units, stepSize) {
stepSize: Float,
showDecimal: Boolean
) : super(context, titleId, descriptionId, min, max, units, stepSize, showDecimal) {
floatSetting = setting
}

constructor(
setting: AbstractFloatSetting,
name: CharSequence,
description: CharSequence?,
min: Int,
max: Int,
units: String?
) : super(name, description, min, max, units) {
min: Float,
max: Float,
units: String?,
showDecimal: Boolean
) : super(name, description, min, max, units, showDecimal) {
floatSetting = setting
}

override val selectedValue: Int
get() = floatSetting.float.roundToInt()
override val selectedValue: Float
get() = floatSetting.float

open fun setSelectedValue(settings: Settings?, selection: Float) {
floatSetting.setFloat(settings!!, selection)
floatSetting.setFloat(
settings!!,
BigDecimal((selection).toDouble()).round(MathContext(3)).toFloat()
)
}
}
Expand Up @@ -16,7 +16,7 @@ class IntSliderSetting(
max: Int,
units: String?,
stepSize: Int
) : SliderSetting(context, titleId, descriptionId, min, max, units, stepSize) {
) : SliderSetting(context, titleId, descriptionId, min, max, units, stepSize, false) {
override val setting: AbstractSetting
get() = intSetting

Expand Down
Expand Up @@ -4,24 +4,38 @@ package org.dolphinemu.dolphinemu.features.settings.model.view

import android.content.Context
import org.dolphinemu.dolphinemu.features.settings.model.AbstractFloatSetting
import org.dolphinemu.dolphinemu.features.settings.model.AbstractSetting
import org.dolphinemu.dolphinemu.features.settings.model.Settings
import kotlin.math.roundToInt
import java.math.BigDecimal
import java.math.MathContext

class PercentSliderSetting(
context: Context,
override val setting: AbstractFloatSetting,
titleId: Int,
descriptionId: Int,
min: Int,
max: Int,
min: Float,
max: Float,
units: String?,
stepSize: Int
) : FloatSliderSetting(context, setting, titleId, descriptionId, min, max, units, stepSize) {
override val selectedValue: Int
get() = (floatSetting.float * 100).roundToInt()
stepSize: Float,
showDecimal: Boolean
) : FloatSliderSetting(
context,
setting,
titleId,
descriptionId,
min,
max,
units,
stepSize,
showDecimal
) {
override val selectedValue: Float
get() = (floatSetting.float * 100)

override fun setSelectedValue(settings: Settings?, selection: Float) {
floatSetting.setFloat(settings!!, selection / 100)
floatSetting.setFloat(
settings!!,
BigDecimal((selection / 100).toDouble()).round(MathContext(3)).toFloat()
)
}
}
Expand Up @@ -4,44 +4,50 @@ package org.dolphinemu.dolphinemu.features.settings.model.view

import android.content.Context

abstract class SliderSetting : SettingsItem {
sealed class SliderSetting : SettingsItem {
override val type: Int = TYPE_SLIDER

var min: Int
var min: Any
private set
var max: Int
var max: Any
private set
var units: String?
private set
var stepSize = 0
var stepSize: Any = 0
private set
var showDecimal: Boolean = false
private set

constructor(
context: Context,
nameId: Int,
descriptionId: Int,
min: Int,
max: Int,
min: Any,
max: Any,
units: String?,
stepSize: Int
stepSize: Any,
showDecimal: Boolean
) : super(context, nameId, descriptionId) {
this.min = min
this.max = max
this.units = units
this.stepSize = stepSize
this.showDecimal = showDecimal
}

constructor(
name: CharSequence,
description: CharSequence?,
min: Int,
max: Int,
units: String?
min: Any,
max: Any,
units: String?,
showDecimal: Boolean
) : super(name, description) {
this.min = min
this.max = max
this.units = units
this.showDecimal = showDecimal
}

abstract val selectedValue: Int
abstract val selectedValue: Any
}
Expand Up @@ -19,6 +19,7 @@ enum class MenuTag {
DEBUG("debug"),
GRAPHICS("graphics"),
ENHANCEMENTS("enhancements"),
COLOR_CORRECTION("color_correction"),
STEREOSCOPY("stereoscopy"),
HACKS("hacks"),
STATISTICS("statistics"),
Expand Down
Expand Up @@ -51,7 +51,7 @@ class SettingsAdapter(
private var settingsList: ArrayList<SettingsItem>? = null
private var clickedItem: SettingsItem? = null
private var clickedPosition: Int = -1
private var seekbarProgress = 0
private var seekbarProgress: Float = 0f
private var dialog: AlertDialog? = null
private var textSliderValue: TextView? = null

Expand Down Expand Up @@ -229,21 +229,37 @@ class SettingsAdapter(
fun onSliderClick(item: SliderSetting, position: Int) {
clickedItem = item
clickedPosition = position
seekbarProgress = item.selectedValue
seekbarProgress = when (item) {
is FloatSliderSetting -> item.selectedValue
is IntSliderSetting -> item.selectedValue.toFloat()
}

val inflater = LayoutInflater.from(fragmentView.fragmentActivity)
val binding = DialogSliderBinding.inflate(inflater)

textSliderValue = binding.textValue
textSliderValue!!.text = seekbarProgress.toString()
textSliderValue!!.text = if (item.showDecimal) {
String.format("%.2f", seekbarProgress)
} else {
seekbarProgress.toInt().toString()
}

binding.textUnits.text = item.units

val slider = binding.slider
slider.valueFrom = item.min.toFloat()
slider.valueTo = item.max.toFloat()
slider.value = seekbarProgress.toFloat()
slider.stepSize = item.stepSize.toFloat()
when (item) {
is FloatSliderSetting -> {
slider.valueFrom = item.min as Float
slider.valueTo = item.max as Float
slider.stepSize = item.stepSize as Float
}
is IntSliderSetting -> {
slider.valueFrom = (item.min as Int).toFloat()
slider.valueTo = (item.max as Int).toFloat()
slider.stepSize = (item.stepSize as Int).toFloat()
}
}
slider.value = seekbarProgress
slider.addOnChangeListener(this)

dialog = MaterialAlertDialogBuilder(fragmentView.fragmentActivity)
Expand Down Expand Up @@ -480,22 +496,24 @@ class SettingsAdapter(
}
is IntSliderSetting -> {
val sliderSetting = clickedItem as IntSliderSetting
if (sliderSetting.selectedValue != seekbarProgress) fragmentView.onSettingChanged()
sliderSetting.setSelectedValue(settings, seekbarProgress)
if (sliderSetting.selectedValue != seekbarProgress.toInt()) {
fragmentView.onSettingChanged()
}
sliderSetting.setSelectedValue(settings, seekbarProgress.toInt())
closeDialog()
}
is FloatSliderSetting -> {
val sliderSetting = clickedItem as FloatSliderSetting

if (sliderSetting.selectedValue != seekbarProgress) fragmentView.onSettingChanged()

sliderSetting.setSelectedValue(settings, seekbarProgress.toFloat())
sliderSetting.setSelectedValue(settings, seekbarProgress)

closeDialog()
}
}
clickedItem = null
seekbarProgress = -1
seekbarProgress = -1f
}

fun closeDialog() {
Expand All @@ -510,8 +528,12 @@ class SettingsAdapter(
}

override fun onValueChange(slider: Slider, progress: Float, fromUser: Boolean) {
seekbarProgress = progress.toInt()
textSliderValue!!.text = seekbarProgress.toString()
seekbarProgress = progress
textSliderValue!!.text = if ((clickedItem as SliderSetting).showDecimal) {
String.format("%.2f", seekbarProgress)
} else {
seekbarProgress.toInt().toString()
}
}

private fun getValueForSingleChoiceSelection(item: SingleChoiceSetting, which: Int): Int {
Expand Down
Expand Up @@ -272,6 +272,7 @@ class SettingsFragment : Fragment(), SettingsFragmentView {
titles[MenuTag.DEBUG] = R.string.debug_submenu
titles[MenuTag.GRAPHICS] = R.string.graphics_settings
titles[MenuTag.ENHANCEMENTS] = R.string.enhancements_submenu
titles[MenuTag.COLOR_CORRECTION] = R.string.color_correction_submenu
titles[MenuTag.STEREOSCOPY] = R.string.stereoscopy_submenu
titles[MenuTag.HACKS] = R.string.hacks_submenu
titles[MenuTag.STATISTICS] = R.string.statistics_submenu
Expand Down

0 comments on commit 5e5887a

Please sign in to comment.