[Scummvm-git-logs] scummvm master -> 4875573f66ebb474cab3bd36600703a242cbb1ff

sev- noreply at scummvm.org
Sun Sep 17 18:38:42 UTC 2023


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
4875573f66 GUI: Disable shader controls instead of hiding them. Prvides better UX


Commit: 4875573f66ebb474cab3bd36600703a242cbb1ff
    https://github.com/scummvm/scummvm/commit/4875573f66ebb474cab3bd36600703a242cbb1ff
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2023-09-17T20:38:37+02:00

Commit Message:
GUI: Disable shader controls instead of hiding them. Prvides better UX

Changed paths:
    gui/options.cpp
    gui/options.h


diff --git a/gui/options.cpp b/gui/options.cpp
index 89eed23bc4c..6be1a8460b6 100644
--- a/gui/options.cpp
+++ b/gui/options.cpp
@@ -424,23 +424,19 @@ void OptionsDialog::build() {
 	}
 
 	// Shader options
-	if (_shader) {
-		if (g_system->hasFeature(OSystem::kFeatureShaders)) {
-			Common::String shader(ConfMan.get("shader", _domain));
-			if (ConfMan.isKeyTemporary("shader")) {
-				_shader->setFontColor(ThemeEngine::FontColor::kFontColorOverride);
-			}
-			if (shader.empty() || shader == "default" || !ConfMan.hasKey("shader", _domain)) {
-				_shader->setLabel(_c("None", "shader"));
-				_shaderClearButton->setEnabled(false);
-			} else {
-				_shader->setLabel(shader);
-				_shaderClearButton->setEnabled(true);
-			}
+	enableShaderControls(g_system->hasFeature(OSystem::kFeatureShaders));
+
+	if (g_system->hasFeature(OSystem::kFeatureShaders)) {
+		Common::String shader(ConfMan.get("shader", _domain));
+		if (ConfMan.isKeyTemporary("shader")) {
+			_shader->setFontColor(ThemeEngine::FontColor::kFontColorOverride);
+		}
+		if (shader.empty() || shader == "default" || !ConfMan.hasKey("shader", _domain)) {
+			_shader->setLabel(_c("None", "shader"));
+			_shaderClearButton->setEnabled(false);
 		} else {
-			_shader->setVisible(false);
-			_shaderButton->setVisible(false);
-			_shaderClearButton->setVisible(false);
+			_shader->setLabel(shader);
+			_shaderClearButton->setEnabled(true);
 		}
 	}
 
@@ -744,7 +740,7 @@ void OptionsDialog::apply() {
 	Common::U32String previousShader;
 
 	// Shader options
-	if (_shader) {
+	if (g_system->hasFeature(OSystem::kFeatureShaders)) {
 		if (ConfMan.hasKey("shader", _domain) && !ConfMan.get("shader", _domain).empty())
 			previousShader = ConfMan.get("shader", _domain);
 
@@ -1256,18 +1252,7 @@ void OptionsDialog::setGraphicSettingsState(bool enabled) {
 		}
 	}
 
-	if (g_system->hasFeature(OSystem::kFeatureShaders)) {
-		_shaderButton->setEnabled(enabled);
-		_shader->setEnabled(enabled);
-		_shaderClearButton->setEnabled(enabled);
-	} else {
-		// Happens when we switch to backend that doesn't support shaders
-		if (_shader) {
-			_shaderButton->setEnabled(false);
-			_shader->setEnabled(false);
-			_shaderClearButton->setEnabled(false);
-		}
-	}
+	enableShaderControls(g_system->hasFeature(OSystem::kFeatureShaders));
 
 	if (g_system->hasFeature(OSystem::kFeatureFilteringMode))
 		_filteringCheckbox->setEnabled(enabled);
@@ -1628,21 +1613,21 @@ void OptionsDialog::addGraphicControls(GuiObject *boss, const Common::String &pr
 		updateScaleFactors(_scalerPopUp->getSelectedTag());
 	}
 
-	if (g_system->hasFeature(OSystem::kFeatureShaders)) {
-		if (g_system->getOverlayWidth() > 320)
-			_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"));
+	if (g_system->getOverlayWidth() > 320)
+		_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);
+	_shaderClearButton = addClearButton(boss, prefix + "grShaderClearButton", kClearShaderCmd);
 
 #ifdef USE_CLOUD
 #ifdef USE_LIBCURL
-		new ButtonWidget(boss, prefix + "UpdateShadersButton", _("Update Shaders"), _("Check for updates of shader packs"), kUpdateShadersCmd);
+	_updateShadersButton = new ButtonWidget(boss, prefix + "UpdateShadersButton", _("Update Shaders"), _("Check for updates of shader packs"), kUpdateShadersCmd);
 #endif
 #endif
-	}
+
+	enableShaderControls(g_system->hasFeature(OSystem::kFeatureShaders));
 
 	// Fullscreen checkbox
 	_fullscreenCheckbox = new CheckboxWidget(boss, prefix + "grFullscreenCheckbox", _("Fullscreen mode"), Common::U32String(), kFullscreenToggled);
@@ -1693,6 +1678,15 @@ void OptionsDialog::addGraphicControls(GuiObject *boss, const Common::String &pr
 	_enableGraphicSettings = true;
 }
 
+void OptionsDialog::enableShaderControls(bool enable) {
+	_shaderButton->setEnabled(enable);
+	_shader->setEnabled(enable);
+	_shaderClearButton->setVisible(enable);
+
+	if (_updateShadersButton)
+		_updateShadersButton->setEnabled(enable);
+}
+
 void OptionsDialog::addAudioControls(GuiObject *boss, const Common::String &prefix) {
 	// The MIDI mode popup & a label
 	if (g_system->getOverlayWidth() > 320)
@@ -2015,9 +2009,7 @@ void OptionsDialog::setupGraphicsTab() {
 	if (_graphicsTabId != -1) {
 		// Since we do not create shader controls, the rebuild is required
 		// Fixes crash when switching from SDL Surface to OpenGL
-		if (!_shader && g_system->hasFeature(OSystem::kFeatureShaders)) {
-			rebuild();
-		} else if (!_scalerPopUp && g_system->hasFeature(OSystem::kFeatureScalers)) {
+		if (!_scalerPopUp && g_system->hasFeature(OSystem::kFeatureScalers)) {
 			rebuild();
 		} else if (!_stretchPopUp && g_system->hasFeature(OSystem::kFeatureStretchMode)) {
 			rebuild();
@@ -2050,11 +2042,7 @@ void OptionsDialog::setupGraphicsTab() {
 		_scaleFactorPopUp->setVisible(true);
 	}
 
-	if (g_system->hasFeature(OSystem::kFeatureShaders)) {
-		_shaderButton->setVisible(true);
-		_shader->setVisible(true);
-		_shaderClearButton->setVisible(true);
-	}
+	enableShaderControls(g_system->hasFeature(OSystem::kFeatureShaders));
 }
 
 void OptionsDialog::updateScaleFactors(uint32 tag) {
diff --git a/gui/options.h b/gui/options.h
index 6e690e762b7..6823b1b6003 100644
--- a/gui/options.h
+++ b/gui/options.h
@@ -108,6 +108,8 @@ protected:
 	void setVolumeSettingsState(bool enabled);
 	void setSubtitleSettingsState(bool enabled);
 
+	void enableShaderControls(bool enabled);
+
 	virtual void setupGraphicsTab();
 	void updateScaleFactors(uint32 tag);
 
@@ -121,6 +123,7 @@ protected:
 
 	StaticTextWidget *_shader;
 	ButtonWidget *_shaderClearButton;
+	ButtonWidget *_updateShadersButton = nullptr;
 
 private:
 




More information about the Scummvm-git-logs mailing list