aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--audio/softsynth/fluidsynth.cpp42
-rw-r--r--base/commandLine.cpp18
-rw-r--r--gui/ThemeEngine.h2
-rw-r--r--gui/fluidsynth-dialog.cpp341
-rw-r--r--gui/fluidsynth-dialog.h98
-rw-r--r--gui/module.mk5
-rw-r--r--gui/options.cpp26
-rw-r--r--gui/options.h10
-rw-r--r--gui/themes/default.inc298
-rw-r--r--gui/themes/scummclassic.zipbin95180 -> 103608 bytes
-rw-r--r--gui/themes/scummclassic/THEMERC2
-rw-r--r--gui/themes/scummclassic/classic_layout.stx152
-rw-r--r--gui/themes/scummclassic/classic_layout_lowres.stx154
-rw-r--r--gui/themes/scummmodern.zipbin1453485 -> 1461913 bytes
-rw-r--r--gui/themes/scummmodern/THEMERC2
-rw-r--r--gui/themes/scummmodern/scummmodern_layout.stx152
-rw-r--r--gui/themes/scummmodern/scummmodern_layout_lowres.stx154
17 files changed, 1445 insertions, 11 deletions
diff --git a/audio/softsynth/fluidsynth.cpp b/audio/softsynth/fluidsynth.cpp
index 2451336784..71187200dc 100644
--- a/audio/softsynth/fluidsynth.cpp
+++ b/audio/softsynth/fluidsynth.cpp
@@ -127,12 +127,44 @@ int MidiDriver_FluidSynth::open() {
_synth = new_fluid_synth(_settings);
- // In theory, this ought to reduce CPU load... but it doesn't make any
- // noticeable difference for me, so disable it for now.
+ int chorusNr = ConfMan.getInt("fluidsynth_chorus_nr");
+ double chorusLevel = (double)ConfMan.getInt("fluidsynth_chorus_level") / 100.0;
+ double chorusSpeed = (double)ConfMan.getInt("fluidsynth_chorus_speed") / 100.0;
+ double chorusDepthMs = (double)ConfMan.getInt("fluidsynth_chorus_depth") / 100.0;
+
+ Common::String chorusWaveForm = ConfMan.get("fluidsynth_chorus_waveform");
+ int chorusType = FLUID_CHORUS_MOD_SINE;
+ if (chorusWaveForm == "sine") {
+ chorusType = FLUID_CHORUS_MOD_SINE;
+ } else {
+ chorusType = FLUID_CHORUS_MOD_TRIANGLE;
+ }
+
+ fluid_synth_set_chorus_on(_synth, 1);
+ fluid_synth_set_chorus(_synth, chorusNr, chorusLevel, chorusSpeed, chorusDepthMs, chorusType);
+
+ double reverbRoomSize = (double)ConfMan.getInt("fluidsynth_reverb_roomsize") / 100.0;
+ double reverbDamping = (double)ConfMan.getInt("fluidsynth_reverb_damping") / 100.0;
+ double reverbWidth = (double)ConfMan.getInt("fluidsynth_reverb_width") / 10.0;
+ double reverbLevel = (double)ConfMan.getInt("fluidsynth_reverb_level") / 100.0;
+
+ fluid_synth_set_reverb_on(_synth, 1);
+ fluid_synth_set_reverb(_synth, reverbRoomSize, reverbDamping, reverbWidth, reverbLevel);
+
+ Common::String interpolation = ConfMan.get("fluidsynth_misc_interpolation");
+ int interpMethod = FLUID_INTERP_4THORDER;
+
+ if (interpolation == "none") {
+ interpMethod = FLUID_INTERP_NONE;
+ } else if (interpolation == "linear") {
+ interpMethod = FLUID_INTERP_LINEAR;
+ } else if (interpolation == "4th") {
+ interpMethod = FLUID_INTERP_4THORDER;
+ } else if (interpolation == "7th") {
+ interpMethod = FLUID_INTERP_7THORDER;
+ }
- // fluid_synth_set_interp_method(_synth, -1, FLUID_INTERP_LINEAR);
- // fluid_synth_set_reverb_on(_synth, 0);
- // fluid_synth_set_chorus_on(_synth, 0);
+ fluid_synth_set_interp_method(_synth, -1, interpMethod);
const char *soundfont = ConfMan.get("soundfont").c_str();
diff --git a/base/commandLine.cpp b/base/commandLine.cpp
index 44007c494a..b87ec4453f 100644
--- a/base/commandLine.cpp
+++ b/base/commandLine.cpp
@@ -239,6 +239,24 @@ void registerDefaults() {
ConfMan.registerDefault("gui_saveload_chooser", "grid");
ConfMan.registerDefault("gui_saveload_last_pos", "0");
+
+#ifdef USE_FLUIDSYNTH
+ // FluidSynth settings. All multiplied by 100, except reverb width
+ // which is multiplied by 10, and chorus number which is an integer
+ // to begin with.
+ ConfMan.registerDefault("fluidsynth_chorus_nr", 3);
+ ConfMan.registerDefault("fluidsynth_chorus_level", 200);
+ ConfMan.registerDefault("fluidsynth_chorus_speed", 30);
+ ConfMan.registerDefault("fluidsynth_chorus_depth", 800);
+ ConfMan.registerDefault("fluidsynth_chorus_waveform", "sine");
+
+ ConfMan.registerDefault("fluidsynth_reverb_roomsize", 20);
+ ConfMan.registerDefault("fluidsynth_reverb_damping", 0);
+ ConfMan.registerDefault("fluidsynth_reverb_width", 5);
+ ConfMan.registerDefault("fluidsynth_reverb_level", 90);
+
+ ConfMan.registerDefault("fluidsynth_misc_interpolation", "4th");
+#endif
}
//
diff --git a/gui/ThemeEngine.h b/gui/ThemeEngine.h
index 6fb93d3b46..18eed5f2e6 100644
--- a/gui/ThemeEngine.h
+++ b/gui/ThemeEngine.h
@@ -35,7 +35,7 @@
#include "graphics/pixelformat.h"
-#define SCUMMVM_THEME_VERSION_STR "SCUMMVM_STX0.8.16"
+#define SCUMMVM_THEME_VERSION_STR "SCUMMVM_STX0.8.17"
class OSystem;
diff --git a/gui/fluidsynth-dialog.cpp b/gui/fluidsynth-dialog.cpp
new file mode 100644
index 0000000000..c7e646e5f3
--- /dev/null
+++ b/gui/fluidsynth-dialog.cpp
@@ -0,0 +1,341 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#include "gui/fluidsynth-dialog.h"
+#include "gui/widgets/tab.h"
+#include "gui/widgets/popup.h"
+
+#include "common/config-manager.h"
+#include "common/translation.h"
+#include "common/debug.h"
+
+namespace GUI {
+
+enum {
+ kOverrideChorusCmd = 'ocho',
+ kChorusVoiceCountChangedCmd = 'cvcc',
+ kChorusLevelChangedCmd = 'clec',
+ kChorusSpeedChangedCmd = 'cspc',
+ kChorusDepthChangedCmd = 'cdec',
+
+ kOverrideReverbCmd = 'orev',
+ kReverbRoomSizeChangedCmd = 'rrsc',
+ kReverbDampingChangedCmd = 'rdac',
+ kReverbWidthChangedCmd = 'rwic',
+ kReverbLevelChangedCmd = 'rlec'
+};
+
+enum {
+ kWaveFormTypeSine = 0,
+ kWaveFormTypeTriangle = 1
+};
+
+enum {
+ kInterpolationNone = 0,
+ kInterpolationLinear = 1,
+ kInterpolation4thOrder = 2,
+ kInterpolation7thOrder = 3
+};
+
+FluidSynthSettingsDialog::FluidSynthSettingsDialog()
+ : Dialog("FluidSynthSettings") {
+ _domain = Common::ConfigManager::kApplicationDomain;
+
+ _tabWidget = new TabWidget(this, "FluidSynthSettings.TabWidget");
+
+ _tabWidget->addTab(_("Chorus"));
+
+ _chorusOverride = new CheckboxWidget(_tabWidget, "FluidSynthSettings_Chorus.EnableTabCheckbox", _("Override chorus settings"), 0, kOverrideChorusCmd);
+
+ _chorusVoiceCountDesc = new StaticTextWidget(_tabWidget, "FluidSynthSettings_Chorus.VoiceCountText", _("Voice count:"));
+ _chorusVoiceCountSlider = new SliderWidget(_tabWidget, "FluidSynthSettings_Chorus.VoiceCountSlider", 0, kChorusVoiceCountChangedCmd);
+ _chorusVoiceCountSlider->setMinValue(0);
+ _chorusVoiceCountSlider->setMaxValue(99);
+ _chorusVoiceCountLabel = new StaticTextWidget(_tabWidget, "FluidSynthSettings_Chorus.VoiceCountLabel", "3");
+
+ _chorusLevelDesc = new StaticTextWidget(_tabWidget, "FluidSynthSettings_Chorus.LevelText", _("Level:"));
+ _chorusLevelSlider = new SliderWidget(_tabWidget, "FluidSynthSettings_Chorus.LevelSlider", 0, kChorusLevelChangedCmd);
+ _chorusLevelSlider->setMinValue(0);
+ _chorusLevelSlider->setMaxValue(1000);
+ _chorusLevelLabel = new StaticTextWidget(_tabWidget, "FluidSynthSettings_Chorus.LevelLabel", "2.00");
+
+ _chorusSpeedDesc = new StaticTextWidget(_tabWidget, "FluidSynthSettings_Chorus.SpeedText", _("Speed (Hz):"));
+ _chorusSpeedSlider = new SliderWidget(_tabWidget, "FluidSynthSettings_Chorus.SpeedSlider", 0, kChorusSpeedChangedCmd);
+ _chorusSpeedSlider->setMinValue(29);
+ _chorusSpeedSlider->setMaxValue(500);
+ _chorusSpeedSlider->setValue(29);
+ _chorusSpeedLabel = new StaticTextWidget(_tabWidget, "FluidSynthSettings_Chorus.SpeedLabel", "0.30");
+
+ _chorusDepthDesc = new StaticTextWidget(_tabWidget, "FluidSynthSettings_Chorus.DepthText", _("Depth:"));
+ _chorusDepthSlider = new SliderWidget(_tabWidget, "FluidSynthSettings_Chorus.DepthSlider", 0, kChorusDepthChangedCmd);
+ _chorusDepthSlider->setMinValue(0);
+ _chorusDepthSlider->setMaxValue(2100);
+ _chorusDepthLabel = new StaticTextWidget(_tabWidget, "FluidSynthSettings_Chorus.DepthLabel", "8.00");
+
+ _chorusWaveFormTypePopUpDesc = new StaticTextWidget(_tabWidget, "FluidSynthSettings_Chorus.WaveFormTypeText", _("Waveform type:"));
+ _chorusWaveFormTypePopUp = new PopUpWidget(_tabWidget, "FluidSynthSettings_Chorus.WaveFormType");
+
+ _chorusWaveFormTypePopUp->appendEntry(_("Sine"), kWaveFormTypeSine);
+ _chorusWaveFormTypePopUp->appendEntry(_("Triangle"), kWaveFormTypeTriangle);
+
+ _tabWidget->addTab(_("Reverb"));
+
+ _reverbOverride = new CheckboxWidget(_tabWidget, "FluidSynthSettings_Reverb.EnableTabCheckbox", _("Override reverb settings"), 0, kOverrideReverbCmd);
+
+ _reverbRoomSizeDesc = new StaticTextWidget(_tabWidget, "FluidSynthSettings_Reverb.RoomSizeText", _("Room size:"));
+ _reverbRoomSizeSlider = new SliderWidget(_tabWidget, "FluidSynthSettings_Reverb.RoomSizeSlider", 0, kReverbRoomSizeChangedCmd);
+ _reverbRoomSizeSlider->setMinValue(0);
+ _reverbRoomSizeSlider->setMaxValue(120);
+ _reverbRoomSizeLabel = new StaticTextWidget(_tabWidget, "FluidSynthSettings_Reverb.RoomSizeLabel", "0.20");
+
+ _reverbDampingDesc = new StaticTextWidget(_tabWidget, "FluidSynthSettings_Reverb.DampingText", _("Damping:"));
+ _reverbDampingSlider = new SliderWidget(_tabWidget, "FluidSynthSettings_Reverb.DampingSlider", 0, kReverbDampingChangedCmd);
+ _reverbDampingSlider->setMinValue(0);
+ _reverbDampingSlider->setMaxValue(100);
+ _reverbDampingLabel = new StaticTextWidget(_tabWidget, "FluidSynthSettings_Reverb.DampingLabel", "0.00");
+
+ _reverbWidthDesc = new StaticTextWidget(_tabWidget, "FluidSynthSettings_Reverb.WidthText", _("Width:"));
+ _reverbWidthSlider = new SliderWidget(_tabWidget, "FluidSynthSettings_Reverb.WidthSlider", 0, kReverbWidthChangedCmd);
+ _reverbWidthSlider->setMinValue(0);
+ _reverbWidthSlider->setMaxValue(1000);
+ _reverbWidthLabel = new StaticTextWidget(_tabWidget, "FluidSynthSettings_Reverb.WidthLabel", "0.5");
+
+ _reverbLevelDesc = new StaticTextWidget(_tabWidget, "FluidSynthSettings_Reverb.LevelText", _("Level:"));
+ _reverbLevelSlider = new SliderWidget(_tabWidget, "FluidSynthSettings_Reverb.LevelSlider", 0, kReverbLevelChangedCmd);
+ _reverbLevelSlider->setMinValue(0);
+ _reverbLevelSlider->setMaxValue(100);
+ _reverbLevelLabel = new StaticTextWidget(_tabWidget, "FluidSynthSettings_Reverb.LevelLabel", "0.90");
+
+ _tabWidget->addTab(_("Misc"));
+
+ _miscInterpolationPopUpDesc = new StaticTextWidget(_tabWidget, "FluidSynthSettings_Misc.InterpolationText", _("Interpolation:"));
+ _miscInterpolationPopUp = new PopUpWidget(_tabWidget, "FluidSynthSettings_Misc.Interpolation");
+
+ _miscInterpolationPopUp->appendEntry(_("None (fastest)"), kInterpolationNone);
+ _miscInterpolationPopUp->appendEntry(_("Linear"), kInterpolationLinear);
+ _miscInterpolationPopUp->appendEntry(_("Fourth-order"), kInterpolation4thOrder);
+ _miscInterpolationPopUp->appendEntry(_("Seventh-order"), kInterpolation7thOrder);
+
+ _tabWidget->setActiveTab(0);
+
+ new ButtonWidget(this, "FluidSynthSettings.Cancel", _("Cancel"), 0, kCloseCmd);
+ new ButtonWidget(this, "FluidSynthSettings.Ok", _("OK"), 0, kOKCmd);
+}
+
+FluidSynthSettingsDialog::~FluidSynthSettingsDialog() {
+}
+
+void FluidSynthSettingsDialog::open() {
+ Dialog::open();
+
+ // Reset result value
+ setResult(0);
+
+ bool e;
+
+ e = ConfMan.hasKey("fluidsynth_chorus_nr", _domain) ||
+ ConfMan.hasKey("fluidsynth_chorus_level", _domain) ||
+ ConfMan.hasKey("fluidsynth_chorus_speed", _domain) ||
+ ConfMan.hasKey("fluidsynth_chorus_depth", _domain) ||
+ ConfMan.hasKey("fluidsynth_chorus_waveform", _domain);
+ _chorusOverride->setState(e);
+
+ e = ConfMan.hasKey("fluidsynth_reverb_roomsize", _domain) ||
+ ConfMan.hasKey("fluidsynth_reverb_damping", _domain) ||
+ ConfMan.hasKey("fluidsynth_reverb_width", _domain) ||
+ ConfMan.hasKey("fluidsynth_reverb_level", _domain);
+ _reverbOverride->setState(e);
+
+ _chorusVoiceCountSlider->setValue(ConfMan.getInt("fluidsynth_chorus_nr", _domain));
+ _chorusVoiceCountLabel->setLabel(Common::String::format("%d", _chorusVoiceCountSlider->getValue()));
+ _chorusLevelSlider->setValue(ConfMan.getInt("fluidsynth_chorus_level", _domain));
+ _chorusLevelLabel->setLabel(Common::String::format("%.2f", (double)_chorusLevelSlider->getValue() / 100.0));
+ _chorusSpeedSlider->setValue(ConfMan.getInt("fluidsynth_chorus_speed", _domain));
+ _chorusSpeedLabel->setLabel(Common::String::format("%.2f", (double)_chorusSpeedSlider->getValue() / 100.0));
+ _chorusDepthSlider->setValue(ConfMan.getInt("fluidsynth_chorus_depth", _domain));
+ _chorusDepthLabel->setLabel(Common::String::format("%.2f", (double)_chorusDepthSlider->getValue() / 100.0));
+
+ Common::String waveForm = ConfMan.get("fluidsynth_chorus_waveform", _domain);
+ if (waveForm == "sine") {
+ _chorusWaveFormTypePopUp->setSelectedTag(kWaveFormTypeSine);
+ } else if (waveForm == "triangle") {
+ _chorusWaveFormTypePopUp->setSelectedTag(kWaveFormTypeTriangle);
+ }
+
+ _reverbRoomSizeSlider->setValue(ConfMan.getInt("fluidsynth_reverb_roomsize", _domain));
+ _reverbRoomSizeLabel->setLabel(Common::String::format("%.2f", (double)_reverbRoomSizeSlider->getValue() / 100.0));
+ _reverbDampingSlider->setValue(ConfMan.getInt("fluidsynth_reverb_damping", _domain));
+ _reverbDampingLabel->setLabel(Common::String::format("%.2f", (double)_reverbDampingSlider->getValue() / 100.0));
+ _reverbWidthSlider->setValue(ConfMan.getInt("fluidsynth_reverb_width", _domain));
+ _reverbWidthLabel->setLabel(Common::String::format("%.2f", (double)_reverbWidthSlider->getValue() / 10.0));
+ _reverbLevelSlider->setValue(ConfMan.getInt("fluidsynth_reverb_level", _domain));
+ _reverbLevelLabel->setLabel(Common::String::format("%.2f", (double)_reverbLevelSlider->getValue() / 100.0));
+
+ Common::String interpolation = ConfMan.get("fluidsynth_misc_interpolation", _domain);
+ if (interpolation == "none") {
+ _miscInterpolationPopUp->setSelectedTag(kInterpolationNone);
+ } else if (interpolation == "linear") {
+ _miscInterpolationPopUp->setSelectedTag(kInterpolationLinear);
+ } else if (interpolation == "4th") {
+ _miscInterpolationPopUp->setSelectedTag(kInterpolation4thOrder);
+ } else if (interpolation == "7th") {
+ _miscInterpolationPopUp->setSelectedTag(kInterpolation7thOrder);
+ }
+}
+
+void FluidSynthSettingsDialog::close() {
+ if (getResult()) {
+ if (_chorusOverride->getState()) {
+ ConfMan.setInt("fluidsynth_chorus_nr", _chorusVoiceCountSlider->getValue(), _domain);
+ ConfMan.setInt("fluidsynth_chorus_level", _chorusLevelSlider->getValue(), _domain);
+ ConfMan.setInt("fluidsynth_chorus_speed", _chorusSpeedSlider->getValue(), _domain);
+ ConfMan.setInt("fluidsynth_chorus_depth", _chorusDepthSlider->getValue(), _domain);
+
+ uint32 waveForm = _chorusWaveFormTypePopUp->getSelectedTag();
+ if (waveForm == kWaveFormTypeSine) {
+ ConfMan.set("fluidsynth_chorus_waveform", "sine", _domain);
+ } else if (waveForm == kWaveFormTypeTriangle) {
+ ConfMan.set("fluidsynth_chorus_waveform", "triangle", _domain);
+ } else {
+ ConfMan.removeKey("fluidsynth_chorus_waveform", _domain);
+ }
+ } else {
+ ConfMan.removeKey("fluidsynth_chorus_nr", _domain);
+ ConfMan.removeKey("fluidsynth_chorus_level", _domain);
+ ConfMan.removeKey("fluidsynth_chorus_speed", _domain);
+ ConfMan.removeKey("fluidsynth_chorus_depth", _domain);
+ ConfMan.removeKey("fluidsynth_chorus_waveform", _domain);
+ }
+
+ if (_reverbOverride->getState()) {
+ ConfMan.setInt("fluidsynth_reverb_roomsize", _reverbRoomSizeSlider->getValue(), _domain);
+ ConfMan.setInt("fluidsynth_reverb_damping", _reverbDampingSlider->getValue(), _domain);
+ ConfMan.setInt("fluidsynth_reverb_width", _reverbWidthSlider->getValue(), _domain);
+ ConfMan.setInt("fluidsynth_reverb_level", _reverbLevelSlider->getValue(), _domain);
+ } else {
+ ConfMan.removeKey("fluidsynth_reverb_roomsize", _domain);
+ ConfMan.removeKey("fluidsynth_reverb_damping", _domain);
+ ConfMan.removeKey("fluidsynth_reverb_width", _domain);
+ ConfMan.removeKey("fluidsynth_reverb_level", _domain);
+ }
+
+ uint32 interpolation = _miscInterpolationPopUp->getSelectedTag();
+ if (interpolation == kInterpolationNone) {
+ ConfMan.set("fluidsynth_misc_interpolation", "none", _domain);
+ } else if (interpolation == kInterpolationLinear) {
+ ConfMan.set("fluidsynth_misc_interpolation", "linear", _domain);
+ } else if (interpolation == kInterpolation4thOrder) {
+ ConfMan.set("fluidsynth_misc_interpolation", "4th", _domain);
+ } else if (interpolation == kInterpolation7thOrder) {
+ ConfMan.set("fluidsynth_misc_interpolation", "7th", _domain);
+ } else {
+ ConfMan.removeKey("fluidsynth_misc_interpolation", _domain);
+ }
+
+ // The main options dialog is responsible for writing the config file.
+ }
+
+ Dialog::close();
+}
+
+void FluidSynthSettingsDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 data) {
+ switch (cmd) {
+ case kOverrideChorusCmd:
+ setChorusSettingsState(data);
+ break;
+ case kChorusVoiceCountChangedCmd:
+ _chorusVoiceCountLabel->setLabel(Common::String::format("%d", _chorusVoiceCountSlider->getValue()));
+ _chorusVoiceCountLabel->draw();
+ break;
+ case kChorusLevelChangedCmd:
+ _chorusLevelLabel->setLabel(Common::String::format("%.2f", (double)_chorusLevelSlider->getValue() / 100.0));
+ _chorusLevelLabel->draw();
+ break;
+ case kChorusSpeedChangedCmd:
+ _chorusSpeedLabel->setLabel(Common::String::format("%.2f", (double)_chorusSpeedSlider->getValue() / 100.0));
+ _chorusSpeedLabel->draw();
+ break;
+ case kChorusDepthChangedCmd:
+ _chorusDepthLabel->setLabel(Common::String::format("%.2f", (double)_chorusDepthSlider->getValue() / 100.0));
+ _chorusDepthLabel->draw();
+ break;
+ case kOverrideReverbCmd:
+ setReverbSettingsState(data);
+ break;
+ case kReverbRoomSizeChangedCmd:
+ _reverbRoomSizeLabel->setLabel(Common::String::format("%.2f", (double)_reverbRoomSizeSlider->getValue() / 100.0));
+ _reverbRoomSizeLabel->draw();
+ break;
+ case kReverbDampingChangedCmd:
+ _reverbDampingLabel->setLabel(Common::String::format("%.2f", (double)_reverbDampingSlider->getValue() / 100.0));
+ _reverbDampingLabel->draw();
+ break;
+ case kReverbWidthChangedCmd:
+ _reverbWidthLabel->setLabel(Common::String::format("%.1f", (double)_reverbWidthSlider->getValue() / 10.0));
+ _reverbWidthLabel->draw();
+ break;
+ case kReverbLevelChangedCmd:
+ _reverbLevelLabel->setLabel(Common::String::format("%.2f", (double)_reverbLevelSlider->getValue() / 100.0));
+ _reverbLevelLabel->draw();
+ break;
+ case kOKCmd:
+ setResult(1);
+ close();
+ break;
+ default:
+ Dialog::handleCommand(sender, cmd, data);
+ break;
+ }
+}
+
+void FluidSynthSettingsDialog::setChorusSettingsState(bool enabled) {
+ _chorusVoiceCountDesc->setEnabled(enabled);
+ _chorusVoiceCountSlider->setEnabled(enabled);
+ _chorusVoiceCountLabel->setEnabled(enabled);
+ _chorusLevelDesc->setEnabled(enabled);
+ _chorusLevelSlider->setEnabled(enabled);
+ _chorusLevelLabel->setEnabled(enabled);
+ _chorusSpeedDesc->setEnabled(enabled);
+ _chorusSpeedSlider->setEnabled(enabled);
+ _chorusSpeedLabel->setEnabled(enabled);
+ _chorusDepthDesc->setEnabled(enabled);
+ _chorusDepthSlider->setEnabled(enabled);
+ _chorusDepthLabel->setEnabled(enabled);
+ _chorusWaveFormTypePopUpDesc->setEnabled(enabled);
+ _chorusWaveFormTypePopUp->setEnabled(enabled);
+}
+
+void FluidSynthSettingsDialog::setReverbSettingsState(bool enabled) {
+ _reverbRoomSizeDesc->setEnabled(enabled);
+ _reverbRoomSizeSlider->setEnabled(enabled);
+ _reverbRoomSizeLabel->setEnabled(enabled);
+ _reverbDampingDesc->setEnabled(enabled);
+ _reverbDampingSlider->setEnabled(enabled);
+ _reverbDampingLabel->setEnabled(enabled);
+ _reverbWidthDesc->setEnabled(enabled);
+ _reverbWidthSlider->setEnabled(enabled);
+ _reverbWidthLabel->setEnabled(enabled);
+ _reverbLevelDesc->setEnabled(enabled);
+ _reverbLevelSlider->setEnabled(enabled);
+ _reverbLevelLabel->setEnabled(enabled);
+}
+
+} // End of namespace GUI
diff --git a/gui/fluidsynth-dialog.h b/gui/fluidsynth-dialog.h
new file mode 100644
index 0000000000..821a4529d4
--- /dev/null
+++ b/gui/fluidsynth-dialog.h
@@ -0,0 +1,98 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef FLUIDSYNTH_DIALOG_H
+#define FLUIDSYNTH_DIALOG_H
+
+#include "common/str.h"
+#include "gui/dialog.h"
+
+namespace GUI {
+
+class TabWidget;
+class CheckboxWidget;
+class SliderWidget;
+class StaticTextWidget;
+class PopUpWidget;
+
+class FluidSynthSettingsDialog : public Dialog {
+public:
+ FluidSynthSettingsDialog();
+ ~FluidSynthSettingsDialog();
+
+ void open();
+ void close();
+ void handleCommand(CommandSender *sender, uint32 cmd, uint32 data);
+
+ void setChorusSettingsState(bool enabled);
+ void setReverbSettingsState(bool enabled);
+
+private:
+ Common::String _domain;
+
+ TabWidget *_tabWidget;
+
+ CheckboxWidget *_chorusOverride;
+
+ StaticTextWidget *_chorusVoiceCountDesc;
+ SliderWidget *_chorusVoiceCountSlider;
+ StaticTextWidget *_chorusVoiceCountLabel;
+
+ StaticTextWidget *_chorusLevelDesc;
+ SliderWidget *_chorusLevelSlider;
+ StaticTextWidget *_chorusLevelLabel;
+
+ StaticTextWidget *_chorusSpeedDesc;
+ SliderWidget *_chorusSpeedSlider;
+ StaticTextWidget *_chorusSpeedLabel;
+
+ StaticTextWidget *_chorusDepthDesc;
+ SliderWidget *_chorusDepthSlider;
+ StaticTextWidget *_chorusDepthLabel;
+
+ StaticTextWidget *_chorusWaveFormTypePopUpDesc;
+ PopUpWidget *_chorusWaveFormTypePopUp;
+
+ CheckboxWidget *_reverbOverride;
+
+ StaticTextWidget *_reverbRoomSizeDesc;
+ SliderWidget *_reverbRoomSizeSlider;
+ StaticTextWidget *_reverbRoomSizeLabel;
+
+ StaticTextWidget *_reverbDampingDesc;
+ SliderWidget *_reverbDampingSlider;
+ StaticTextWidget *_reverbDampingLabel;
+
+ StaticTextWidget *_reverbWidthDesc;
+ SliderWidget *_reverbWidthSlider;
+ StaticTextWidget *_reverbWidthLabel;
+
+ StaticTextWidget *_reverbLevelDesc;
+ SliderWidget *_reverbLevelSlider;
+ StaticTextWidget *_reverbLevelLabel;
+
+ StaticTextWidget *_miscInterpolationPopUpDesc;
+ PopUpWidget *_miscInterpolationPopUp;
+};
+
+} // End of namespace GUI
+
+#endif
diff --git a/gui/module.mk b/gui/module.mk
index a435d8cca7..bda3c88cd5 100644
--- a/gui/module.mk
+++ b/gui/module.mk
@@ -38,5 +38,10 @@ MODULE_OBJS += \
browser.o
endif
+ifdef USE_FLUIDSYNTH
+MODULE_OBJS += \
+ fluidsynth-dialog.o
+endif
+
# Include common rules
include $(srcdir)/rules.mk
diff --git a/gui/options.cpp b/gui/options.cpp
index 4868f1876d..65f26d2ad5 100644
--- a/gui/options.cpp
+++ b/gui/options.cpp
@@ -75,6 +75,12 @@ enum {
};
#endif
+#ifdef USE_FLUIDSYNTH
+enum {
+ kFluidSynthSettingsCmd = 'flst'
+};
+#endif
+
static const char *savePeriodLabels[] = { _s("Never"), _s("every 5 mins"), _s("every 10 mins"), _s("every 15 mins"), _s("every 30 mins"), 0 };
static const int savePeriodValues[] = { 0, 5 * 60, 10 * 60, 15 * 60, 30 * 60, -1 };
static const char *outputRateLabels[] = { _s("<default>"), _s("8 kHz"), _s("11kHz"), _s("22 kHz"), _s("44 kHz"), _s("48 kHz"), 0 };
@@ -119,6 +125,9 @@ void OptionsDialog::init() {
_midiGainDesc = 0;
_midiGainSlider = 0;
_midiGainLabel = 0;
+#ifdef USE_FLUIDSYNTH
+ _fluidSynthSettings = 0;
+#endif
_enableMT32Settings = false;
_mt32Checkbox = 0;
_mt32DevicePopUp = 0;
@@ -863,6 +872,10 @@ void OptionsDialog::addMIDIControls(GuiObject *boss, const Common::String &prefi
_midiGainSlider->setMaxValue(1000);
_midiGainLabel = new StaticTextWidget(boss, prefix + "mcMidiGainLabel", "1.00");
+#ifdef USE_FLUIDSYNTH
+ _fluidSynthSettings = new ButtonWidget(boss, prefix + "mcFluidSynthSettings", _("FluidSynth Settings"), 0, kFluidSynthSettingsCmd);
+#endif
+
_enableMIDISettings = true;
}
@@ -1231,12 +1244,20 @@ GlobalOptionsDialog::GlobalOptionsDialog()
#ifdef SMALL_SCREEN_DEVICE
_keysDialog = new KeysDialog();
#endif
+
+#ifdef USE_FLUIDSYNTH
+ _fluidSynthSettingsDialog = new FluidSynthSettingsDialog();
+#endif
}
GlobalOptionsDialog::~GlobalOptionsDialog() {
#ifdef SMALL_SCREEN_DEVICE
delete _keysDialog;
#endif
+
+#ifdef USE_FLUIDSYNTH
+ delete _fluidSynthSettingsDialog;
+#endif
}
void GlobalOptionsDialog::open() {
@@ -1466,6 +1487,11 @@ void GlobalOptionsDialog::handleCommand(CommandSender *sender, uint32 cmd, uint3
_keysDialog->runModal();
break;
#endif
+#ifdef USE_FLUIDSYNTH
+ case kFluidSynthSettingsCmd:
+ _fluidSynthSettingsDialog->runModal();
+ break;
+#endif
default:
OptionsDialog::handleCommand(sender, cmd, data);
}
diff --git a/gui/options.h b/gui/options.h
index def56cfa35..eb4512677e 100644
--- a/gui/options.h
+++ b/gui/options.h
@@ -32,6 +32,10 @@
#include "gui/KeysDialog.h"
#endif
+#ifdef USE_FLUIDSYNTH
+#include "gui/fluidsynth-dialog.h"
+#endif
+
namespace GUI {
class CheckboxWidget;
@@ -131,6 +135,9 @@ private:
StaticTextWidget *_midiGainDesc;
SliderWidget *_midiGainSlider;
StaticTextWidget *_midiGainLabel;
+#ifdef USE_FLUIDSYNTH
+ ButtonWidget *_fluidSynthSettings;
+#endif
//
// MT-32 controls
@@ -208,6 +215,9 @@ protected:
#ifdef SMALL_SCREEN_DEVICE
KeysDialog *_keysDialog;
#endif
+#ifdef USE_FLUIDSYNTH
+ FluidSynthSettingsDialog *_fluidSynthSettingsDialog;
+#endif
StaticTextWidget *_savePath;
ButtonWidget *_savePathClearButton;
StaticTextWidget *_themePath;
diff --git a/gui/themes/default.inc b/gui/themes/default.inc
index 7f565eb05d..e5a31776a9 100644
--- a/gui/themes/default.inc
+++ b/gui/themes/default.inc
@@ -891,7 +891,7 @@
"</layout> "
"</dialog> "
"<dialog name='GlobalOptions_MIDI' overlays='Dialog.GlobalOptions.TabWidget'> "
-"<layout type='vertical' padding='16,16,16,16' spacing='8'> "
+"<layout type='vertical' padding='16,16,16,16' spacing='6'> "
"<layout type='horizontal' padding='0,0,0,0' spacing='6' center='true'> "
"<widget name='auPrefGmPopupDesc' "
"type='OptionsLabel' "
@@ -927,6 +927,10 @@
"height='Globals.Line.Height' "
"/> "
"</layout> "
+"<widget name='mcFluidSynthSettings' "
+"width='150' "
+"height='Globals.Button.Height' "
+"/> "
"</layout> "
"</dialog> "
"<dialog name='GlobalOptions_MT32' overlays='Dialog.GlobalOptions.TabWidget'> "
@@ -1359,6 +1363,150 @@
"</layout> "
"</layout> "
"</dialog> "
+"<dialog name='FluidSynthSettings' overlays='GlobalOptions' shading='dim'> "
+"<layout type='vertical' padding='0,0,0,0'> "
+"<widget name='TabWidget'/> "
+"<layout type='horizontal' padding='8,8,8,8'> "
+"<space/> "
+"<widget name='Cancel' "
+"type='Button' "
+"/> "
+"<widget name='Ok' "
+"type='Button' "
+"/> "
+"</layout> "
+"</layout> "
+"</dialog> "
+"<dialog name='FluidSynthSettings_Chorus' overlays='Dialog.FluidSynthSettings.TabWidget'> "
+"<layout type='vertical' padding='8,8,8,8' spacing='6'> "
+"<widget name='EnableTabCheckbox' "
+"type='Checkbox' "
+"/> "
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' center='true'> "
+"<widget name='VoiceCountText' "
+"type='OptionsLabel' "
+"/> "
+"<widget name='VoiceCountSlider' "
+"type='Slider' "
+"/> "
+"<widget name='VoiceCountLabel' "
+"width='32' "
+"height='Globals.Line.Height' "
+"/> "
+"</layout> "
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' center='true'> "
+"<widget name='LevelText' "
+"type='OptionsLabel' "
+"/> "
+"<widget name='LevelSlider' "
+"type='Slider' "
+"/> "
+"<widget name='LevelLabel' "
+"width='32' "
+"height='Globals.Line.Height' "
+"/> "
+"</layout> "
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' center='true'> "
+"<widget name='SpeedText' "
+"type='OptionsLabel' "
+"/> "
+"<widget name='SpeedSlider' "
+"type='Slider' "
+"/> "
+"<widget name='SpeedLabel' "
+"width='32' "
+"height='Globals.Line.Height' "
+"/> "
+"</layout> "
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' center='true'> "
+"<widget name='DepthText' "
+"type='OptionsLabel' "
+"/> "
+"<widget name='DepthSlider' "
+"type='Slider' "
+"/> "
+"<widget name='DepthLabel' "
+"width='32' "
+"height='Globals.Line.Height' "
+"/> "
+"</layout> "
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' center='true'> "
+"<widget name='WaveFormTypeText' "
+"type='OptionsLabel' "
+"/> "
+"<widget name='WaveFormType' "
+"type='PopUp' "
+"/> "
+"</layout> "
+"</layout> "
+"</dialog> "
+"<dialog name='FluidSynthSettings_Reverb' overlays='Dialog.FluidSynthSettings.TabWidget'> "
+"<layout type='vertical' padding='8,8,8,8' spacing='6'> "
+"<widget name='EnableTabCheckbox' "
+"type='Checkbox' "
+"/> "
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' center='true'> "
+"<widget name='RoomSizeText' "
+"type='OptionsLabel' "
+"/> "
+"<widget name='RoomSizeSlider' "
+"type='Slider' "
+"/> "
+"<widget name='RoomSizeLabel' "
+"width='32' "
+"height='Globals.Line.Height' "
+"/> "
+"</layout> "
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' center='true'> "
+"<widget name='DampingText' "
+"type='OptionsLabel' "
+"/> "
+"<widget name='DampingSlider' "
+"type='Slider' "
+"/> "
+"<widget name='DampingLabel' "
+"width='32' "
+"height='Globals.Line.Height' "
+"/> "
+"</layout> "
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' center='true'> "
+"<widget name='WidthText' "
+"type='OptionsLabel' "
+"/> "
+"<widget name='WidthSlider' "
+"type='Slider' "
+"/> "
+"<widget name='WidthLabel' "
+"width='32' "
+"height='Globals.Line.Height' "
+"/> "
+"</layout> "
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' center='true'> "
+"<widget name='LevelText' "
+"type='OptionsLabel' "
+"/> "
+"<widget name='LevelSlider' "
+"type='Slider' "
+"/> "
+"<widget name='LevelLabel' "
+"width='32' "
+"height='Globals.Line.Height' "
+"/> "
+"</layout> "
+"</layout> "
+"</dialog> "
+"<dialog name='FluidSynthSettings_Misc' overlays='Dialog.FluidSynthSettings.TabWidget'> "
+"<layout type='vertical' padding='8,8,8,8' spacing='6'> "
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' center='true'> "
+"<widget name='InterpolationText' "
+"type='OptionsLabel' "
+"/> "
+"<widget name='Interpolation' "
+"type='PopUp' "
+"/> "
+"</layout> "
+"</layout> "
+"</dialog> "
"<dialog name='SaveLoadChooser' overlays='screen' inset='8' shading='dim'> "
"<layout type='vertical' padding='8,8,8,8' center='true'> "
"<widget name='Title' height='Globals.Line.Height'/> "
@@ -1905,6 +2053,10 @@
"height='Globals.Line.Height' "
"/> "
"</layout> "
+"<widget name='mcFluidSynthSettings' "
+"width='200' "
+"height='Globals.Button.Height' "
+"/> "
"</layout> "
"</dialog> "
"<dialog name='GlobalOptions_MT32' overlays='Dialog.GlobalOptions.TabWidget'> "
@@ -2323,6 +2475,150 @@
"</layout> "
"</layout> "
"</dialog> "
+"<dialog name='FluidSynthSettings' overlays='GlobalOptions' shading='dim'> "
+"<layout type='vertical' padding='0,0,0,0'> "
+"<widget name='TabWidget'/> "
+"<layout type='horizontal' padding='16,16,16,16'> "
+"<space/> "
+"<widget name='Cancel' "
+"type='Button' "
+"/> "
+"<widget name='Ok' "
+"type='Button' "
+"/> "
+"</layout> "
+"</layout> "
+"</dialog> "
+"<dialog name='FluidSynthSettings_Chorus' overlays='Dialog.FluidSynthSettings.TabWidget'> "
+"<layout type='vertical' padding='16,16,16,16' spacing='8'> "
+"<widget name='EnableTabCheckbox' "
+"type='Checkbox' "
+"/> "
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' center='true'> "
+"<widget name='VoiceCountText' "
+"type='OptionsLabel' "
+"/> "
+"<widget name='VoiceCountSlider' "
+"type='Slider' "
+"/> "
+"<widget name='VoiceCountLabel' "
+"width='32' "
+"height='Globals.Line.Height' "
+"/> "
+"</layout> "
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' center='true'> "
+"<widget name='LevelText' "
+"type='OptionsLabel' "
+"/> "
+"<widget name='LevelSlider' "
+"type='Slider' "
+"/> "
+"<widget name='LevelLabel' "
+"width='32' "
+"height='Globals.Line.Height' "
+"/> "
+"</layout> "
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' center='true'> "
+"<widget name='SpeedText' "
+"type='OptionsLabel' "
+"/> "
+"<widget name='SpeedSlider' "
+"type='Slider' "
+"/> "
+"<widget name='SpeedLabel' "
+"width='32' "
+"height='Globals.Line.Height' "
+"/> "
+"</layout> "
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' center='true'> "
+"<widget name='DepthText' "
+"type='OptionsLabel' "
+"/> "
+"<widget name='DepthSlider' "
+"type='Slider' "
+"/> "
+"<widget name='DepthLabel' "
+"width='32' "
+"height='Globals.Line.Height' "
+"/> "
+"</layout> "
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' center='true'> "
+"<widget name='WaveFormTypeText' "
+"type='OptionsLabel' "
+"/> "
+"<widget name='WaveFormType' "
+"type='PopUp' "
+"/> "
+"</layout> "
+"</layout> "
+"</dialog> "
+"<dialog name='FluidSynthSettings_Reverb' overlays='Dialog.FluidSynthSettings.TabWidget'> "
+"<layout type='vertical' padding='16,16,16,16' spacing='8'> "
+"<widget name='EnableTabCheckbox' "
+"type='Checkbox' "
+"/> "
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' center='true'> "
+"<widget name='RoomSizeText' "
+"type='OptionsLabel' "
+"/> "
+"<widget name='RoomSizeSlider' "
+"type='Slider' "
+"/> "
+"<widget name='RoomSizeLabel' "
+"width='32' "
+"height='Globals.Line.Height' "
+"/> "
+"</layout> "
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' center='true'> "
+"<widget name='DampingText' "
+"type='OptionsLabel' "
+"/> "
+"<widget name='DampingSlider' "
+"type='Slider' "
+"/> "
+"<widget name='DampingLabel' "
+"width='32' "
+"height='Globals.Line.Height' "
+"/> "
+"</layout> "
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' center='true'> "
+"<widget name='WidthText' "
+"type='OptionsLabel' "
+"/> "
+"<widget name='WidthSlider' "
+"type='Slider' "
+"/> "
+"<widget name='WidthLabel' "
+"width='32' "
+"height='Globals.Line.Height' "
+"/> "
+"</layout> "
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' center='true'> "
+"<widget name='LevelText' "
+"type='OptionsLabel' "
+"/> "
+"<widget name='LevelSlider' "
+"type='Slider' "
+"/> "
+"<widget name='LevelLabel' "
+"width='32' "
+"height='Globals.Line.Height' "
+"/> "
+"</layout> "
+"</layout> "
+"</dialog> "
+"<dialog name='FluidSynthSettings_Misc' overlays='Dialog.FluidSynthSettings.TabWidget'> "
+"<layout type='vertical' padding='16,16,16,16' spacing='8'> "
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' center='true'> "
+"<widget name='InterpolationText' "
+"type='OptionsLabel' "
+"/> "
+"<widget name='Interpolation' "
+"type='PopUp' "
+"/> "
+"</layout> "
+"</layout> "
+"</dialog> "
"<dialog name='SaveLoadChooser' overlays='screen' inset='8' shading='dim'> "
"<layout type='vertical' padding='8,8,8,32' center='true'> "
"<layout type='horizontal' padding='0,0,0,0'> "
diff --git a/gui/themes/scummclassic.zip b/gui/themes/scummclassic.zip
index 62eae0cd43..95455dfb11 100644
--- a/gui/themes/scummclassic.zip
+++ b/gui/themes/scummclassic.zip
Binary files differ
diff --git a/gui/themes/scummclassic/THEMERC b/gui/themes/scummclassic/THEMERC
index b8937adcb2..98c68d3044 100644
--- a/gui/themes/scummclassic/THEMERC
+++ b/gui/themes/scummclassic/THEMERC
@@ -1 +1 @@
-[SCUMMVM_STX0.8.16:ScummVM Classic Theme:No Author]
+[SCUMMVM_STX0.8.17:ScummVM Classic Theme:No Author]
diff --git a/gui/themes/scummclassic/classic_layout.stx b/gui/themes/scummclassic/classic_layout.stx
index 4a6aae00bc..5891b93c44 100644
--- a/gui/themes/scummclassic/classic_layout.stx
+++ b/gui/themes/scummclassic/classic_layout.stx
@@ -359,6 +359,10 @@
height = 'Globals.Line.Height'
/>
</layout>
+ <widget name = 'mcFluidSynthSettings'
+ width = '200'
+ height = 'Globals.Button.Height'
+ />
</layout>
</dialog>
@@ -794,6 +798,154 @@
</layout>
</dialog>
+ <dialog name = 'FluidSynthSettings' overlays = 'GlobalOptions' shading = 'dim'>
+ <layout type = 'vertical' padding = '0, 0, 0, 0'>
+ <widget name = 'TabWidget'/>
+ <layout type = 'horizontal' padding = '16, 16, 16, 16'>
+ <space/>
+ <widget name = 'Cancel'
+ type = 'Button'
+ />
+ <widget name = 'Ok'
+ type = 'Button'
+ />
+ </layout>
+ </layout>
+ </dialog>
+
+ <dialog name = 'FluidSynthSettings_Chorus' overlays = 'Dialog.FluidSynthSettings.TabWidget'>
+ <layout type = 'vertical' padding = '16, 16, 16, 16' spacing = '8'>
+ <widget name = 'EnableTabCheckbox'
+ type = 'Checkbox'
+ />
+ <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'>
+ <widget name = 'VoiceCountText'
+ type = 'OptionsLabel'
+ />
+ <widget name = 'VoiceCountSlider'
+ type = 'Slider'
+ />
+ <widget name = 'VoiceCountLabel'
+ width = '32'
+ height = 'Globals.Line.Height'
+ />
+ </layout>
+ <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'>
+ <widget name = 'LevelText'
+ type = 'OptionsLabel'
+ />
+ <widget name = 'LevelSlider'
+ type = 'Slider'
+ />
+ <widget name = 'LevelLabel'
+ width = '32'
+ height = 'Globals.Line.Height'
+ />
+ </layout>
+ <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'>
+ <widget name = 'SpeedText'
+ type = 'OptionsLabel'
+ />
+ <widget name = 'SpeedSlider'
+ type = 'Slider'
+ />
+ <widget name = 'SpeedLabel'
+ width = '32'
+ height = 'Globals.Line.Height'
+ />
+ </layout>
+ <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'>
+ <widget name = 'DepthText'
+ type = 'OptionsLabel'
+ />
+ <widget name = 'DepthSlider'
+ type = 'Slider'
+ />
+ <widget name = 'DepthLabel'
+ width = '32'
+ height = 'Globals.Line.Height'
+ />
+ </layout>
+ <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'>
+ <widget name = 'WaveFormTypeText'
+ type = 'OptionsLabel'
+ />
+ <widget name = 'WaveFormType'
+ type = 'PopUp'
+ />
+ </layout>
+ </layout>
+ </dialog>
+
+ <dialog name = 'FluidSynthSettings_Reverb' overlays = 'Dialog.FluidSynthSettings.TabWidget'>
+ <layout type = 'vertical' padding = '16, 16, 16, 16' spacing = '8'>
+ <widget name = 'EnableTabCheckbox'
+ type = 'Checkbox'
+ />
+ <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'>
+ <widget name = 'RoomSizeText'
+ type = 'OptionsLabel'
+ />
+ <widget name = 'RoomSizeSlider'
+ type = 'Slider'
+ />
+ <widget name = 'RoomSizeLabel'
+ width = '32'
+ height = 'Globals.Line.Height'
+ />
+ </layout>
+ <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'>
+ <widget name = 'DampingText'
+ type = 'OptionsLabel'
+ />
+ <widget name = 'DampingSlider'
+ type = 'Slider'
+ />
+ <widget name = 'DampingLabel'
+ width = '32'
+ height = 'Globals.Line.Height'
+ />
+ </layout>
+ <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'>
+ <widget name = 'WidthText'
+ type = 'OptionsLabel'
+ />
+ <widget name = 'WidthSlider'
+ type = 'Slider'
+ />
+ <widget name = 'WidthLabel'
+ width = '32'
+ height = 'Globals.Line.Height'
+ />
+ </layout>
+ <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'>
+ <widget name = 'LevelText'
+ type = 'OptionsLabel'
+ />
+ <widget name = 'LevelSlider'
+ type = 'Slider'
+ />
+ <widget name = 'LevelLabel'
+ width = '32'
+ height = 'Globals.Line.Height'
+ />
+ </layout>
+ </layout>
+ </dialog>
+
+ <dialog name = 'FluidSynthSettings_Misc' overlays = 'Dialog.FluidSynthSettings.TabWidget'>
+ <layout type = 'vertical' padding = '16, 16, 16, 16' spacing = '8'>
+ <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'>
+ <widget name = 'InterpolationText'
+ type = 'OptionsLabel'
+ />
+ <widget name = 'Interpolation'
+ type = 'PopUp'
+ />
+ </layout>
+ </layout>
+ </dialog>
+
<dialog name = 'SaveLoadChooser' overlays = 'screen' inset = '8' shading = 'dim'>
<layout type = 'vertical' padding = '8, 8, 8, 32' center = 'true'>
<layout type = 'horizontal' padding = '0, 0, 0, 0'>
diff --git a/gui/themes/scummclassic/classic_layout_lowres.stx b/gui/themes/scummclassic/classic_layout_lowres.stx
index 57e149b570..c9d576a9cf 100644
--- a/gui/themes/scummclassic/classic_layout_lowres.stx
+++ b/gui/themes/scummclassic/classic_layout_lowres.stx
@@ -321,7 +321,7 @@
</dialog>
<dialog name = 'GlobalOptions_MIDI' overlays = 'Dialog.GlobalOptions.TabWidget'>
- <layout type = 'vertical' padding = '16, 16, 16, 16' spacing = '8'>
+ <layout type = 'vertical' padding = '16, 16, 16, 16' spacing = '6'>
<layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '6' center = 'true'>
<widget name = 'auPrefGmPopupDesc'
type = 'OptionsLabel'
@@ -357,6 +357,10 @@
height = 'Globals.Line.Height'
/>
</layout>
+ <widget name = 'mcFluidSynthSettings'
+ width = '150'
+ height = 'Globals.Button.Height'
+ />
</layout>
</dialog>
@@ -805,6 +809,154 @@
</layout>
</dialog>
+ <dialog name = 'FluidSynthSettings' overlays = 'GlobalOptions' shading = 'dim'>
+ <layout type = 'vertical' padding = '0, 0, 0, 0'>
+ <widget name = 'TabWidget'/>
+ <layout type = 'horizontal' padding = '8, 8, 8, 8'>
+ <space/>
+ <widget name = 'Cancel'
+ type = 'Button'
+ />
+ <widget name = 'Ok'
+ type = 'Button'
+ />
+ </layout>
+ </layout>
+ </dialog>
+
+ <dialog name = 'FluidSynthSettings_Chorus' overlays = 'Dialog.FluidSynthSettings.TabWidget'>
+ <layout type = 'vertical' padding = '8, 8, 8, 8' spacing = '6'>
+ <widget name = 'EnableTabCheckbox'
+ type = 'Checkbox'
+ />
+ <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'>
+ <widget name = 'VoiceCountText'
+ type = 'OptionsLabel'
+ />
+ <widget name = 'VoiceCountSlider'
+ type = 'Slider'
+ />
+ <widget name = 'VoiceCountLabel'
+ width = '32'
+ height = 'Globals.Line.Height'
+ />
+ </layout>
+ <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'>
+ <widget name = 'LevelText'
+ type = 'OptionsLabel'
+ />
+ <widget name = 'LevelSlider'
+ type = 'Slider'
+ />
+ <widget name = 'LevelLabel'
+ width = '32'
+ height = 'Globals.Line.Height'
+ />
+ </layout>
+ <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'>
+ <widget name = 'SpeedText'
+ type = 'OptionsLabel'
+ />
+ <widget name = 'SpeedSlider'
+ type = 'Slider'
+ />
+ <widget name = 'SpeedLabel'
+ width = '32'
+ height = 'Globals.Line.Height'
+ />
+ </layout>
+ <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'>
+ <widget name = 'DepthText'
+ type = 'OptionsLabel'
+ />
+ <widget name = 'DepthSlider'
+ type = 'Slider'
+ />
+ <widget name = 'DepthLabel'
+ width = '32'
+ height = 'Globals.Line.Height'
+ />
+ </layout>
+ <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'>
+ <widget name = 'WaveFormTypeText'
+ type = 'OptionsLabel'
+ />
+ <widget name = 'WaveFormType'
+ type = 'PopUp'
+ />
+ </layout>
+ </layout>
+ </dialog>
+
+ <dialog name = 'FluidSynthSettings_Reverb' overlays = 'Dialog.FluidSynthSettings.TabWidget'>
+ <layout type = 'vertical' padding = '8, 8, 8, 8' spacing = '6'>
+ <widget name = 'EnableTabCheckbox'
+ type = 'Checkbox'
+ />
+ <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'>
+ <widget name = 'RoomSizeText'
+ type = 'OptionsLabel'
+ />
+ <widget name = 'RoomSizeSlider'
+ type = 'Slider'
+ />
+ <widget name = 'RoomSizeLabel'
+ width = '32'
+ height = 'Globals.Line.Height'
+ />
+ </layout>
+ <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'>
+ <widget name = 'DampingText'
+ type = 'OptionsLabel'
+ />
+ <widget name = 'DampingSlider'
+ type = 'Slider'
+ />
+ <widget name = 'DampingLabel'
+ width = '32'
+ height = 'Globals.Line.Height'
+ />
+ </layout>
+ <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'>
+ <widget name = 'WidthText'
+ type = 'OptionsLabel'
+ />
+ <widget name = 'WidthSlider'
+ type = 'Slider'
+ />
+ <widget name = 'WidthLabel'
+ width = '32'
+ height = 'Globals.Line.Height'
+ />
+ </layout>
+ <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'>
+ <widget name = 'LevelText'
+ type = 'OptionsLabel'
+ />
+ <widget name = 'LevelSlider'
+ type = 'Slider'
+ />
+ <widget name = 'LevelLabel'
+ width = '32'
+ height = 'Globals.Line.Height'
+ />
+ </layout>
+ </layout>
+ </dialog>
+
+ <dialog name = 'FluidSynthSettings_Misc' overlays = 'Dialog.FluidSynthSettings.TabWidget'>
+ <layout type = 'vertical' padding = '8, 8, 8, 8' spacing = '6'>
+ <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'>
+ <widget name = 'InterpolationText'
+ type = 'OptionsLabel'
+ />
+ <widget name = 'Interpolation'
+ type = 'PopUp'
+ />
+ </layout>
+ </layout>
+ </dialog>
+
<dialog name = 'SaveLoadChooser' overlays = 'screen' inset = '8' shading = 'dim'>
<layout type = 'vertical' padding = '8, 8, 8, 8' center = 'true'>
<widget name = 'Title' height = 'Globals.Line.Height'/>
diff --git a/gui/themes/scummmodern.zip b/gui/themes/scummmodern.zip
index 38352bcc2f..15c79848be 100644
--- a/gui/themes/scummmodern.zip
+++ b/gui/themes/scummmodern.zip
Binary files differ
diff --git a/gui/themes/scummmodern/THEMERC b/gui/themes/scummmodern/THEMERC
index 52eb683ebd..d62977cee2 100644
--- a/gui/themes/scummmodern/THEMERC
+++ b/gui/themes/scummmodern/THEMERC
@@ -1 +1 @@
-[SCUMMVM_STX0.8.16:ScummVM Modern Theme:No Author]
+[SCUMMVM_STX0.8.17:ScummVM Modern Theme:No Author]
diff --git a/gui/themes/scummmodern/scummmodern_layout.stx b/gui/themes/scummmodern/scummmodern_layout.stx
index d99d7416c2..a6a2da9f37 100644
--- a/gui/themes/scummmodern/scummmodern_layout.stx
+++ b/gui/themes/scummmodern/scummmodern_layout.stx
@@ -373,6 +373,10 @@
height = 'Globals.Line.Height'
/>
</layout>
+ <widget name = 'mcFluidSynthSettings'
+ width = '200'
+ height = 'Globals.Button.Height'
+ />
</layout>
</dialog>
@@ -808,6 +812,154 @@
</layout>
</dialog>
+ <dialog name = 'FluidSynthSettings' overlays = 'GlobalOptions' shading = 'dim'>
+ <layout type = 'vertical' padding = '0, 0, 0, 0'>
+ <widget name = 'TabWidget'/>
+ <layout type = 'horizontal' padding = '16, 16, 16, 16'>
+ <space/>
+ <widget name = 'Cancel'
+ type = 'Button'
+ />
+ <widget name = 'Ok'
+ type = 'Button'
+ />
+ </layout>
+ </layout>
+ </dialog>
+
+ <dialog name = 'FluidSynthSettings_Chorus' overlays = 'Dialog.FluidSynthSettings.TabWidget'>
+ <layout type = 'vertical' padding = '16, 16, 16, 16' spacing = '8'>
+ <widget name = 'EnableTabCheckbox'
+ type = 'Checkbox'
+ />
+ <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'>
+ <widget name = 'VoiceCountText'
+ type = 'OptionsLabel'
+ />
+ <widget name = 'VoiceCountSlider'
+ type = 'Slider'
+ />
+ <widget name = 'VoiceCountLabel'
+ width = '32'
+ height = 'Globals.Line.Height'
+ />
+ </layout>
+ <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'>
+ <widget name = 'LevelText'
+ type = 'OptionsLabel'
+ />
+ <widget name = 'LevelSlider'
+ type = 'Slider'
+ />
+ <widget name = 'LevelLabel'
+ width = '32'
+ height = 'Globals.Line.Height'
+ />
+ </layout>
+ <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'>
+ <widget name = 'SpeedText'
+ type = 'OptionsLabel'
+ />
+ <widget name = 'SpeedSlider'
+ type = 'Slider'
+ />
+ <widget name = 'SpeedLabel'
+ width = '32'
+ height = 'Globals.Line.Height'
+ />
+ </layout>
+ <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'>
+ <widget name = 'DepthText'
+ type = 'OptionsLabel'
+ />
+ <widget name = 'DepthSlider'
+ type = 'Slider'
+ />
+ <widget name = 'DepthLabel'
+ width = '32'
+ height = 'Globals.Line.Height'
+ />
+ </layout>
+ <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'>
+ <widget name = 'WaveFormTypeText'
+ type = 'OptionsLabel'
+ />
+ <widget name = 'WaveFormType'
+ type = 'PopUp'
+ />
+ </layout>
+ </layout>
+ </dialog>
+
+ <dialog name = 'FluidSynthSettings_Reverb' overlays = 'Dialog.FluidSynthSettings.TabWidget'>
+ <layout type = 'vertical' padding = '16, 16, 16, 16' spacing = '8'>
+ <widget name = 'EnableTabCheckbox'
+ type = 'Checkbox'
+ />
+ <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'>
+ <widget name = 'RoomSizeText'
+ type = 'OptionsLabel'
+ />
+ <widget name = 'RoomSizeSlider'
+ type = 'Slider'
+ />
+ <widget name = 'RoomSizeLabel'
+ width = '32'
+ height = 'Globals.Line.Height'
+ />
+ </layout>
+ <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'>
+ <widget name = 'DampingText'
+ type = 'OptionsLabel'
+ />
+ <widget name = 'DampingSlider'
+ type = 'Slider'
+ />
+ <widget name = 'DampingLabel'
+ width = '32'
+ height = 'Globals.Line.Height'
+ />
+ </layout>
+ <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'>
+ <widget name = 'WidthText'
+ type = 'OptionsLabel'
+ />
+ <widget name = 'WidthSlider'
+ type = 'Slider'
+ />
+ <widget name = 'WidthLabel'
+ width = '32'
+ height = 'Globals.Line.Height'
+ />
+ </layout>
+ <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'>
+ <widget name = 'LevelText'
+ type = 'OptionsLabel'
+ />
+ <widget name = 'LevelSlider'
+ type = 'Slider'
+ />
+ <widget name = 'LevelLabel'
+ width = '32'
+ height = 'Globals.Line.Height'
+ />
+ </layout>
+ </layout>
+ </dialog>
+
+ <dialog name = 'FluidSynthSettings_Misc' overlays = 'Dialog.FluidSynthSettings.TabWidget'>
+ <layout type = 'vertical' padding = '16, 16, 16, 16' spacing = '8'>
+ <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'>
+ <widget name = 'InterpolationText'
+ type = 'OptionsLabel'
+ />
+ <widget name = 'Interpolation'
+ type = 'PopUp'
+ />
+ </layout>
+ </layout>
+ </dialog>
+
<dialog name = 'SaveLoadChooser' overlays = 'screen' inset = '8' shading = 'dim'>
<layout type = 'vertical' padding = '8, 8, 8, 32' center = 'true'>
<layout type = 'horizontal' padding = '0, 0, 0, 0'>
diff --git a/gui/themes/scummmodern/scummmodern_layout_lowres.stx b/gui/themes/scummmodern/scummmodern_layout_lowres.stx
index 4fd5bdcf40..7e614caaeb 100644
--- a/gui/themes/scummmodern/scummmodern_layout_lowres.stx
+++ b/gui/themes/scummmodern/scummmodern_layout_lowres.stx
@@ -319,7 +319,7 @@
</dialog>
<dialog name = 'GlobalOptions_MIDI' overlays = 'Dialog.GlobalOptions.TabWidget'>
- <layout type = 'vertical' padding = '16, 16, 16, 16' spacing = '8'>
+ <layout type = 'vertical' padding = '16, 16, 16, 16' spacing = '7'>
<layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '6' center = 'true'>
<widget name = 'auPrefGmPopupDesc'
type = 'OptionsLabel'
@@ -355,6 +355,10 @@
height = 'Globals.Line.Height'
/>
</layout>
+ <widget name = 'mcFluidSynthSettings'
+ width = '150'
+ height = 'Globals.Button.Height'
+ />
</layout>
</dialog>
@@ -804,6 +808,154 @@
</layout>
</dialog>
+ <dialog name = 'FluidSynthSettings' overlays = 'GlobalOptions' shading = 'dim'>
+ <layout type = 'vertical' padding = '0, 0, 0, 0'>
+ <widget name = 'TabWidget'/>
+ <layout type = 'horizontal' padding = '8, 8, 8, 8'>
+ <space/>
+ <widget name = 'Cancel'
+ type = 'Button'
+ />
+ <widget name = 'Ok'
+ type = 'Button'
+ />
+ </layout>
+ </layout>
+ </dialog>
+
+ <dialog name = 'FluidSynthSettings_Chorus' overlays = 'Dialog.FluidSynthSettings.TabWidget'>
+ <layout type = 'vertical' padding = '8, 8, 8, 8' spacing = '6'>
+ <widget name = 'EnableTabCheckbox'
+ type = 'Checkbox'
+ />
+ <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'>
+ <widget name = 'VoiceCountText'
+ type = 'OptionsLabel'
+ />
+ <widget name = 'VoiceCountSlider'
+ type = 'Slider'
+ />
+ <widget name = 'VoiceCountLabel'
+ width = '32'
+ height = 'Globals.Line.Height'
+ />
+ </layout>
+ <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'>
+ <widget name = 'LevelText'
+ type = 'OptionsLabel'
+ />
+ <widget name = 'LevelSlider'
+ type = 'Slider'
+ />
+ <widget name = 'LevelLabel'
+ width = '32'
+ height = 'Globals.Line.Height'
+ />
+ </layout>
+ <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'>
+ <widget name = 'SpeedText'
+ type = 'OptionsLabel'
+ />
+ <widget name = 'SpeedSlider'
+ type = 'Slider'
+ />
+ <widget name = 'SpeedLabel'
+ width = '32'
+ height = 'Globals.Line.Height'
+ />
+ </layout>
+ <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'>
+ <widget name = 'DepthText'
+ type = 'OptionsLabel'
+ />
+ <widget name = 'DepthSlider'
+ type = 'Slider'
+ />
+ <widget name = 'DepthLabel'
+ width = '32'
+ height = 'Globals.Line.Height'
+ />
+ </layout>
+ <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'>
+ <widget name = 'WaveFormTypeText'
+ type = 'OptionsLabel'
+ />
+ <widget name = 'WaveFormType'
+ type = 'PopUp'
+ />
+ </layout>
+ </layout>
+ </dialog>
+
+ <dialog name = 'FluidSynthSettings_Reverb' overlays = 'Dialog.FluidSynthSettings.TabWidget'>
+ <layout type = 'vertical' padding = '8, 8, 8, 8' spacing = '6'>
+ <widget name = 'EnableTabCheckbox'
+ type = 'Checkbox'
+ />
+ <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'>
+ <widget name = 'RoomSizeText'
+ type = 'OptionsLabel'
+ />
+ <widget name = 'RoomSizeSlider'
+ type = 'Slider'
+ />
+ <widget name = 'RoomSizeLabel'
+ width = '32'
+ height = 'Globals.Line.Height'
+ />
+ </layout>
+ <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'>
+ <widget name = 'DampingText'
+ type = 'OptionsLabel'
+ />
+ <widget name = 'DampingSlider'
+ type = 'Slider'
+ />
+ <widget name = 'DampingLabel'
+ width = '32'
+ height = 'Globals.Line.Height'
+ />
+ </layout>
+ <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'>
+ <widget name = 'WidthText'
+ type = 'OptionsLabel'
+ />
+ <widget name = 'WidthSlider'
+ type = 'Slider'
+ />
+ <widget name = 'WidthLabel'
+ width = '32'
+ height = 'Globals.Line.Height'
+ />
+ </layout>
+ <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'>
+ <widget name = 'LevelText'
+ type = 'OptionsLabel'
+ />
+ <widget name = 'LevelSlider'
+ type = 'Slider'
+ />
+ <widget name = 'LevelLabel'
+ width = '32'
+ height = 'Globals.Line.Height'
+ />
+ </layout>
+ </layout>
+ </dialog>
+
+ <dialog name = 'FluidSynthSettings_Misc' overlays = 'Dialog.FluidSynthSettings.TabWidget'>
+ <layout type = 'vertical' padding = '8, 8, 8, 8' spacing = '6'>
+ <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'>
+ <widget name = 'InterpolationText'
+ type = 'OptionsLabel'
+ />
+ <widget name = 'Interpolation'
+ type = 'PopUp'
+ />
+ </layout>
+ </layout>
+ </dialog>
+
<dialog name = 'SaveLoadChooser' overlays = 'screen' inset = '8' shading = 'dim'>
<layout type = 'vertical' padding = '8, 8, 8, 8' center = 'true'>
<widget name = 'Title' height = 'Globals.Line.Height'/>