GUI: Allow both scalers and shaders to be enabled at the same time
This commit is contained in:
parent
4e4c149264
commit
57cd169a17
8 changed files with 37 additions and 185 deletions
|
@ -353,14 +353,8 @@ static void setupGraphics(OSystem &system) {
|
|||
// Set the user specified graphics mode (if any).
|
||||
system.setGraphicsMode(ConfMan.get("gfx_mode").c_str());
|
||||
system.setStretchMode(ConfMan.get("stretch_mode").c_str());
|
||||
|
||||
if (ConfMan.hasKey("useshaders") && ConfMan.get("useshaders") == "shaders") {
|
||||
system.setScaler(g_system->getDefaultScaler(), g_system->getDefaultScaleFactor());
|
||||
system.setShader(ConfMan.get("shader"));
|
||||
} else {
|
||||
system.setScaler(ConfMan.get("scaler").c_str(), ConfMan.getInt("scale_factor"));
|
||||
system.setShader("");
|
||||
}
|
||||
system.setScaler(ConfMan.get("scaler").c_str(), ConfMan.getInt("scale_factor"));
|
||||
system.setShader(ConfMan.get("shader"));
|
||||
|
||||
system.initSize(320, 200);
|
||||
|
||||
|
|
|
@ -215,17 +215,11 @@ void initCommonGFX() {
|
|||
if (gameDomain->contains("stretch_mode"))
|
||||
g_system->setStretchMode(ConfMan.get("stretch_mode").c_str());
|
||||
|
||||
if (ConfMan.hasKey("useshaders") && ConfMan.get("useshaders") == "shaders") {
|
||||
if (gameDomain->contains("shader")) {
|
||||
g_system->setScaler(g_system->getDefaultScaler(), g_system->getDefaultScaleFactor());
|
||||
g_system->setShader(ConfMan.get("shader"));
|
||||
}
|
||||
} else {
|
||||
if (gameDomain->contains("scaler") || gameDomain->contains("scale_factor")) {
|
||||
g_system->setScaler(ConfMan.get("scaler").c_str(), ConfMan.getInt("scale_factor"));
|
||||
g_system->setShader("");
|
||||
}
|
||||
}
|
||||
if (gameDomain->contains("scaler") || gameDomain->contains("scale_factor"))
|
||||
g_system->setScaler(ConfMan.get("scaler").c_str(), ConfMan.getInt("scale_factor"));
|
||||
|
||||
if (gameDomain->contains("shader"))
|
||||
g_system->setShader(ConfMan.get("shader"));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
153
gui/options.cpp
153
gui/options.cpp
|
@ -103,7 +103,6 @@ enum {
|
|||
kGraphicsTabContainerReflowCmd = 'gtcr',
|
||||
kScalerPopUpCmd = 'scPU',
|
||||
kFullscreenToggled = 'oful',
|
||||
kScalerToggle = 'sctg',
|
||||
};
|
||||
|
||||
enum {
|
||||
|
@ -112,11 +111,6 @@ enum {
|
|||
kSubtitlesBoth,
|
||||
};
|
||||
|
||||
enum {
|
||||
kScalerScaler,
|
||||
kScalerShader,
|
||||
};
|
||||
|
||||
#ifdef USE_FLUIDSYNTH
|
||||
enum {
|
||||
kFluidSynthSettingsCmd = 'flst'
|
||||
|
@ -203,7 +197,6 @@ void OptionsDialog::init() {
|
|||
_fullscreenCheckbox = nullptr;
|
||||
_filteringCheckbox = nullptr;
|
||||
_aspectCheckbox = nullptr;
|
||||
_enableShaderSettings = false;
|
||||
_shader = nullptr;
|
||||
_shaderButton = nullptr;
|
||||
_shaderClearButton = nullptr;
|
||||
|
@ -357,15 +350,6 @@ void OptionsDialog::build() {
|
|||
_scalerPopUp->setSelected(0);
|
||||
_scaleFactorPopUp->setSelected(0);
|
||||
|
||||
// Set the scaler checkbox value
|
||||
int scalerVal = kScalerScaler;
|
||||
|
||||
if (ConfMan.hasKey("useshaders", _domain) && ConfMan.get("useshaders", _domain) == "shaders")
|
||||
scalerVal = kScalerShader;
|
||||
|
||||
_scalerToggleGroup->setValue(scalerVal);
|
||||
setScalerControls();
|
||||
|
||||
if (g_system->hasFeature(OSystem::kFeatureScalers)) {
|
||||
if (ConfMan.hasKey("scaler", _domain)) {
|
||||
const PluginList &scalerPlugins = ScalerMan.getPlugins();
|
||||
|
@ -608,16 +592,6 @@ void OptionsDialog::apply() {
|
|||
ConfMan.setBool("aspect_ratio", _aspectCheckbox->getState(), _domain);
|
||||
ConfMan.setBool("vsync", _vsyncCheckbox->getState(), _domain);
|
||||
|
||||
Common::String useshaders = "scalers";
|
||||
|
||||
if (_scalerToggleGroup->getValue() == kScalerShader)
|
||||
useshaders = "shaders";
|
||||
|
||||
if (ConfMan.get("useshaders", _domain) != useshaders)
|
||||
graphicsModeChanged = true;
|
||||
|
||||
ConfMan.set("useshaders", useshaders, _domain);
|
||||
|
||||
bool isSet = false;
|
||||
|
||||
if ((int32)_gfxPopUp->getSelectedTag() >= 0) {
|
||||
|
@ -739,32 +713,28 @@ void OptionsDialog::apply() {
|
|||
|
||||
// Shader options
|
||||
if (_shader) {
|
||||
if (_enableShaderSettings) {
|
||||
bool isSet;
|
||||
bool isSet;
|
||||
|
||||
if (ConfMan.hasKey("shader", _domain) && !ConfMan.get("shader", _domain).empty())
|
||||
previousShader = ConfMan.get("shader", _domain);
|
||||
if (ConfMan.hasKey("shader", _domain) && !ConfMan.get("shader", _domain).empty())
|
||||
previousShader = ConfMan.get("shader", _domain);
|
||||
|
||||
Common::U32String shader(_shader->getLabel());
|
||||
if (shader.empty() || (shader == _c("None", "shader")))
|
||||
isSet = false;
|
||||
else
|
||||
isSet = true;
|
||||
Common::U32String shader(_shader->getLabel());
|
||||
if (shader.empty() || (shader == _c("None", "shader")))
|
||||
isSet = false;
|
||||
else
|
||||
isSet = true;
|
||||
|
||||
if (isSet) {
|
||||
if (!ConfMan.hasKey("shader", _domain) || shader != ConfMan.get("shader", _domain))
|
||||
graphicsModeChanged = true;
|
||||
ConfMan.set("shader", shader.encode(), _domain);
|
||||
} else {
|
||||
if (ConfMan.hasKey("shader", _domain) && !ConfMan.get("shader", _domain).empty())
|
||||
graphicsModeChanged = true;
|
||||
ConfMan.removeKey("shader", _domain);
|
||||
}
|
||||
|
||||
_shader->setFontColor(ThemeEngine::FontColor::kFontColorNormal);
|
||||
if (isSet) {
|
||||
if (!ConfMan.hasKey("shader", _domain) || shader != ConfMan.get("shader", _domain))
|
||||
graphicsModeChanged = true;
|
||||
ConfMan.set("shader", shader.encode(), _domain);
|
||||
} else {
|
||||
if (ConfMan.hasKey("shader", _domain) && !ConfMan.get("shader", _domain).empty())
|
||||
graphicsModeChanged = true;
|
||||
ConfMan.removeKey("shader", _domain);
|
||||
}
|
||||
|
||||
_shader->setFontColor(ThemeEngine::FontColor::kFontColorNormal);
|
||||
}
|
||||
|
||||
// Setup graphics again if needed
|
||||
|
@ -772,16 +742,8 @@ void OptionsDialog::apply() {
|
|||
g_system->beginGFXTransaction();
|
||||
g_system->setGraphicsMode(ConfMan.get("gfx_mode", _domain).c_str());
|
||||
g_system->setStretchMode(ConfMan.get("stretch_mode", _domain).c_str());
|
||||
|
||||
if (ConfMan.hasKey("useshaders", _domain) && ConfMan.get("useshaders", _domain) == "shaders") {
|
||||
g_system->setScaler(g_system->getDefaultScaler(), g_system->getDefaultScaleFactor());
|
||||
g_system->setShader(ConfMan.get("shader", _domain));
|
||||
} else {
|
||||
// THis should stay in the fallback section for allowing more values to the toggle group
|
||||
|
||||
g_system->setScaler(ConfMan.get("scaler", _domain).c_str(), ConfMan.getInt("scale_factor", _domain));
|
||||
g_system->setShader("");
|
||||
}
|
||||
g_system->setScaler(ConfMan.get("scaler", _domain).c_str(), ConfMan.getInt("scale_factor", _domain));
|
||||
g_system->setShader(ConfMan.get("shader", _domain));
|
||||
|
||||
if (ConfMan.hasKey("aspect_ratio"))
|
||||
g_system->setFeatureState(OSystem::kFeatureAspectRatioCorrection, ConfMan.getBool("aspect_ratio", _domain));
|
||||
|
@ -1090,9 +1052,6 @@ void OptionsDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 data
|
|||
_shaderClearButton->setEnabled(false);
|
||||
g_gui.scheduleTopDialogRedraw();
|
||||
break;
|
||||
case kScalerToggle:
|
||||
setScalerControls();
|
||||
break;
|
||||
case kMidiGainChanged:
|
||||
_midiGainLabel->setLabel(Common::String::format("%.2f", (double)_midiGainSlider->getValue() / 100.0));
|
||||
_midiGainLabel->markAsDirty();
|
||||
|
@ -1228,14 +1187,10 @@ void OptionsDialog::setGraphicSettingsState(bool enabled) {
|
|||
_stretchPopUp->setEnabled(false);
|
||||
}
|
||||
|
||||
bool scalerToggle = false;
|
||||
|
||||
if (g_system->hasFeature(OSystem::kFeatureScalers)) {
|
||||
_scalerPopUpDesc->setEnabled(enabled);
|
||||
_scalerPopUp->setEnabled(enabled);
|
||||
_scaleFactorPopUp->setEnabled(enabled);
|
||||
|
||||
scalerToggle = enabled;
|
||||
} else {
|
||||
_scalerPopUpDesc->setEnabled(false);
|
||||
_scalerPopUp->setEnabled(false);
|
||||
|
@ -1246,19 +1201,12 @@ void OptionsDialog::setGraphicSettingsState(bool enabled) {
|
|||
_shaderButton->setEnabled(enabled);
|
||||
_shader->setEnabled(enabled);
|
||||
_shaderClearButton->setEnabled(enabled);
|
||||
|
||||
scalerToggle = enabled;
|
||||
} else {
|
||||
_scalerPopUpDesc->setEnabled(false);
|
||||
_scalerPopUp->setEnabled(false);
|
||||
_scaleFactorPopUp->setEnabled(false);
|
||||
}
|
||||
|
||||
_scalerToggleGroup->setEnabled(scalerToggle);
|
||||
|
||||
// Toggle setting based on the radiobutton state
|
||||
setScalerControls(enabled);
|
||||
|
||||
if (g_system->hasFeature(OSystem::kFeatureFilteringMode))
|
||||
_filteringCheckbox->setEnabled(enabled);
|
||||
else
|
||||
|
@ -1275,21 +1223,6 @@ void OptionsDialog::setGraphicSettingsState(bool enabled) {
|
|||
_aspectCheckbox->setEnabled(enabled);
|
||||
}
|
||||
|
||||
void OptionsDialog::setShaderSettingsState(bool enabled) {
|
||||
_enableShaderSettings = enabled;
|
||||
|
||||
if (g_system->hasFeature(OSystem::kFeatureShaders)) {
|
||||
_shader->setEnabled(enabled);
|
||||
_shaderButton->setEnabled(enabled);
|
||||
_shaderClearButton->setEnabled(enabled);
|
||||
|
||||
if (enabled && !_shader->getLabel().empty() && (_shader->getLabel() != _c("None", "shader")))
|
||||
_shaderClearButton->setEnabled(enabled);
|
||||
else
|
||||
_shaderClearButton->setEnabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
void OptionsDialog::setAudioSettingsState(bool enabled) {
|
||||
_enableAudioSettings = enabled;
|
||||
_midiPopUpDesc->setEnabled(enabled);
|
||||
|
@ -1587,15 +1520,9 @@ void OptionsDialog::addGraphicControls(GuiObject *boss, const Common::String &pr
|
|||
sm++;
|
||||
}
|
||||
|
||||
if (g_system->hasFeature(OSystem::kFeatureShaders)) {
|
||||
_scalerToggleGroup = new RadiobuttonGroup(boss, kScalerToggle);
|
||||
|
||||
_scalerToggleScalers = new RadiobuttonWidget(boss, prefix + "grScalerRadioButton", _scalerToggleGroup, kScalerScaler, Common::U32String(""));
|
||||
}
|
||||
|
||||
// The Scaler popup
|
||||
const PluginList &scalerPlugins = ScalerMan.getPlugins();
|
||||
_scalerPopUpDesc = new StaticTextWidget(boss, prefix + "grScalerPopupDesc", _("Use scaler:"));
|
||||
_scalerPopUpDesc = new StaticTextWidget(boss, prefix + "grScalerPopupDesc", _("Scaler:"));
|
||||
_scalerPopUp = new PopUpWidget(boss, prefix + "grScalerPopup", Common::U32String(), kScalerPopUpCmd);
|
||||
|
||||
_scalerPopUp->appendEntry(_("<default>"));
|
||||
|
@ -1608,17 +1535,13 @@ void OptionsDialog::addGraphicControls(GuiObject *boss, const Common::String &pr
|
|||
updateScaleFactors(_scalerPopUp->getSelectedTag());
|
||||
|
||||
if (g_system->hasFeature(OSystem::kFeatureShaders)) {
|
||||
_scalerToggleShaders = new RadiobuttonWidget(boss, prefix + "grShaderRadioButton", _scalerToggleGroup, kScalerShader, Common::U32String(""));
|
||||
|
||||
if (g_system->getOverlayWidth() > 320)
|
||||
_shaderButton = new ButtonWidget(boss, prefix + "grShaderButton", _("Use Shader:"), _("Specifies path to the shader used for scaling the game screen"), kChooseShaderCmd);
|
||||
_shaderButton = new ButtonWidget(boss, prefix + "grShaderButton", _("Shader:"), _("Specifies path to the shader used for scaling the game screen"), kChooseShaderCmd);
|
||||
else
|
||||
_shaderButton = new ButtonWidget(boss, prefix + "grShaderButton", _c("Shader Path:", "lowres"), _("Specifies path to the shader used for scaling the game screen"), kChooseShaderCmd);
|
||||
_shader = new StaticTextWidget(boss, prefix + "grShader", _c("None", "shader"), _("Specifies path to the shader used for scaling the game screen"));
|
||||
|
||||
_shaderClearButton = addClearButton(boss, prefix + "grShaderClearButton", kClearShaderCmd);
|
||||
|
||||
_enableShaderSettings = true;
|
||||
}
|
||||
|
||||
// Fullscreen checkbox
|
||||
|
@ -1668,30 +1591,6 @@ void OptionsDialog::addGraphicControls(GuiObject *boss, const Common::String &pr
|
|||
_enableGraphicSettings = true;
|
||||
}
|
||||
|
||||
void OptionsDialog::setScalerControls(bool enabled) {
|
||||
bool scalers, shaders;
|
||||
|
||||
if (_scalerToggleGroup->getValue() == kScalerScaler) {
|
||||
scalers = true;
|
||||
shaders = false;
|
||||
} else {
|
||||
scalers = false;
|
||||
shaders = true;
|
||||
}
|
||||
|
||||
if (!enabled) {
|
||||
scalers = shaders = false;
|
||||
}
|
||||
|
||||
_scalerPopUpDesc->setEnabled(scalers);
|
||||
_scalerPopUp->setEnabled(scalers);
|
||||
_scaleFactorPopUp->setEnabled(scalers);
|
||||
|
||||
_shaderButton->setEnabled(shaders);
|
||||
_shader->setEnabled(shaders);
|
||||
_shaderClearButton->setEnabled(shaders);
|
||||
}
|
||||
|
||||
void OptionsDialog::addAudioControls(GuiObject *boss, const Common::String &prefix) {
|
||||
// The MIDI mode popup & a label
|
||||
if (g_system->getOverlayWidth() > 320)
|
||||
|
@ -2034,8 +1933,6 @@ void OptionsDialog::setupGraphicsTab() {
|
|||
_renderModePopUpDesc->setVisible(true);
|
||||
_renderModePopUp->setVisible(true);
|
||||
|
||||
setScalerControls();
|
||||
|
||||
if (g_system->hasFeature(OSystem::kFeatureScalers)) {
|
||||
_scalerPopUpDesc->setVisible(true);
|
||||
if (ConfMan.isKeyTemporary("scaler") || ConfMan.isKeyTemporary("scale_factor"))
|
||||
|
@ -2047,6 +1944,16 @@ void OptionsDialog::setupGraphicsTab() {
|
|||
_scalerPopUp->setVisible(false);
|
||||
_scaleFactorPopUp->setVisible(false);
|
||||
}
|
||||
|
||||
if (g_system->hasFeature(OSystem::kFeatureShaders)) {
|
||||
_shaderButton->setVisible(true);
|
||||
_shader->setVisible(true);
|
||||
_shaderClearButton->setVisible(true);
|
||||
} else {
|
||||
_shaderButton->setVisible(false);
|
||||
_shader->setVisible(false);
|
||||
_shaderClearButton->setVisible(false);
|
||||
}
|
||||
}
|
||||
|
||||
void OptionsDialog::updateScaleFactors(uint32 tag) {
|
||||
|
|
|
@ -102,7 +102,6 @@ protected:
|
|||
void addSubtitleControls(GuiObject *boss, const Common::String &prefix, int maxSliderVal = 255);
|
||||
|
||||
void setGraphicSettingsState(bool enabled);
|
||||
void setShaderSettingsState(bool enabled);
|
||||
void setAudioSettingsState(bool enabled);
|
||||
void setMIDISettingsState(bool enabled);
|
||||
void setMT32SettingsState(bool enabled);
|
||||
|
@ -115,8 +114,6 @@ protected:
|
|||
bool loadMusicDeviceSetting(PopUpWidget *popup, Common::String setting, MusicType preferredType = MT_AUTO);
|
||||
void saveMusicDeviceSetting(PopUpWidget *popup, Common::String setting);
|
||||
|
||||
void setScalerControls(bool enabled = true);
|
||||
|
||||
TabWidget *_tabWidget;
|
||||
int _graphicsTabId;
|
||||
int _midiTabId;
|
||||
|
@ -154,9 +151,6 @@ private:
|
|||
PopUpWidget *_gfxPopUp;
|
||||
StaticTextWidget *_stretchPopUpDesc;
|
||||
PopUpWidget *_stretchPopUp;
|
||||
RadiobuttonGroup *_scalerToggleGroup;
|
||||
RadiobuttonWidget *_scalerToggleScalers;
|
||||
RadiobuttonWidget *_scalerToggleShaders;
|
||||
StaticTextWidget *_scalerPopUpDesc;
|
||||
PopUpWidget *_scalerPopUp, *_scaleFactorPopUp;
|
||||
ButtonWidget *_shaderButton;
|
||||
|
@ -171,11 +165,6 @@ private:
|
|||
StaticTextWidget *_renderModePopUpDesc;
|
||||
PopUpWidget *_renderModePopUp;
|
||||
|
||||
//
|
||||
// Shader controls
|
||||
//
|
||||
bool _enableShaderSettings;
|
||||
|
||||
//
|
||||
// Audio controls
|
||||
//
|
||||
|
|
|
@ -489,10 +489,6 @@
|
|||
/>
|
||||
</layout>
|
||||
<layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' align = 'center'>
|
||||
<widget name = 'grScalerRadioButton'
|
||||
type = 'Radiobutton'
|
||||
width = '20'
|
||||
/>
|
||||
<widget name = 'grScalerPopupDesc'
|
||||
type = 'OptionsLabel'
|
||||
/>
|
||||
|
@ -504,10 +500,6 @@
|
|||
/>
|
||||
</layout>
|
||||
<layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' align = 'center'>
|
||||
<widget name = 'grShaderRadioButton'
|
||||
type = 'Radiobutton'
|
||||
width = '20'
|
||||
/>
|
||||
<widget name = 'grShaderButton'
|
||||
type = 'Button'
|
||||
/>
|
||||
|
|
|
@ -428,10 +428,6 @@
|
|||
/>
|
||||
</layout>
|
||||
<layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '6' align = 'center'>
|
||||
<widget name = 'grScalerRadioButton'
|
||||
type = 'Radiobutton'
|
||||
width = '10'
|
||||
/>
|
||||
<widget name = 'grScalerPopupDesc'
|
||||
type = 'OptionsLabel'
|
||||
/>
|
||||
|
@ -443,10 +439,6 @@
|
|||
/>
|
||||
</layout>
|
||||
<layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' align = 'center'>
|
||||
<widget name = 'grShaderRadioButton'
|
||||
type = 'Radiobutton'
|
||||
width = '10'
|
||||
/>
|
||||
<widget name = 'grShaderButton'
|
||||
type = 'Button'
|
||||
/>
|
||||
|
|
|
@ -341,10 +341,6 @@
|
|||
/>
|
||||
</layout>
|
||||
<layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' align = 'center'>
|
||||
<widget name = 'grScalerRadioButton'
|
||||
type = 'Radiobutton'
|
||||
width = '20'
|
||||
/>
|
||||
<widget name = 'grScalerPopupDesc'
|
||||
type = 'OptionsLabel'
|
||||
/>
|
||||
|
@ -356,10 +352,6 @@
|
|||
/>
|
||||
</layout>
|
||||
<layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' align = 'center'>
|
||||
<widget name = 'grShaderRadioButton'
|
||||
type = 'Radiobutton'
|
||||
width = '20'
|
||||
/>
|
||||
<widget name = 'grShaderButton'
|
||||
type = 'Button'
|
||||
/>
|
||||
|
|
|
@ -342,10 +342,6 @@
|
|||
/>
|
||||
</layout>
|
||||
<layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '6' align = 'center'>
|
||||
<widget name = 'grScalerRadioButton'
|
||||
type = 'Radiobutton'
|
||||
width = '10'
|
||||
/>
|
||||
<widget name = 'grScalerPopupDesc'
|
||||
type = 'OptionsLabel'
|
||||
/>
|
||||
|
@ -357,10 +353,6 @@
|
|||
/>
|
||||
</layout>
|
||||
<layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '6' align = 'center'>
|
||||
<widget name = 'grShaderRadioButton'
|
||||
type = 'Radiobutton'
|
||||
width = '10'
|
||||
/>
|
||||
<widget name = 'grShaderButton'
|
||||
type = 'Button'
|
||||
/>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue