diff options
| author | Paul Gilbert | 2015-07-24 21:47:05 -0400 | 
|---|---|---|
| committer | Paul Gilbert | 2015-07-24 21:47:05 -0400 | 
| commit | 67d2bf85893e6672374fe41530310c7c894a64ee (patch) | |
| tree | 8952e584429800a3256fb3acaf89892bdaee6915 | |
| parent | 58380d5661cce68823859e83ca9e55ebff0221b3 (diff) | |
| download | scummvm-rg350-67d2bf85893e6672374fe41530310c7c894a64ee.tar.gz scummvm-rg350-67d2bf85893e6672374fe41530310c7c894a64ee.tar.bz2 scummvm-rg350-67d2bf85893e6672374fe41530310c7c894a64ee.zip  | |
SHERLOCK: RT: Fix Options dialog event handling
| -rw-r--r-- | engines/sherlock/detection.cpp | 22 | ||||
| -rw-r--r-- | engines/sherlock/detection_tables.h | 9 | ||||
| -rw-r--r-- | engines/sherlock/sherlock.h | 20 | ||||
| -rw-r--r-- | engines/sherlock/tattoo/tattoo.cpp | 16 | ||||
| -rw-r--r-- | engines/sherlock/tattoo/tattoo.h | 7 | ||||
| -rw-r--r-- | engines/sherlock/tattoo/widget_options.cpp | 41 | ||||
| -rw-r--r-- | engines/sherlock/tattoo/widget_options.h | 1 | 
7 files changed, 82 insertions, 34 deletions
diff --git a/engines/sherlock/detection.cpp b/engines/sherlock/detection.cpp index 35a810efb1..b60facb86d 100644 --- a/engines/sherlock/detection.cpp +++ b/engines/sherlock/detection.cpp @@ -62,6 +62,8 @@ static const PlainGameDescriptor sherlockGames[] = {  #define GAMEOPTION_HELP_STYLE		GUIO_GAMEOPTIONS3  #define GAMEOPTION_PORTRAITS_ON		GUIO_GAMEOPTIONS4  #define GAMEOPTION_WINDOW_STYLE		GUIO_GAMEOPTIONS5 +#define GAMEOPTION_TRANSPARENT_WINDOWS		GUIO_GAMEOPTIONS6 +#define GAMEOPTION_TEXT_WINDOWS		GUIO_GAMEOPTIONS7  static const ADExtraGuiOptionsMap optionsList[] = {  	{ @@ -114,6 +116,26 @@ static const ADExtraGuiOptionsMap optionsList[] = {  		}  	}, +	{ +		GAMEOPTION_TRANSPARENT_WINDOWS, +		{ +			_s("Transparent windows"), +			_s("Show windows with a partially transparent background"), +			"transparent_windows", +			true +		} +	}, + +	{ +		GAMEOPTION_TEXT_WINDOWS, +		{ +			_s("Text windows"), +			_s("Show text windows during conversations"), +			"text_windows", +			true +		} +	}, +  	AD_EXTRA_GUI_OPTIONS_TERMINATOR  }; diff --git a/engines/sherlock/detection_tables.h b/engines/sherlock/detection_tables.h index 991fc2055d..23d98c85c9 100644 --- a/engines/sherlock/detection_tables.h +++ b/engines/sherlock/detection_tables.h @@ -130,7 +130,8 @@ static const SherlockGameDescription gameDescriptions[] = {  			Common::EN_ANY,  			Common::kPlatformDOS,  			ADGF_UNSTABLE, -			GUIO0() +			GUIO4(GAMEOPTION_ORIGINAL_SAVES, GAMEOPTION_HELP_STYLE, GAMEOPTION_TEXT_WINDOWS, +				GAMEOPTION_TRANSPARENT_WINDOWS)  		},  		GType_RoseTattoo  	}, @@ -145,7 +146,8 @@ static const SherlockGameDescription gameDescriptions[] = {  			Common::EN_ANY,  			Common::kPlatformDOS,  			ADGF_UNSTABLE, -			GUIO0() +			GUIO4(GAMEOPTION_ORIGINAL_SAVES, GAMEOPTION_HELP_STYLE, GAMEOPTION_TEXT_WINDOWS, +				GAMEOPTION_TRANSPARENT_WINDOWS)  		},  		GType_RoseTattoo,  	}, @@ -160,7 +162,8 @@ static const SherlockGameDescription gameDescriptions[] = {    			Common::DE_DEU,  			Common::kPlatformDOS,  			ADGF_UNSTABLE, -			GUIO0() +			GUIO4(GAMEOPTION_ORIGINAL_SAVES, GAMEOPTION_HELP_STYLE, GAMEOPTION_TEXT_WINDOWS, +				GAMEOPTION_TRANSPARENT_WINDOWS)  		},  		GType_RoseTattoo,  	}, diff --git a/engines/sherlock/sherlock.h b/engines/sherlock/sherlock.h index 69000e1fbc..5f888f8c3d 100644 --- a/engines/sherlock/sherlock.h +++ b/engines/sherlock/sherlock.h @@ -87,11 +87,6 @@ private:  	 * Handle all player input  	 */  	void handleInput(); - -	/** -	 * Load game configuration esttings -	 */ -	void loadConfig();  protected:  	/**  	 * Does basic initialization of the game engine @@ -106,6 +101,11 @@ protected:  	 * Returns a list of features the game itself supports  	 */  	virtual bool hasFeature(EngineFeature f) const; + +	/** +	 * Load game configuration esttings +	 */ +	virtual void loadConfig();  public:  	const SherlockGameDescription *_gameDescription;  	Animation *_animation; @@ -166,6 +166,11 @@ public:  	virtual void syncSoundSettings();  	/** +	 * Saves game configuration information +	 */ +	virtual void saveConfig(); + +	/**  	 * Returns whether the version is a demo  	 */  	virtual bool isDemo() const; @@ -210,11 +215,6 @@ public:  	void setFlagsDirect(int flagNum);  	/** -	 * Saves game configuration information -	 */ -	void saveConfig(); - -	/**  	 * Synchronize the data for a savegame  	 */  	void synchronize(Serializer &s); diff --git a/engines/sherlock/tattoo/tattoo.cpp b/engines/sherlock/tattoo/tattoo.cpp index e7dd20ada4..028650ddb4 100644 --- a/engines/sherlock/tattoo/tattoo.cpp +++ b/engines/sherlock/tattoo/tattoo.cpp @@ -20,6 +20,7 @@   *   */ +#include "common/config-manager.h"  #include "engines/util.h"  #include "sherlock/tattoo/tattoo.h"  #include "sherlock/tattoo/tattoo_fixed_text.h" @@ -178,6 +179,21 @@ void TattooEngine::doHangManPuzzle() {  	_hangmanWidget.show();  } +void TattooEngine::loadConfig() { +	SherlockEngine::loadConfig(); + +	_transparentMenus = ConfMan.getBool("transparent_windows"); +	_textWindowsOn = ConfMan.getBool("text_windows"); +} + +void TattooEngine::saveConfig() { +	SherlockEngine::saveConfig(); + +	ConfMan.setBool("transparent_windows", _transparentMenus); +	ConfMan.setBool("text_windows", _textWindowsOn); +	ConfMan.flushToDisk(); +} +  } // End of namespace Tattoo  } // End of namespace Sherlock diff --git a/engines/sherlock/tattoo/tattoo.h b/engines/sherlock/tattoo/tattoo.h index 923afa3d90..8a19746a0f 100644 --- a/engines/sherlock/tattoo/tattoo.h +++ b/engines/sherlock/tattoo/tattoo.h @@ -78,6 +78,11 @@ protected:  	 * Starting a scene within the game  	 */  	virtual void startScene(); + +	/** +	 * Load configuration options +	 */ +	virtual void loadConfig();  public:  	bool _runningProlog;  	bool _fastMode, _allowFastMode; @@ -95,7 +100,7 @@ public:  	/**  	 * Save the game configuration  	 */ -	void saveConfig() {} +	virtual void saveConfig();  };  } // End of namespace Tattoo diff --git a/engines/sherlock/tattoo/widget_options.cpp b/engines/sherlock/tattoo/widget_options.cpp index 0135a157c8..eb18a8b03a 100644 --- a/engines/sherlock/tattoo/widget_options.cpp +++ b/engines/sherlock/tattoo/widget_options.cpp @@ -37,23 +37,9 @@ WidgetOptions::WidgetOptions(SherlockEngine *vm) : WidgetBase(vm) {  void WidgetOptions::load() {  	Events &events = *_vm->_events; -	Music &music = *_vm->_music; -	Sound &sound = *_vm->_sound;  	TattooUserInterface &ui = *(TattooUserInterface *)_vm->_ui; -	Common::Point mousePos = events.mousePos(); - -	// Set bounds for the dialog -	Common::String widestString = Common::String::format("%s %s", FIXED(TransparentMenus), FIXED(Off)); -	_bounds = Common::Rect(_surface.stringWidth(widestString) + _surface.widestChar() * 2 + 6, -		(_surface.fontHeight() + 7) * 11 + 3); -	_bounds.moveTo(mousePos.x - _bounds.width() / 2, mousePos.y - _bounds.height() / 2); - -	// Get slider positions -	_midiSliderX = music._musicVolume * (_bounds.width() - _surface.widestChar() * 2) / 255 + _surface.widestChar(); -	_digiSliderX = sound._soundVolume * (_bounds.width() - _surface.widestChar() * 2) / 255 + _surface.widestChar(); +	_centerPos = events.mousePos(); -	// Setup the dialog -	_surface.create(_bounds.width(), _bounds.height());  	render();  	summonWindow(); @@ -127,7 +113,7 @@ void WidgetOptions::handleEvents() {  				_midiSliderX = _bounds.width() - _surface.widestChar();  		int temp = music._musicVolume; -		music._musicVolume = (_midiSliderX - _surface.widestChar()) * 127 / (_bounds.width() - _surface.widestChar() * 2); +		music._musicVolume = (_midiSliderX - _surface.widestChar()) * 255 / (_bounds.width() - _surface.widestChar() * 2);  		if (music._musicVolume != temp) {  			music.setMIDIVolume(music._musicVolume);  			vm.saveConfig(); @@ -146,7 +132,7 @@ void WidgetOptions::handleEvents() {  			_digiSliderX = _bounds.width() - _surface.widestChar();  		int temp = sound._soundVolume; -		sound._soundVolume = (_digiSliderX - _surface.widestChar()) * 15 / (_bounds.width() - _surface.widestChar() * 2); +		sound._soundVolume = (_digiSliderX - _surface.widestChar()) * 255 / (_bounds.width() - _surface.widestChar() * 2);  		if (sound._soundVolume != temp) {  			sound.setVolume(sound._soundVolume);  			vm.saveConfig(); @@ -165,7 +151,7 @@ void WidgetOptions::handleEvents() {  		events.clearEvents();  		_outsideMenu = false;  		int temp = _selector; -		_selector = 255; +		_selector = -1;  		switch (temp) {  		case 0: @@ -224,7 +210,7 @@ void WidgetOptions::handleEvents() {  				fontNumber = 0;  			screen.setFont(fontNumber); -			render(OP_CONTENTS); +			render(OP_ALL);  			vm.saveConfig();  			break;  		} @@ -233,7 +219,7 @@ void WidgetOptions::handleEvents() {  			// Toggle Transparent Menus  			vm._transparentMenus = !vm._transparentMenus; -			render(OP_CONTENTS); +			render(OP_NAMES);  			vm.saveConfig();  			break; @@ -253,17 +239,32 @@ void WidgetOptions::handleEvents() {  void WidgetOptions::render(OptionRenderMode mode) {  	TattooEngine &vm = *(TattooEngine *)_vm; +	Events &events = *_vm->_events;  	Music &music = *_vm->_music;  	Sound &sound = *_vm->_sound;  	TattooUserInterface &ui = *(TattooUserInterface *)_vm->_ui; +	Common::Point mousePos = events.mousePos();  	ImageFile &images = *ui._interfaceImages;  	const char *const OFF_ON[2] = { FIXED(Off), FIXED(On) };  	// Draw the border if necessary  	if (mode == OP_ALL) { +		// Set bounds for the dialog +		Common::String widestString = Common::String::format("%s %s", FIXED(TransparentMenus), FIXED(Off)); +		_bounds = Common::Rect(_surface.stringWidth(widestString) + _surface.widestChar() * 2 + 6, +			(_surface.fontHeight() + 7) * 11 + 3); +		_bounds.moveTo(_centerPos.x - _bounds.width() / 2, _centerPos.y - _bounds.height() / 2); + +		// Get slider positions +		_midiSliderX = music._musicVolume * (_bounds.width() - _surface.widestChar() * 2) / 255 + _surface.widestChar(); +		_digiSliderX = sound._soundVolume * (_bounds.width() - _surface.widestChar() * 2) / 255 + _surface.widestChar(); + +		// Setup the dialog +		_surface.create(_bounds.width(), _bounds.height());  		_surface.fill(TRANSPARENCY);  		makeInfoArea(); +		// Draw the lines separating options in the dialog  		int yp = _surface.fontHeight() + 7;  		for (int idx = 0; idx < 7; ++idx) {  			_surface.transBlitFrom(images[4], Common::Point(0, yp - 1)); diff --git a/engines/sherlock/tattoo/widget_options.h b/engines/sherlock/tattoo/widget_options.h index c2f1fccf53..b50a557f14 100644 --- a/engines/sherlock/tattoo/widget_options.h +++ b/engines/sherlock/tattoo/widget_options.h @@ -41,6 +41,7 @@ class WidgetOptions : public WidgetBase {  private:  	int _midiSliderX, _digiSliderX;  	int _selector, _oldSelector; +	Common::Point _centerPos;  	/**  	 * Render the contents of the dialog onto the widget's surface  | 
