[Scummvm-git-logs] scummvm master -> 0f54f7b9c14f6304550caf58623bc5cf7044719a
aquadran
noreply at scummvm.org
Sun Sep 28 14:26:10 UTC 2025
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .
Summary:
0f54f7b9c1 WINTERMUTE: Restored original engine accessibility - initial support
Commit: 0f54f7b9c14f6304550caf58623bc5cf7044719a
https://github.com/scummvm/scummvm/commit/0f54f7b9c14f6304550caf58623bc5cf7044719a
Author: PaweÅ KoÅodziejski (aquadran at gmail.com)
Date: 2025-09-28T16:26:05+02:00
Commit Message:
WINTERMUTE: Restored original engine accessibility - initial support
Changed paths:
A engines/wintermute/base/base_access_mgr.cpp
A engines/wintermute/base/base_access_mgr.h
engines/wintermute/ad/ad_actor.cpp
engines/wintermute/ad/ad_entity.cpp
engines/wintermute/ad/ad_game.cpp
engines/wintermute/ad/ad_game.h
engines/wintermute/ad/ad_object.cpp
engines/wintermute/ad/ad_response_box.h
engines/wintermute/base/base_game.cpp
engines/wintermute/base/base_game.h
engines/wintermute/base/base_object.cpp
engines/wintermute/base/base_object.h
engines/wintermute/detection.cpp
engines/wintermute/detection.h
engines/wintermute/metaengine.cpp
engines/wintermute/module.mk
engines/wintermute/ui/ui_button.cpp
engines/wintermute/ui/ui_edit.cpp
engines/wintermute/ui/ui_object.cpp
engines/wintermute/ui/ui_object.h
engines/wintermute/ui/ui_window.cpp
engines/wintermute/ui/ui_window.h
engines/wintermute/wintermute.cpp
diff --git a/engines/wintermute/ad/ad_actor.cpp b/engines/wintermute/ad/ad_actor.cpp
index 54ca3cd1057..fc101a17f72 100644
--- a/engines/wintermute/ad/ad_actor.cpp
+++ b/engines/wintermute/ad/ad_actor.cpp
@@ -39,11 +39,13 @@
#include "engines/wintermute/base/base_region.h"
#include "engines/wintermute/base/base_file_manager.h"
#include "engines/wintermute/base/base_sprite.h"
+#include "engines/wintermute/base/base_access_mgr.h"
#include "engines/wintermute/base/scriptables/script.h"
#include "engines/wintermute/base/scriptables/script_value.h"
#include "engines/wintermute/base/scriptables/script_stack.h"
#include "engines/wintermute/base/particles/part_emitter.h"
#include "engines/wintermute/base/base_engine.h"
+#include "engines/wintermute/platform_osystem.h"
#include "engines/wintermute/utils/utils.h"
#include "engines/wintermute/dcgf.h"
@@ -589,19 +591,18 @@ bool AdActor::display() {
if (_active && _partEmitter) {
_partEmitter->display();
}
-/*
+
// accessibility
- if (Game->m_AccessMgr->GetActiveObject() == this) {
- float ScaleX, ScaleY;
- GetScale(&ScaleX, &ScaleY);
+ if (_game->_accessMgr->getActiveObject() == this) {
+ getScale(&scaleX, &scaleY);
Common::Rect32 rc;
- SetRectEmpty(&rc);
- if (m_CurrentSprite) {
- m_CurrentSprite->GetBoundingRect(&rc, m_PosX - Game->m_OffsetX, m_PosY - Game->m_OffsetY, ScaleX, ScaleY);
+ BasePlatform::setRectEmpty(&rc);
+ if (_currentSprite) {
+ _currentSprite->getBoundingRect(&rc, _posX - _game->_offsetX, _posY - _game->_offsetY, scaleX, scaleY);
}
- Game->m_AccessMgr->SetHintRect(&rc);
- }*/
+ _game->_accessMgr->setHintRect(&rc);
+ }
return STATUS_OK;
}
diff --git a/engines/wintermute/ad/ad_entity.cpp b/engines/wintermute/ad/ad_entity.cpp
index c9c22b0e259..47c56d7bdbe 100644
--- a/engines/wintermute/ad/ad_entity.cpp
+++ b/engines/wintermute/ad/ad_entity.cpp
@@ -42,6 +42,7 @@
#include "engines/wintermute/base/base_region.h"
#include "engines/wintermute/base/base_sprite.h"
#include "engines/wintermute/base/base_surface_storage.h"
+#include "engines/wintermute/base/base_access_mgr.h"
#include "engines/wintermute/base/font/base_font_storage.h"
#include "engines/wintermute/base/font/base_font.h"
#include "engines/wintermute/base/gfx/base_renderer.h"
@@ -587,20 +588,19 @@ bool AdEntity::display() {
}
// accessibility
- /*if (Game->m_AccessMgr->GetActiveObject() == this) {
- float ScaleX, ScaleY;
- GetScale(&ScaleX, &ScaleY);
+ if (_game->_accessMgr->getActiveObject() == this) {
+ getScale(&scaleX, &scaleY);
Common::Rect32 rc;
- SetRectEmpty(&rc);
- if (m_CurrentSprite) {
- m_CurrentSprite->GetBoundingRect(&rc, m_PosX - Game->m_OffsetX, m_PosY - Game->m_OffsetY, ScaleX, ScaleY);
- } else if (m_Region) {
- m_Region->GetBoundingRect(&rc);
- OffsetRect(&rc, -Game->m_OffsetX, -Game->m_OffsetY);
+ BasePlatform::setRectEmpty(&rc);
+ if (_currentSprite) {
+ _currentSprite->getBoundingRect(&rc, _posX - _game->_offsetX, _posY - _game->_offsetY, scaleX, scaleY);
+ } else if (_region) {
+ _region->getBoundingRect(&rc);
+ BasePlatform::offsetRect(&rc, -_game->_offsetX, -_game->_offsetY);
}
- Game->m_AccessMgr->SetHintRect(&rc);
- }*/
+ _game->_accessMgr->setHintRect(&rc);
+ }
}
return STATUS_OK;
}
diff --git a/engines/wintermute/ad/ad_game.cpp b/engines/wintermute/ad/ad_game.cpp
index 76fb76b6268..e2d581da6b7 100644
--- a/engines/wintermute/ad/ad_game.cpp
+++ b/engines/wintermute/ad/ad_game.cpp
@@ -53,6 +53,7 @@
#include "engines/wintermute/base/base_transition_manager.h"
#include "engines/wintermute/base/base_sprite.h"
#include "engines/wintermute/base/base_viewport.h"
+#include "engines/wintermute/base/base_access_mgr.h"
#include "engines/wintermute/base/particles/part_emitter.h"
#include "engines/wintermute/base/save_thumb_helper.h"
#include "engines/wintermute/base/gfx/base_renderer.h"
@@ -355,7 +356,7 @@ void AdGame::finishSentences() {
}
}
}
- //Game->m_AccessMgr->Stop();
+ _game->_accessMgr->stop();
}
@@ -2008,20 +2009,20 @@ bool AdGame::displayContent(bool doUpdate, bool displayAll) {
}
if (doUpdate || displayAll) {
- //m_AccessMgr->DisplayBeforeGUI();
+ _accessMgr->displayBeforeGUI();
// display normal windows
displayWindows(false);
- //m_AccessMgr->DisplayAfterGUI();
+ _accessMgr->displayAfterGUI();
setActiveObject(_game->_renderer->getObjectAt(p.x, p.y));
// textual info
- //if (m_AccessGlobalPaused)
- // DisplaySentences(false);
- //else
- displaySentences(_state == GAME_FROZEN);
+ if (_accessGlobalPaused)
+ displaySentences(false);
+ else
+ displaySentences(_state == GAME_FROZEN);
showCursor();
@@ -2254,28 +2255,28 @@ bool AdGame::renderShadowGeometry() {
#endif
//////////////////////////////////////////////////////////////////////////
-/*CBObject *CAdGame::GetNextAccessObject(CBObject *CurrObject) {
- CBObject *Ret = CBGame::GetNextAccessObject(CurrObject);
- if (!Ret) {
- if (m_ResponseBox && m_StateEx == GAME_WAITING_RESPONSE)
- return m_ResponseBox->GetNextAccessObject(CurrObject);
- if (m_Scene)
- return m_Scene->GetNextAccessObject(CurrObject);
+BaseObject *AdGame::getNextAccessObject(BaseObject *currObject) {
+ BaseObject *ret = BaseGame::getNextAccessObject(currObject);
+ if (!ret) {
+ if (_responseBox && _stateEx == GAME_WAITING_RESPONSE)
+ return _responseBox->getNextAccessObject(currObject);
+ if (_scene)
+ return _scene->getNextAccessObject(currObject);
}
- return Ret;
+ return ret;
}
//////////////////////////////////////////////////////////////////////////
-CBObject *CAdGame::GetPrevAccessObject(CBObject *CurrObject) {
- CBObject *Ret = CBGame::GetPrevAccessObject(CurrObject);
- if (!Ret) {
- if (m_ResponseBox && m_StateEx == GAME_WAITING_RESPONSE)
- return m_ResponseBox->GetPrevAccessObject(CurrObject);
- if (m_Scene)
- return m_Scene->GetPrevAccessObject(CurrObject);
+BaseObject *AdGame::getPrevAccessObject(BaseObject *currObject) {
+ BaseObject *ret = BaseGame::getPrevAccessObject(currObject);
+ if (!ret) {
+ if (_responseBox && _stateEx == GAME_WAITING_RESPONSE)
+ return _responseBox->getPrevAccessObject(currObject);
+ if (_scene)
+ return _scene->getPrevAccessObject(currObject);
}
- return Ret;
-}*/
+ return ret;
+}
//////////////////////////////////////////////////////////////////////////
bool AdGame::validMouse() {
diff --git a/engines/wintermute/ad/ad_game.h b/engines/wintermute/ad/ad_game.h
index 7b65eed12b7..47f27c8e4c7 100644
--- a/engines/wintermute/ad/ad_game.h
+++ b/engines/wintermute/ad/ad_game.h
@@ -53,8 +53,8 @@ public:
bool displayDebugInfo() override;
- //virtual CBObject *GetNextAccessObject(CBObject *CurrObject);
- //virtual CBObject *GetPrevAccessObject(CBObject *CurrObject);
+ virtual BaseObject *getNextAccessObject(BaseObject *currObject) override;
+ virtual BaseObject *getPrevAccessObject(BaseObject *currObject) override;
virtual bool getLayerSize(int *layerWidth, int *layerHeight, Common::Rect32 *viewport, bool *customViewport) override;
#ifdef ENABLE_WME3D
diff --git a/engines/wintermute/ad/ad_object.cpp b/engines/wintermute/ad/ad_object.cpp
index f823b9083b4..c62d3ee54b2 100644
--- a/engines/wintermute/ad/ad_object.cpp
+++ b/engines/wintermute/ad/ad_object.cpp
@@ -39,6 +39,7 @@
#include "engines/wintermute/base/base_sprite.h"
#include "engines/wintermute/base/base_sub_frame.h"
#include "engines/wintermute/base/base_surface_storage.h"
+#include "engines/wintermute/base/base_access_mgr.h"
#include "engines/wintermute/base/font/base_font.h"
#include "engines/wintermute/base/font/base_font_storage.h"
#include "engines/wintermute/base/gfx/base_renderer.h"
@@ -992,8 +993,9 @@ void AdObject::talk(const char *text, const char *sound, uint32 duration, const
delete[] sound;
}
- //if (!m_Sentence->m_Sound)
- // Game->m_AccessMgr->Speak(m_Sentence->m_Text, TTS_TALK);
+ if (!_sentence->_sound) {
+ _game->_accessMgr->speak(_sentence->_text, TTS_TALK);
+ }
}
diff --git a/engines/wintermute/ad/ad_response_box.h b/engines/wintermute/ad/ad_response_box.h
index 7a31a839a87..cb8ed9090fa 100644
--- a/engines/wintermute/ad/ad_response_box.h
+++ b/engines/wintermute/ad/ad_response_box.h
@@ -39,8 +39,8 @@ class UIObject;
class AdResponse;
class AdResponseBox : public BaseObject {
public:
- BaseObject *getNextAccessObject(BaseObject *CurrObject);
- BaseObject *getPrevAccessObject(BaseObject *CurrObject);
+ BaseObject *getNextAccessObject(BaseObject *currObject);
+ BaseObject *getPrevAccessObject(BaseObject *currObject);
bool getObjects(BaseArray<UIObject *> &objects, bool interactiveOnly);
bool handleResponse(AdResponse *response);
diff --git a/engines/wintermute/base/base_access_mgr.cpp b/engines/wintermute/base/base_access_mgr.cpp
new file mode 100644
index 00000000000..f1a43f5efaf
--- /dev/null
+++ b/engines/wintermute/base/base_access_mgr.cpp
@@ -0,0 +1,221 @@
+/* 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 3 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, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+/*
+ * This file is based on WME.
+ * http://dead-code.org/redir.php?target=wme
+ * Copyright (c) 2003-2013 Jan Nedoma and contributors
+ */
+
+#include "engines/wintermute/base/base.h"
+#include "engines/wintermute/base/base_access_mgr.h"
+#include "engines/wintermute/base/base_game.h"
+#include "engines/wintermute/base/gfx/base_renderer.h"
+#include "engines/wintermute/utils/string_util.h"
+#include "engines/wintermute/platform_osystem.h"
+#include "engines/wintermute/dcgf.h"
+
+#include "common/text-to-speech.h"
+
+namespace Wintermute {
+
+//////////////////////////////////////////////////////////////////////////
+BaseAccessMgr::BaseAccessMgr(BaseGame *inGame) : BaseClass(inGame) {
+ _voice = nullptr;
+ _ttsAvailable = false;
+ _activeObject = nullptr;
+ _prevActiveObject = nullptr;
+ BasePlatform::setRectEmpty(&_hintRect);
+ _hintAfterGUI = false;
+ _playingType = TTS_CAPTION;
+ _ctrlPressed = false;
+}
+
+//////////////////////////////////////////////////////////////////////////
+BaseAccessMgr::~BaseAccessMgr() {
+ _activeObject = nullptr; // ref only
+ _ttsAvailable = false;
+}
+
+//////////////////////////////////////////////////////////////////////////
+bool BaseAccessMgr::initialize() {
+ _ttsAvailable = false;
+
+ if (!_game->_accessTTSEnabled)
+ return true;
+
+ _voice = g_system->getTextToSpeechManager();
+ if (_voice) {
+ _ttsAvailable = true;
+ }
+
+ return true;
+}
+
+//////////////////////////////////////////////////////////////////////////
+bool BaseAccessMgr::initLoop() {
+ BasePlatform::setRectEmpty(&_hintRect);
+
+ return true;
+}
+
+//////////////////////////////////////////////////////////////////////////
+bool BaseAccessMgr::displayBeforeGUI() {
+ if (!_game->_accessKeyboardEnabled)
+ return true;
+
+ if (!_hintAfterGUI) {
+ return displayInternal();
+ } else {
+ return true;
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////
+bool BaseAccessMgr::displayAfterGUI() {
+ if (!_game->_accessKeyboardEnabled)
+ return true;
+
+ if (_hintAfterGUI) {
+ return displayInternal();
+ } else {
+ return true;
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////
+bool BaseAccessMgr::displayInternal() {
+ if (!_ctrlPressed) {
+ return true;
+ }
+
+ if (!BasePlatform::isRectEmpty(&_hintRect)) {
+ _game->_renderer->drawRect(_hintRect.left, _hintRect.top, _hintRect.right, _hintRect.bottom, 0xFFFF0000, 4);
+
+ // reposition mouse pointer
+ if (_game->_accessKeyboardCursorSkip && _activeObject != _prevActiveObject) {
+ _prevActiveObject = _activeObject;
+ Common::Point32 p;
+ p.x = _hintRect.left + (_hintRect.right - _hintRect.left) / 2;
+ p.y = _hintRect.top + (_hintRect.bottom - _hintRect.top) / 2;
+
+ p.x += _game->_renderer->_drawOffsetX;
+ p.y += _game->_renderer->_drawOffsetY;
+
+ p.x = MAX(0, p.x);
+ p.y = MAX(0, p.y);
+ p.x = MIN(_game->_renderer->_width - 1, p.x);
+ p.y = MIN(_game->_renderer->_height - 1, p.y);
+
+ //ClientToScreen(Game->m_Renderer->m_Window, &p);
+ BasePlatform::setCursorPos(p.x, p.y);
+ }
+ }
+ return true;
+}
+
+//////////////////////////////////////////////////////////////////////////
+bool BaseAccessMgr::setHintRect(Common::Rect32 *hintRect, bool afterGUI) {
+ if (!hintRect) {
+ BasePlatform::setRectEmpty(&_hintRect);
+ } else {
+ _hintRect = *hintRect;
+ }
+
+ _hintAfterGUI = afterGUI;
+
+ return true;
+}
+
+//////////////////////////////////////////////////////////////////////////
+bool BaseAccessMgr::setActiveObject(BaseObject *activeObj) {
+ if (!_game->_accessKeyboardEnabled) {
+ return true;
+ }
+
+ _activeObject = activeObj;
+ if (!activeObj) {
+ _prevActiveObject = nullptr;
+ }
+ return true;
+}
+
+//////////////////////////////////////////////////////////////////////////
+BaseObject *BaseAccessMgr::getActiveObject() {
+ return _activeObject;
+}
+
+//////////////////////////////////////////////////////////////////////////
+bool BaseAccessMgr::speak(const char *str, TTTSType type) {
+ if (!_ttsAvailable) {
+ return true;
+ }
+ if (type == TTS_CAPTION && !_game->_accessTTSCaptions) {
+ return true;
+ }
+ if (type == TTS_TALK && !_game->_accessTTSTalk) {
+ return true;
+ }
+ if (type == TTS_KEYPRESS && !_game->_accessTTSKeypress) {
+ return true;
+ }
+
+ if (!str || !str[0]) {
+ return true;
+ }
+
+ WideString textStr;
+ if (_game->_textEncoding == TEXT_UTF8) {
+ textStr = StringUtil::utf8ToWide(str);
+ } else {
+ textStr = StringUtil::ansiToWide(str, CHARSET_DEFAULT);
+ }
+
+ if (!textStr.empty()) {
+ _playingType = type;
+ return _voice->say(str);
+ } else {
+ return false;
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////
+bool BaseAccessMgr::stop() {
+ if (!_ttsAvailable) {
+ return true;
+ }
+ _playingType = TTS_CAPTION;
+ return _voice->stop();
+}
+
+//////////////////////////////////////////////////////////////////////////
+BaseObject *BaseAccessMgr::getNextObject() {
+ _activeObject = _game->getNextAccessObject(_activeObject);
+ return _activeObject;
+}
+
+//////////////////////////////////////////////////////////////////////////
+BaseObject *BaseAccessMgr::getPrevObject() {
+ _activeObject = _game->getPrevAccessObject(_activeObject);
+ return _activeObject;
+}
+
+} // End of namespace Wintermute
diff --git a/engines/wintermute/base/base_access_mgr.h b/engines/wintermute/base/base_access_mgr.h
new file mode 100644
index 00000000000..3b00b2a4669
--- /dev/null
+++ b/engines/wintermute/base/base_access_mgr.h
@@ -0,0 +1,73 @@
+/* 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 3 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, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+/*
+ * This file is based on WME.
+ * http://dead-code.org/redir.php?target=wme
+ * Copyright (c) 2003-2013 Jan Nedoma and contributors
+ */
+
+#ifndef WINTERMUTE_BASE_ACCESS_MGR_H
+#define WINTERMUTE_BASE_ACCESS_MGR_H
+
+#include "engines/wintermute/base/base.h"
+#include "engines/wintermute/dctypes.h"
+
+#include "common/rect.h"
+#include "common/text-to-speech.h"
+
+namespace Wintermute {
+
+class BaseObject;
+
+class BaseAccessMgr : public BaseClass {
+public:
+ BaseAccessMgr(BaseGame *inGame);
+ virtual ~BaseAccessMgr();
+
+ bool _ttsAvailable;
+ bool initialize();
+ bool speak(const char *str, TTTSType type);
+ bool stop();
+ BaseObject *getNextObject();
+ BaseObject *getPrevObject();
+
+ bool initLoop();
+ bool displayBeforeGUI();
+ bool displayAfterGUI();
+ bool setHintRect(Common::Rect32 *hintRect = nullptr, bool afterGUI = false);
+ bool setActiveObject(BaseObject *activeObj = nullptr);
+ BaseObject *getActiveObject();
+ bool _ctrlPressed;
+
+private:
+ TTTSType _playingType;
+ bool displayInternal();
+ Common::TextToSpeechManager *_voice;
+ BaseObject *_activeObject;
+ BaseObject *_prevActiveObject;
+ Common::Rect32 _hintRect;
+ bool _hintAfterGUI;
+};
+
+#endif
+
+} // End of namespace Wintermute
diff --git a/engines/wintermute/base/base_game.cpp b/engines/wintermute/base/base_game.cpp
index 1b496439d06..101719b8efa 100644
--- a/engines/wintermute/base/base_game.cpp
+++ b/engines/wintermute/base/base_game.cpp
@@ -56,6 +56,7 @@
#include "engines/wintermute/base/scriptables/script.h"
#include "engines/wintermute/base/sound/base_sound.h"
#include "engines/wintermute/base/file/base_savefile_manager_file.h"
+#include "engines/wintermute/base/base_access_mgr.h"
#include "engines/wintermute/ext/plugins.h"
#include "engines/wintermute/video/video_player.h"
#include "engines/wintermute/video/video_theora_player.h"
@@ -64,6 +65,7 @@
#include "engines/wintermute/utils/path_util.h"
#include "engines/wintermute/utils/string_util.h"
#include "engines/wintermute/ui/ui_window.h"
+#include "engines/wintermute/ui/ui_text.h"
#include "engines/wintermute/wintermute.h"
#include "engines/wintermute/platform_osystem.h"
#include "engines/wintermute/ad/ad_scene.h"
@@ -284,16 +286,16 @@ BaseGame::BaseGame(const Common::String &targetName) : BaseObject(this), _target
_lastCursor = nullptr;
// accessibility flags
-/* m_AccessTTSEnabled = false;
- m_AccessTTSTalk = true;
- m_AccessTTSCaptions = true;
- m_AccessTTSKeypress = true;
- m_AccessKeyboardEnabled = false;
- m_AccessKeyboardCursorSkip = true;
- m_AccessKeyboardPause = false;
+ _accessTTSEnabled = false;
+ _accessTTSTalk = true;
+ _accessTTSCaptions = true;
+ _accessTTSKeypress = true;
+ _accessKeyboardEnabled = true;//false;
+ _accessKeyboardCursorSkip = true;
+ _accessKeyboardPause = false;
- m_AccessGlobalPaused = false;
- m_AccessShieldWin = NULL;*/
+ _accessGlobalPaused = false;
+ _accessShieldWin = nullptr;
BasePlatform::setRectEmpty(&_mouseLockRect);
@@ -355,7 +357,7 @@ BaseGame::~BaseGame() {
SAFE_DELETE(_renderer);
_fileManager = nullptr;
- //SAFE_DELETE(m_AccessMgr);
+ SAFE_DELETE(_accessMgr);
SAFE_DELETE(_stringTable);
@@ -390,7 +392,7 @@ bool BaseGame::cleanup() {
_windows.removeAll(); // refs only
_focusedWindow = nullptr; // ref only
- //m_AccessShieldWin = nullptr;
+ _accessShieldWin = nullptr;
SAFE_DELETE_ARRAY(_saveImageName);
SAFE_DELETE_ARRAY(_loadImageName);
@@ -439,8 +441,9 @@ bool BaseGame::cleanup() {
SAFE_DELETE(_keyboardState);
- //if (m_AccessMgr)
- // m_AccessMgr->SetActiveObject(NULL);
+ if (_accessMgr) {
+ _accessMgr->setActiveObject(nullptr);
+ }
return STATUS_OK;
}
@@ -511,10 +514,10 @@ bool BaseGame::initialize1() {
break;
}
- //m_AccessMgr = new CBAccessMgr(this);
- //if(m_AccessMgr == nullptr) {
- // break;
- //}
+ _accessMgr = new BaseAccessMgr(this);
+ if (_accessMgr == nullptr) {
+ break;
+ }
_soundMgr = new BaseSoundMgr(this);
if (_soundMgr == nullptr) {
@@ -576,7 +579,7 @@ bool BaseGame::initialize1() {
delete _fontStorage;
delete _videoPlayer;
delete _soundMgr;
- //delete m_AccessMgr;
+ delete _accessMgr;
_fileManager = nullptr;
delete _scEngine;
return STATUS_FAILED;
@@ -662,8 +665,9 @@ bool BaseGame::initialize3() { // renderer is initialized
_indicatorWidth = _renderer->getWidth();
}
- //if (m_AccessMgr)
- // Game->m_AccessMgr->Initialize();
+ if (_accessMgr) {
+ _game->_accessMgr->initialize();
+ }
return STATUS_OK;
}
@@ -747,8 +751,9 @@ bool BaseGame::initLoop() {
_surfaceStorage->initLoop();
- //if (m_AccessMgr)
- // m_AccessMgr->InitLoop();
+ if (_accessMgr) {
+ _accessMgr->initLoop();
+ }
_fontStorage->initLoop();
@@ -3132,8 +3137,7 @@ ScValue *BaseGame::scGetProperty(const char *name) {
// AccTTSEnabled
//////////////////////////////////////////////////////////////////////////
else if (strcmp(name, "AccTTSEnabled") == 0) {
- //m_ScValue->SetBool(m_AccessTTSEnabled);
- _scValue->setBool(false);
+ _scValue->setBool(_accessTTSEnabled);
return _scValue;
}
@@ -3141,8 +3145,7 @@ ScValue *BaseGame::scGetProperty(const char *name) {
// AccTTSTalk
//////////////////////////////////////////////////////////////////////////
else if (strcmp(name, "AccTTSTalk") == 0) {
- //m_ScValue->SetBool(m_AccessTTSTalk);
- _scValue->setBool(false);
+ _scValue->setBool(_accessTTSTalk);
return _scValue;
}
@@ -3150,7 +3153,7 @@ ScValue *BaseGame::scGetProperty(const char *name) {
// AccTTSCaptions
//////////////////////////////////////////////////////////////////////////
else if (strcmp(name, "AccTTSCaptions") == 0) {
- _scValue->setBool(false);
+ _scValue->setBool(_accessTTSCaptions);
return _scValue;
}
@@ -3158,7 +3161,7 @@ ScValue *BaseGame::scGetProperty(const char *name) {
// AccTTSKeypress
//////////////////////////////////////////////////////////////////////////
else if (strcmp(name, "AccTTSKeypress") == 0) {
- _scValue->setBool(false);
+ _scValue->setBool(_accessTTSKeypress);
return _scValue;
}
@@ -3166,7 +3169,7 @@ ScValue *BaseGame::scGetProperty(const char *name) {
// AccKeyboardEnabled
//////////////////////////////////////////////////////////////////////////
else if (strcmp(name, "AccKeyboardEnabled") == 0) {
- _scValue->setBool(false);
+ _scValue->setBool(_accessKeyboardEnabled);
return _scValue;
}
@@ -3174,7 +3177,7 @@ ScValue *BaseGame::scGetProperty(const char *name) {
// AccKeyboardCursorSkip
//////////////////////////////////////////////////////////////////////////
else if (strcmp(name, "AccKeyboardCursorSkip") == 0) {
- _scValue->setBool(false);
+ _scValue->setBool(_accessKeyboardCursorSkip);
return _scValue;
}
@@ -3182,7 +3185,7 @@ ScValue *BaseGame::scGetProperty(const char *name) {
// AccKeyboardPause
//////////////////////////////////////////////////////////////////////////
else if (strcmp(name, "AccKeyboardPause") == 0) {
- _scValue->setBool(false);
+ _scValue->setBool(_accessKeyboardPause);
return _scValue;
}
@@ -3753,8 +3756,9 @@ bool BaseGame::unregisterObject(BaseObject *object) {
}
// is it active accessibility object?
- //if (m_AccessMgr && m_AccessMgr->GetActiveObject() == Object)
- // m_AccessMgr->SetActiveObject(NULL);
+ if (_accessMgr && _accessMgr->getActiveObject() == object) {
+ _accessMgr->setActiveObject(nullptr);
+ }
// destroy object
for (int32 i = 0; i < _regObjects.getSize(); i++) {
@@ -4318,7 +4322,7 @@ bool BaseGame::loadGame(const char *filename) {
displayContent(true, false);
//_renderer->flip();
- //accessUnpause();
+ accessUnpause();
}
}
}
@@ -4737,10 +4741,25 @@ bool BaseGame::persist(BasePersistenceManager *persistMgr) {
_stringTable->persist(persistMgr);
}
- //PersistMgr->Transfer(TMEMBER(m_AccessShieldWin));
+ if (persistMgr->checkVersion(1, 10, 1)) {
+ persistMgr->transferPtr(TMEMBER(_accessShieldWin));
+ } else {
+ if (!persistMgr->getIsSaving()) {
+ _accessShieldWin = nullptr;
+ }
+ }
+ // initialise to defaults
if (!persistMgr->getIsSaving()) {
_quitting = false;
+ _accessTTSEnabled = false;
+ _accessTTSTalk = true;
+ _accessTTSCaptions = true;
+ _accessTTSKeypress = true;
+ _accessKeyboardEnabled = false;
+ _accessKeyboardCursorSkip = true;
+ _accessKeyboardPause = false;
+ _accessGlobalPaused = false;
}
return STATUS_OK;
@@ -4816,8 +4835,9 @@ bool BaseGame::handleKeypress(Common::Event *event, bool printable) {
return true;
}
- //if (HandleAccessKey(Printable, CharCode, KeyData))
- // return true;
+ if (handleAccessKey(event, printable)) {
+ return true;
+ }
_keyboardState->handleKeyPress(event);
_keyboardState->readKey(event);
@@ -4846,25 +4866,32 @@ void BaseGame::handleKeyRelease(Common::Event *event) {
}
//////////////////////////////////////////////////////////////////////////
-/*bool CBGame::HandleAccessKey(bool Printable, DWORD CharCode, DWORD KeyData) {
- if (m_AccessKeyboardEnabled) {
- if (CharCode == VK_TAB && (CBUtils::IsKeyDown(VK_CONTROL) || CBUtils::IsKeyDown(VK_RCONTROL))) {
- CBObject *obj = NULL;
- if (CBUtils::IsKeyDown(VK_SHIFT) || CBUtils::IsKeyDown(VK_RSHIFT)) {
- obj = m_AccessMgr->GetPrevObject();
+bool BaseGame::handleAccessKey(Common::Event *event, bool printable) {
+ if (event->kbd.flags & Common::KBD_CTRL) {
+ _accessMgr->_ctrlPressed = event->type == Common::EVENT_KEYDOWN;
+ }
+
+ if (_accessKeyboardEnabled) {
+ if (event->kbd.keycode == Common::KEYCODE_TAB &&
+ (event->kbd.flags & Common::KBD_CTRL)) {
+ //BaseObject *obj = nullptr;
+ if (event->kbd.flags & Common::KBD_SHIFT) {
+ /*obj = */_accessMgr->getPrevObject();
} else {
- obj = m_AccessMgr->GetNextObject();
+ /*obj = */_accessMgr->getNextObject();
}
return true;
}
}
- if (Printable && m_AccessKeyboardPause) {
- if (CharCode == VK_SPACE && (CBUtils::IsKeyDown(VK_CONTROL) || CBUtils::IsKeyDown(VK_RCONTROL))) {
- m_AccessGlobalPaused = !m_AccessGlobalPaused;
- if (m_AccessGlobalPaused)
- AccessPause();
- else
- AccessUnpause();
+ if (printable && _accessKeyboardPause) {
+ if (event->kbd.keycode == Common::KEYCODE_SPACE &&
+ (event->kbd.flags & Common::KBD_CTRL)) {
+ _accessGlobalPaused = !_accessGlobalPaused;
+ if (_accessGlobalPaused) {
+ accessPause();
+ } else {
+ accessUnpause();
+ }
return true;
}
}
@@ -4873,46 +4900,46 @@ void BaseGame::handleKeyRelease(Common::Event *event) {
}
//////////////////////////////////////////////////////////////////////////
-HRESULT CBGame::AccessPause() {
- m_AccessGlobalPaused = true;
-
- if (m_AccessShieldWin)
- UnregisterObject(m_AccessShieldWin);
-
- m_AccessShieldWin = new CUIWindow(this);
- m_Windows.Add(m_AccessShieldWin);
- RegisterObject(m_AccessShieldWin);
-
- m_AccessShieldWin->m_PosX = m_AccessShieldWin->m_PosY = 0;
- m_AccessShieldWin->m_Width = m_Renderer->m_Width;
- m_AccessShieldWin->m_Height = m_Renderer->m_Height;
-
- CUIText *Sta = new CUIText(Game);
- Sta->m_Parent = m_AccessShieldWin;
- m_AccessShieldWin->m_Widgets.Add(Sta);
- Sta->SetText((char *)m_StringTable->ExpandStatic("/SYSENG0040/Game paused. Press Ctrl+Space to resume."));
- Sta->m_SharedFonts = true;
- Sta->m_Font = m_SystemFont;
- Sta->SizeToFit();
- Sta->m_PosY = m_AccessShieldWin->m_Height - Sta->m_Height;
- Sta->m_PosX = (m_AccessShieldWin->m_Width - Sta->m_Width) / 2;
-
- m_AccessShieldWin->m_Visible = true;
- m_AccessShieldWin->GoSystemExclusive();
-
- return S_OK;
+bool BaseGame::accessPause() {
+ _accessGlobalPaused = true;
+
+ if (_accessShieldWin)
+ unregisterObject(_accessShieldWin);
+
+ _accessShieldWin = new UIWindow(this);
+ _windows.add(_accessShieldWin);
+ registerObject(_accessShieldWin);
+
+ _accessShieldWin->_posX = _accessShieldWin->_posY = 0;
+ _accessShieldWin->_width = _renderer->_width;
+ _accessShieldWin->_height = _renderer->_height;
+
+ UIText *sta = new UIText(_game);
+ sta->_parent = _accessShieldWin;
+ _accessShieldWin->_widgets.add(sta);
+ sta->setText(_stringTable->expandStatic("/SYSENG0040/Game paused. Press Ctrl+Space to resume."));
+ sta->_sharedFonts = true;
+ sta->_font = _systemFont;
+ sta->sizeToFit();
+ sta->_posY = _accessShieldWin->_height - sta->_height;
+ sta->_posX = (_accessShieldWin->_width - sta->_width) / 2;
+
+ _accessShieldWin->_visible = true;
+ _accessShieldWin->goSystemExclusive();
+
+ return true;
}
//////////////////////////////////////////////////////////////////////////
-HRESULT CBGame::AccessUnpause() {
- m_AccessGlobalPaused = false;
- if (m_AccessShieldWin) {
- m_AccessShieldWin->Close();
- UnregisterObject(m_AccessShieldWin);
- m_AccessShieldWin = NULL;
+bool BaseGame::accessUnpause() {
+ _accessGlobalPaused = false;
+ if (_accessShieldWin) {
+ _accessShieldWin->close();
+ unregisterObject(_accessShieldWin);
+ _accessShieldWin = nullptr;
}
- return S_OK;
-}*/
+ return true;
+}
//////////////////////////////////////////////////////////////////////////
bool BaseGame::handleMouseWheel(int32 delta) {
@@ -5053,7 +5080,7 @@ bool BaseGame::setActiveObject(BaseObject *obj) {
// if (validObject(_activeObject)) _activeObject->applyEvent("MouseLeave");
_activeObject = obj;
if (_activeObject) {
- //m_AccessMgr->Speak(m_ActiveObject->GetAccessCaption(), TTS_CAPTION);
+ _accessMgr->speak(_activeObject->getAccessCaption(), TTS_CAPTION);
_activeObject->applyEvent("MouseEntry");
}
@@ -5396,6 +5423,24 @@ bool BaseGame::onActivate(bool activate, bool refreshMouse) {
return STATUS_OK;
}
+//////////////////////////////////////////////////////////////////////////
+BaseObject *BaseGame::getNextAccessObject(BaseObject *currObject) {
+ if (_focusedWindow) {
+ return _focusedWindow->getNextAccessObject(currObject);
+ } else {
+ return nullptr;
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////
+BaseObject* BaseGame::getPrevAccessObject(BaseObject *currObject) {
+ if(_focusedWindow) {
+ return _focusedWindow->getPrevAccessObject(currObject);
+ } else {
+ return nullptr;
+ }
+}
+
//////////////////////////////////////////////////////////////////////////
bool BaseGame::onMouseLeftDown() {
if (isVideoPlaying()) {
diff --git a/engines/wintermute/base/base_game.h b/engines/wintermute/base/base_game.h
index 1afe686e849..f43cbaa7add 100644
--- a/engines/wintermute/base/base_game.h
+++ b/engines/wintermute/base/base_game.h
@@ -60,6 +60,7 @@ class BaseRegistry;
class BaseSurfaceStorage;
class BaseKeyboardState;
class BaseGameSettings;
+class BaseAccessMgr;
class ScEngine;
class SXMath;
class SXDirectory;
@@ -88,8 +89,8 @@ public:
virtual uint32 getAmbientLightColor();
virtual bool getFogParams(bool *fogEnabled, uint32 *fogColor, float *start, float *end);
#endif
- //virtual CBObject *GetNextAccessObject(CBObject *CurrObject);
- //virtual CBObject *GetPrevAccessObject(CBObject *CurrObject);
+ virtual BaseObject *getNextAccessObject(BaseObject *currObject);
+ virtual BaseObject *getPrevAccessObject(BaseObject *currObject);
virtual bool onActivate(bool activate, bool refreshMouse);
virtual bool onMouseLeftDown();
@@ -204,7 +205,7 @@ public:
bool initialize1();
bool initialize2();
bool initialize3();
- //CBAccessMgr *m_AccessMgr;
+ BaseAccessMgr *_accessMgr;
BaseFileManager *_fileManager;
BaseTransitionMgr *_transMgr;
@@ -297,7 +298,7 @@ public:
virtual bool getVersion(byte *verMajor, byte *verMinor, byte *extMajor, byte *extMinor);
bool handleKeypress(Common::Event *event, bool printable = false) override;
virtual void handleKeyRelease(Common::Event *event);
- //bool HandleAccessKey(bool Printable, DWORD CharCode, DWORD KeyData);
+ bool handleAccessKey(Common::Event *event, bool printable);
virtual bool handleCustomActionStart(BaseGameCustomAction action);
virtual bool handleCustomActionEnd(BaseGameCustomAction action);
int32 _freezeLevel;
@@ -374,19 +375,19 @@ public:
BaseArray<BaseObject *> _regObjects;
// accessibility flags
-/* bool m_AccessTTSEnabled;
- bool m_AccessTTSTalk;
- bool m_AccessTTSCaptions;
- bool m_AccessTTSKeypress;
- bool m_AccessKeyboardEnabled;
- bool m_AccessKeyboardCursorSkip;
- bool m_AccessKeyboardPause;
-
- bool m_AccessGlobalPaused;
-
- CUIWindow *m_AccessShieldWin;
- HRESULT AccessPause();
- HRESULT AccessUnpause();*/
+ bool _accessTTSEnabled;
+ bool _accessTTSTalk;
+ bool _accessTTSCaptions;
+ bool _accessTTSKeypress;
+ bool _accessKeyboardEnabled;
+ bool _accessKeyboardCursorSkip;
+ bool _accessKeyboardPause;
+
+ bool _accessGlobalPaused;
+
+ UIWindow *_accessShieldWin;
+ bool accessPause();
+ bool accessUnpause();
public:
virtual bool displayContent(bool update = true, bool displayAll = false);
diff --git a/engines/wintermute/base/base_object.cpp b/engines/wintermute/base/base_object.cpp
index 629a6fd828d..b38c9b1498f 100644
--- a/engines/wintermute/base/base_object.cpp
+++ b/engines/wintermute/base/base_object.cpp
@@ -165,7 +165,7 @@ bool BaseObject::cleanup() {
_sFXType = SFX_NONE;
_sFXParam1 = _sFXParam2 = _sFXParam3 = _sFXParam4 = 0;
- //SAFE_DELETE_ARRAY(m_AccessCaption);
+ SAFE_DELETE_ARRAY(_accessCaption);
return STATUS_OK;
}
@@ -830,9 +830,9 @@ ScValue *BaseObject::scGetProperty(const char *name) {
// AccCaption
//////////////////////////////////////////////////////////////////////////
else if (strcmp(name, "AccCaption") == 0) {
-/* if (m_AccessCaption)
- m_ScValue->SetString(m_AccessCaption);
- else*/
+ if (_accessCaption)
+ _scValue->setString(_accessCaption);
+ else
_scValue->setNULL();
return _scValue;
} else {
@@ -1026,11 +1026,11 @@ bool BaseObject::scSetProperty(const char *name, ScValue *value) {
// AccCaption
//////////////////////////////////////////////////////////////////////////
else if (strcmp(name, "AccCaption") == 0) {
- /*if (Value->IsNULL()) {
- SAFE_DELETE_ARRAY(m_AccessCaption);
+ if (value->isNULL()) {
+ SAFE_DELETE_ARRAY(_accessCaption);
} else {
- CBUtils::SetString(&m_AccessCaption, Value->GetString());
- }*/
+ BaseUtils::setString(&_accessCaption, value->getString());
+ }
return STATUS_OK;
} else {
return BaseScriptHolder::scSetProperty(name, value);
@@ -1145,7 +1145,13 @@ bool BaseObject::persist(BasePersistenceManager *persistMgr) {
#endif
persistMgr->transferSint32(TMEMBER_INT(_blendMode));
- //persistMgr->Transfer(TMEMBER(m_AccessCaption));
+ if (persistMgr->checkVersion(1, 10, 1)) {
+ persistMgr->transferPtr(TMEMBER(_accessCaption));
+ } else {
+ if (!persistMgr->getIsSaving()) {
+ _accessCaption = nullptr;
+ }
+ }
return STATUS_OK;
}
@@ -1413,10 +1419,12 @@ bool BaseObject::renderModel() {
#endif
//////////////////////////////////////////////////////////////////////////
-/*char *CBObject::GetAccessCaption() {
- if (m_AccessCaption)
- return m_AccessCaption;
- else
- return GetCaption();
-}*/
+const char *BaseObject::getAccessCaption() {
+ if (_accessCaption) {
+ return _accessCaption;
+ } else {
+ return getCaption();
+ }
+}
+
} // End of namespace Wintermute
diff --git a/engines/wintermute/base/base_object.h b/engines/wintermute/base/base_object.h
index ae59cf01d73..b148ae85ed3 100644
--- a/engines/wintermute/base/base_object.h
+++ b/engines/wintermute/base/base_object.h
@@ -49,7 +49,7 @@ class XModel;
class BaseObject : public BaseScriptHolder {
public:
char *_accessCaption;
- //virtual char *GetAccessCaption();
+ virtual const char *getAccessCaption();
Graphics::TSpriteBlendMode _blendMode;
#ifdef ENABLE_WME3D
diff --git a/engines/wintermute/detection.cpp b/engines/wintermute/detection.cpp
index 1c4342f2660..8d88ddba6be 100644
--- a/engines/wintermute/detection.cpp
+++ b/engines/wintermute/detection.cpp
@@ -58,9 +58,9 @@ public:
// of J.U.L.I.A. when their datafiles sit in the same directory (e.g. in Steam distribution).
_flags = kADFlagUseExtraAsHint;
#ifdef ENABLE_WME3D
- _guiOptions = GUIO4(GUIO_NOMIDI, GAMEOPTION_SHOW_FPS, GAMEOPTION_BILINEAR, GAMEOPTION_FORCE_2D_RENDERER);
+ _guiOptions = GUIO5(GUIO_NOMIDI, GAMEOPTION_SHOW_FPS, GAMEOPTION_BILINEAR, GAMEOPTION_TTS, GAMEOPTION_FORCE_2D_RENDERER);
#else
- _guiOptions = GUIO3(GUIO_NOMIDI, GAMEOPTION_SHOW_FPS, GAMEOPTION_BILINEAR);
+ _guiOptions = GUIO4(GUIO_NOMIDI, GAMEOPTION_SHOW_FPS, GAMEOPTION_BILINEAR, GAMEOPTION_TTS);
#endif
_maxScanDepth = 2;
_directoryGlobs = directoryGlobs;
diff --git a/engines/wintermute/detection.h b/engines/wintermute/detection.h
index e02dc3a86df..a22b7081b8c 100644
--- a/engines/wintermute/detection.h
+++ b/engines/wintermute/detection.h
@@ -140,6 +140,7 @@ struct WMEGameDescription {
#ifdef ENABLE_WME3D
#define GAMEOPTION_FORCE_2D_RENDERER GUIO_GAMEOPTIONS3
#endif
+#define GAMEOPTION_TTS GUIO_GAMEOPTIONS4
} // End of namespace Wintermute
diff --git a/engines/wintermute/metaengine.cpp b/engines/wintermute/metaengine.cpp
index 13197455d40..e44ecb97b25 100644
--- a/engines/wintermute/metaengine.cpp
+++ b/engines/wintermute/metaengine.cpp
@@ -74,6 +74,20 @@ static const ADExtraGuiOptionsMap gameGuiOptions[] = {
},
#endif
+#ifdef USE_TTS
+ {
+ GAMEOPTION_TTS,
+ {
+ _s("Enable Text to Speech"),
+ _s("Use TTS to read text in the game (if TTS is available)"),
+ "tts_enabled",
+ false,
+ 0,
+ 0
+ }
+ },
+#endif
+
AD_EXTRA_GUI_OPTIONS_TERMINATOR
};
diff --git a/engines/wintermute/module.mk b/engines/wintermute/module.mk
index 38f64e73b77..17b06c14330 100644
--- a/engines/wintermute/module.mk
+++ b/engines/wintermute/module.mk
@@ -63,8 +63,9 @@ MODULE_OBJS := \
base/sound/base_sound.o \
base/sound/base_sound_buffer.o \
base/sound/base_sound_manager.o \
- base/base_active_rect.o \
base/base.o \
+ base/base_access_mgr.o \
+ base/base_active_rect.o \
base/base_dynamic_buffer.o \
base/base_engine.o \
base/base_fader.o \
diff --git a/engines/wintermute/ui/ui_button.cpp b/engines/wintermute/ui/ui_button.cpp
index 237dcda9a80..fba622eba71 100644
--- a/engines/wintermute/ui/ui_button.cpp
+++ b/engines/wintermute/ui/ui_button.cpp
@@ -36,6 +36,7 @@
#include "engines/wintermute/base/base_string_table.h"
#include "engines/wintermute/base/base_sprite.h"
#include "engines/wintermute/base/base_file_manager.h"
+#include "engines/wintermute/base/base_access_mgr.h"
#include "engines/wintermute/base/gfx/base_renderer.h"
#include "engines/wintermute/base/scriptables/script_value.h"
#include "engines/wintermute/base/scriptables/script.h"
@@ -755,12 +756,11 @@ bool UIButton::display(int offsetX, int offsetY) {
}
if (_imageHover && _imageHover != image) {
_imageHover->reset();
-
-/* if (Game->m_AccessMgr->GetActiveObject() == this) {
+ }
+ if (_game->_accessMgr->getActiveObject() == this) {
Common::Rect32 rc;
- SetRect(&rc, OffsetX + m_PosX, OffsetY + m_PosY, OffsetX + m_PosX + m_Width, OffsetY + m_PosY + m_Height);
- Game->m_AccessMgr->SetHintRect(&rc, true);
- }*/
+ BasePlatform::setRect(&rc, offsetX + _posX, offsetY + _posY, offsetX + _posX + _width, offsetY + _posY + _height);
+ _game->_accessMgr->setHintRect(&rc, true);
}
_press = _hover && _game->_mouseLeftDown && _game->_capturedObject == this;
diff --git a/engines/wintermute/ui/ui_edit.cpp b/engines/wintermute/ui/ui_edit.cpp
index 498541f77ad..c19e9da4531 100644
--- a/engines/wintermute/ui/ui_edit.cpp
+++ b/engines/wintermute/ui/ui_edit.cpp
@@ -39,6 +39,7 @@
#include "engines/wintermute/base/base_sprite.h"
#include "engines/wintermute/base/base_string_table.h"
#include "engines/wintermute/base/base_game.h"
+#include "engines/wintermute/base/base_access_mgr.h"
#include "engines/wintermute/base/gfx/base_renderer.h"
#include "engines/wintermute/base/scriptables/script_value.h"
#include "engines/wintermute/base/scriptables/script_stack.h"
@@ -727,11 +728,11 @@ bool UIEdit::display(int offsetX, int offsetY) {
_game->_renderer->_rectList.add(new BaseActiveRect(_game, this, nullptr, offsetX + _posX, offsetY + _posY, _width, _height, 100, 100, false));
-/* if (Game->m_AccessMgr->GetActiveObject() == this) {
+ if (_game->_accessMgr->getActiveObject() == this) {
Common::Rect32 rc;
- SetRect(&rc, OffsetX + m_PosX, OffsetY + m_PosY, OffsetX + m_PosX + m_Width, OffsetY + m_PosY + m_Height);
- Game->m_AccessMgr->SetHintRect(&rc, true);
- }*/
+ BasePlatform::setRect(&rc, offsetX + _posX, offsetY + _posY, offsetX + _posX + _width, offsetY + _posY + _height);
+ _game->_accessMgr->setHintRect(&rc, true);
+ }
_game->_textEncoding = OrigEncoding;
diff --git a/engines/wintermute/ui/ui_object.cpp b/engines/wintermute/ui/ui_object.cpp
index 71363b89722..d78177ff913 100644
--- a/engines/wintermute/ui/ui_object.cpp
+++ b/engines/wintermute/ui/ui_object.cpp
@@ -639,16 +639,16 @@ bool UIObject::persist(BasePersistenceManager *persistMgr) {
}
//////////////////////////////////////////////////////////////////////////
-/*char *CUIObject::GetAccessCaption() {
- if (m_AccessCaption)
- return m_AccessCaption;
+const char *UIObject::getAccessCaption() {
+ if (_accessCaption)
+ return _accessCaption;
else {
- if (m_Text)
- return m_Text;
+ if (_text && _text[0])
+ return _text;
else
- return GetCaption();
+ return getCaption();
}
-}*/
+}
//////////////////////////////////////////////////////////////////////////
bool UIObject::saveAsText(BaseDynamicBuffer *buffer, int indent) {
diff --git a/engines/wintermute/ui/ui_object.h b/engines/wintermute/ui/ui_object.h
index 6c482a5809a..158df3e652e 100644
--- a/engines/wintermute/ui/ui_object.h
+++ b/engines/wintermute/ui/ui_object.h
@@ -38,7 +38,7 @@ class UITiledImage;
class BaseFont;
class UIObject : public BaseObject {
public:
- //virtual char *GetAccessCaption();
+ const char *getAccessCaption() override;
bool getTotalOffset(int *offsetX, int *offsetY);
bool _canFocus;
diff --git a/engines/wintermute/ui/ui_window.cpp b/engines/wintermute/ui/ui_window.cpp
index 04767fecf1b..298758ec6ac 100644
--- a/engines/wintermute/ui/ui_window.cpp
+++ b/engines/wintermute/ui/ui_window.cpp
@@ -46,6 +46,7 @@
#include "engines/wintermute/base/scriptables/script_stack.h"
#include "engines/wintermute/base/base_sprite.h"
#include "engines/wintermute/base/base_file_manager.h"
+#include "engines/wintermute/base/base_access_mgr.h"
#include "engines/wintermute/platform_osystem.h"
#include "engines/wintermute/dcgf.h"
@@ -1349,7 +1350,7 @@ bool UIWindow::goSystemExclusive() {
makeFreezable(false);
- //Game->m_AccessMgr->SetActiveObject();
+ _game->_accessMgr->setActiveObject();
_mode = WINDOW_SYSTEM_EXCLUSIVE;
_ready = false;
_visible = true;
@@ -1405,50 +1406,50 @@ void UIWindow::makeFreezable(bool freezable) {
}
//////////////////////////////////////////////////////////////////////////
-/*CBObject *CUIWindow::GetNextAccessObject(CBObject *CurrObject) {
- CBArray<CUIObject *, CUIObject *> Objects;
- GetWindowObjects(Objects, true);
+BaseObject *UIWindow::getNextAccessObject(BaseObject *currObject) {
+ BaseArray<UIObject *>objects;
+ getWindowObjects(objects, true);
- if (Objects.GetSize() == 0)
- return NULL;
+ if (objects.getSize() == 0)
+ return nullptr;
else {
- if (CurrObject != NULL) {
- for (int i = 0; i < Objects.GetSize(); i++) {
- if (Objects[i] == CurrObject) {
- if (i < Objects.GetSize() - 1)
- return Objects[i + 1];
+ if (currObject != nullptr) {
+ for (int32 i = 0; i < objects.getSize(); i++) {
+ if (objects[i] == currObject) {
+ if (i < objects.getSize() - 1)
+ return objects[i + 1];
else
break;
}
}
}
- return Objects[0];
+ return objects[0];
}
- return NULL;
-}*/
+ return nullptr;
+}
//////////////////////////////////////////////////////////////////////////
-/*CBObject *CUIWindow::GetPrevAccessObject(CBObject *CurrObject) {
- CBArray<CUIObject *, CUIObject *> Objects;
- GetWindowObjects(Objects, true);
+BaseObject *UIWindow::getPrevAccessObject(BaseObject *currObject) {
+ BaseArray<UIObject *>objects;
+ getWindowObjects(objects, true);
- if (Objects.GetSize() == 0)
+ if (objects.getSize() == 0)
return NULL;
else {
- if (CurrObject != NULL) {
- for (int i = Objects.GetSize() - 1; i >= 0; i--) {
- if (Objects[i] == CurrObject) {
+ if (currObject != nullptr) {
+ for (int32 i = objects.getSize() - 1; i >= 0; i--) {
+ if (objects[i] == currObject) {
if (i > 0)
- return Objects[i - 1];
+ return objects[i - 1];
else
break;
}
}
}
- return Objects[Objects.GetSize() - 1];
+ return objects[objects.getSize() - 1];
}
- return NULL;
-}*/
+ return nullptr;
+}
//////////////////////////////////////////////////////////////////////////
bool UIWindow::getWindowObjects(BaseArray<UIObject *> &objects, bool interactiveOnly) {
diff --git a/engines/wintermute/ui/ui_window.h b/engines/wintermute/ui/ui_window.h
index 9372e0a8957..62928695928 100644
--- a/engines/wintermute/ui/ui_window.h
+++ b/engines/wintermute/ui/ui_window.h
@@ -38,8 +38,8 @@ class UIButton;
class BaseViewport;
class UIWindow : public UIObject {
public:
- //CBObject *GetPrevAccessObject(CBObject *CurrObject);
- //CBObject *GetNextAccessObject(CBObject *CurrObject);
+ BaseObject *getPrevAccessObject(BaseObject *currObject);
+ BaseObject *getNextAccessObject(BaseObject *currObject);
bool getWindowObjects(BaseArray<UIObject *> &objects, bool interactiveOnly);
bool _pauseMusic;
diff --git a/engines/wintermute/wintermute.cpp b/engines/wintermute/wintermute.cpp
index d2c7db54957..403bd1c187a 100644
--- a/engines/wintermute/wintermute.cpp
+++ b/engines/wintermute/wintermute.cpp
@@ -193,6 +193,8 @@ int WintermuteEngine::init() {
_game->initConfManSettings();
+ _game->_accessTTSEnabled = ConfMan.getBool("tts_enabled");
+
// load general game settings
_game->initialize1();
More information about the Scummvm-git-logs
mailing list