[Scummvm-git-logs] scummvm master -> 1832dd0babb0b477a59d77f15c3a8d376b37018b
whiterandrek
whiterandrek at gmail.com
Sun Jul 22 20:40:42 CEST 2018
This automated email contains information about 5 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
71e933e778 GRAPHICS: MACGUI: fixed engine unpausing after releasing mouse
62c66bc67a GRAPHICS: MACGUI: added unicode submenu rendering
f4eda44186 GRAPHICS: MACGUI: fixes for menu parser from win exe
c06e2abfb0 PINK: added menu commands
1832dd0bab PINK: fixed starting new game from menu in pda state
Commit: 71e933e7787e2be450ef8955e7f3289376ddce21
https://github.com/scummvm/scummvm/commit/71e933e7787e2be450ef8955e7f3289376ddce21
Author: Andrei Prykhodko (whiterandrek at gmail.com)
Date: 2018-07-22T20:12:37+03:00
Commit Message:
GRAPHICS: MACGUI: fixed engine unpausing after releasing mouse
Changed paths:
graphics/macgui/macmenu.cpp
diff --git a/graphics/macgui/macmenu.cpp b/graphics/macgui/macmenu.cpp
index 804590f..6d0f0fe 100644
--- a/graphics/macgui/macmenu.cpp
+++ b/graphics/macgui/macmenu.cpp
@@ -654,6 +654,11 @@ bool MacMenu::mouseMove(int x, int y) {
bool MacMenu::mouseRelease(int x, int y) {
if (_menuActivated) {
_menuActivated = false;
+ _isVisible = false;
+
+ if (_wm->_mode & kWMModalMenuMode) {
+ _wm->pauseEngine(false);
+ }
if (_activeItem != -1 && _activeSubItem != -1 && _items[_activeItem]->subitems[_activeSubItem]->enabled) {
if (_items[_activeItem]->subitems[_activeSubItem]->unicode) {
Commit: 62c66bc67a202694229a46e09d6881eea4ebd77f
https://github.com/scummvm/scummvm/commit/62c66bc67a202694229a46e09d6881eea4ebd77f
Author: Andrei Prykhodko (whiterandrek at gmail.com)
Date: 2018-07-22T20:37:44+03:00
Commit Message:
GRAPHICS: MACGUI: added unicode submenu rendering
Changed paths:
graphics/macgui/macmenu.cpp
diff --git a/graphics/macgui/macmenu.cpp b/graphics/macgui/macmenu.cpp
index 6d0f0fe..427f605 100644
--- a/graphics/macgui/macmenu.cpp
+++ b/graphics/macgui/macmenu.cpp
@@ -504,17 +504,21 @@ void MacMenu::renderSubmenu(MacMenuItem *menu) {
for (uint i = 0; i < menu->subitems.size(); i++) {
Common::String text(menu->subitems[i]->text);
Common::String acceleratorText(getAcceleratorString(menu->subitems[i], ""));
+
+ Common::U32String unicodeText(menu->subitems[i]->unicodeText);
+ // add unicode accelerator
+
int accelX = r->right - 25;
int color = _wm->_colorBlack;
- if (i == (uint)_activeSubItem && !text.empty() && menu->subitems[i]->enabled) {
+ if (i == (uint)_activeSubItem && (!text.empty() || !unicodeText.empty()) && menu->subitems[i]->enabled) {
color = _wm->_colorWhite;
Common::Rect trect(r->left, y - (_wm->_fontMan->hasBuiltInFonts() ? 1 : 0), r->right, y + _font->getFontHeight());
_screen.fillRect(trect, _wm->_colorBlack);
}
- if (!text.empty()) {
+ if (!text.empty() || !unicodeText.empty()) {
ManagedSurface *s = &_screen;
int tx = x, ty = y;
@@ -527,7 +531,10 @@ void MacMenu::renderSubmenu(MacMenuItem *menu) {
_tempSurface.clear(kColorGreen);
}
- _font->drawString(s, text, tx, ty, r->width(), color);
+ if (menu->subitems[i]->unicode)
+ _font->drawString(s, unicodeText, tx, ty, r->width(), color);
+ else
+ _font->drawString(s, text, tx, ty, r->width(), color);
if (!acceleratorText.empty())
_font->drawString(s, acceleratorText, accelX, ty, r->width(), color);
Commit: f4eda441862f8aacf75417f577907343278708e4
https://github.com/scummvm/scummvm/commit/f4eda441862f8aacf75417f577907343278708e4
Author: Andrei Prykhodko (whiterandrek at gmail.com)
Date: 2018-07-22T21:19:02+03:00
Commit Message:
GRAPHICS: MACGUI: fixes for menu parser from win exe
Changed paths:
graphics/macgui/macmenu.cpp
diff --git a/graphics/macgui/macmenu.cpp b/graphics/macgui/macmenu.cpp
index 427f605..d48a7f4 100644
--- a/graphics/macgui/macmenu.cpp
+++ b/graphics/macgui/macmenu.cpp
@@ -194,6 +194,9 @@ MacMenu *MacMenu::createMenuFromPEexe(Common::PEResources &exe, MacWindowManager
int depth = 0;
int curMenuItemId = 0;
+ int action = 0;
+ bool lastPopUp = false;
+ bool lastPopUpCopy = false; // no more than 2 level menu for now
while (depth >= 0) {
uint16 flags = menuData->readUint16LE();
if (flags & kPopUp) {
@@ -204,14 +207,32 @@ MacMenu *MacMenu::createMenuFromPEexe(Common::PEResources &exe, MacWindowManager
// for now skip
readUnicodeString(menuData);
}
- if (!(flags & kEndMenu)) {
- depth++;
+ if (lastPopUp) {
+ lastPopUpCopy = lastPopUp;
}
+
+ lastPopUp = (flags & kEndMenu) != 0;
+ depth++;
} else {
menuData->readUint16LE(); // menu id
- menu->addMenuSubItem(curMenuItemId, readUnicodeString(menuData), 0);
+ Common::U32String name = readUnicodeString(menuData);
+ if (depth == 1) {
+ menu->addMenuSubItem(curMenuItemId, name, action);
+ }
+ if (!name.empty()) {
+ action++;
+ }
if (flags & kEndMenu) {
- depth--;
+ if (lastPopUp)
+ depth -= 2;
+ else
+ depth--;
+
+ if (depth == 0)
+ curMenuItemId++;
+
+ lastPopUp = lastPopUpCopy;
+ lastPopUpCopy = false;
}
}
}
Commit: c06e2abfb09f3dfa414e2a30b6f5cef1b4db40f8
https://github.com/scummvm/scummvm/commit/c06e2abfb09f3dfa414e2a30b6f5cef1b4db40f8
Author: Andrei Prykhodko (whiterandrek at gmail.com)
Date: 2018-07-22T21:26:09+03:00
Commit Message:
PINK: added menu commands
Changed paths:
A engines/pink/gui.cpp
engines/pink/director.cpp
engines/pink/director.h
engines/pink/module.mk
engines/pink/pink.cpp
engines/pink/pink.h
diff --git a/engines/pink/director.cpp b/engines/pink/director.cpp
index 4d16709..6a05fe5 100644
--- a/engines/pink/director.cpp
+++ b/engines/pink/director.cpp
@@ -76,15 +76,12 @@ static const Graphics::MacMenuData menuSubItems[] = {
};
-Director::Director(Common::PEResources &exe)
+Director::Director()
: _surface(640, 480) {
_wm.setScreen(&_surface);
_wm.setMode(Graphics::kWMModeNoDesktop | Graphics::kWMModeAutohideMenu | Graphics::kWMModalMenuMode);
_wm.setMenuHotzone(Common::Rect(0, 0, 640, 23));
_wm.setMenuDelay(250000);
-
- _menu = Graphics::MacMenu::createMenuFromPEexe(exe, &_wm);
- _menu->calcDimensions();
}
void Director::update() {
diff --git a/engines/pink/director.h b/engines/pink/director.h
index e2526ad..7a5b57c 100644
--- a/engines/pink/director.h
+++ b/engines/pink/director.h
@@ -46,7 +46,7 @@ class ActionSound;
class Director {
public:
- Director(Common::PEResources &exe);
+ Director();
void update();
bool processEvent(Common::Event &event);
@@ -81,7 +81,6 @@ private:
private:
Graphics::Screen _surface;
Graphics::MacWindowManager _wm;
- Graphics::MacMenu *_menu;
Common::Array<Common::Rect> _dirtyRects;
Common::Array<ActionCEL *> _sprites;
Common::Array<ActionCEL *> _savedSprites;
diff --git a/engines/pink/gui.cpp b/engines/pink/gui.cpp
new file mode 100644
index 0000000..12ce345
--- /dev/null
+++ b/engines/pink/gui.cpp
@@ -0,0 +1,338 @@
+/* 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 "graphics/macgui/macwindowmanager.h"
+#include "graphics/macgui/macmenu.h"
+
+#include "pink/pink.h"
+#include "pink/director.h"
+#include "pink/objects/actors/lead_actor.h"
+
+namespace Pink {
+
+enum {
+ kNewGameAction = 0,
+ kLoadSave,
+ kSaveAction,
+ kSaveAsAction,
+ kSongsAction,
+ kSoundSettingsAction,
+ kLastSavesAction,
+ kPauseAction,
+ kExitAction
+};
+
+enum {
+ kShowContent = 9,
+ kShowGreece,
+ kShowIndonesia,
+ kShowIsrael,
+ kShowKenya,
+ kShowRussia
+};
+
+enum {
+ kShowPDAAction = 15,
+
+ kShowAustraliaArt = 16,
+ kShowAustraliaCloth,
+ kShowAustraliaFood,
+ kShowAustraliaHistory,
+ kShowAustraliaNature,
+ kShowAustraliaPeople,
+ kShowAustraliaPlaces,
+ kShowAustraliaReligion,
+
+ kShowBhutanArt = 24,
+ kShowBhutanCloth,
+ kShowBhutanFood,
+ kShowBhutanHistory,
+ kShowBhutanNature,
+ kShowBhutanPeople,
+ kShowBhutanPlaces,
+ kShowBhutanReligion,
+
+ kShowChinaArt = 32,
+ kShowChinaCloth,
+ kShowChinaFood,
+ kShowChinaHistory,
+ kShowChinaNature,
+ kShowChinaPeople,
+ kShowChinaPlaces,
+ kShowChinaReligion,
+
+ kShowEnglandArt = 40,
+ kShowEnglandCloth,
+ kShowEnglandFood,
+ kShowEnglandHistory,
+ kShowEnglandNature,
+ kShowEnglandPeople,
+ kShowEnglandPlaces,
+ kShowEnglandReligion,
+
+ kShowEgyptArt = 48,
+ kShowEgyptCloth,
+ kShowEgyptFood,
+ kShowEgyptHistory,
+ kShowEgyptNature,
+ kShowEgyptPeople,
+ kShowEgyptPlaces,
+ kShowEgyptReligion,
+
+ kShowIndiaArt = 56,
+ kShowIndiaCloth,
+ kShowIndiaFood,
+ kShowIndiaHistory,
+ kShowIndiaNature,
+ kShowIndiaPeople,
+ kShowIndiaPlaces,
+ kShowIndiaReligion
+};
+
+enum {
+ kShowGameWebPage = 64,
+ kShowTechSupport,
+ kShowWinnnerPage,
+ kShowWanderlustInteractive,
+ kShowMGM,
+ kShowDiagnostics,
+ kShowAbout
+};
+
+static void menuCommandsCallback(int action, Common::U32String &, void *data) {
+ PinkEngine *engine = (PinkEngine *)data;
+ bool isPeril = engine->isPeril();
+ if (!isPeril && action > 14) {
+ action += 49;
+ } else if (isPeril && action >= 9) {
+ action += 6;
+ }
+ engine->executeMenuCommand(action);
+}
+
+void PinkEngine::initMenu(Common::PEResources &exeResources) {
+ _director->getWndManager().setEnginePauseCallback(this, &pauseEngine);
+
+ _menu = Graphics::MacMenu::createMenuFromPEexe(exeResources, &_director->getWndManager());
+ _menu->calcDimensions();
+ _menu->setCommandsCallback(&menuCommandsCallback, this);
+}
+
+void PinkEngine::executeMenuCommand(uint id) {
+ switch (id) {
+ case kNewGameAction: {
+ const Common::String moduleName = _modules[0]->getName();
+ initModule(moduleName, "", nullptr);
+ break;
+ }
+ case kLoadSave:
+ case kSaveAction:
+ case kSaveAsAction:
+ case kSoundSettingsAction:
+ case kLastSavesAction:
+ case kPauseAction:
+ case kExitAction:
+ openMainMenuDialog();
+ break;
+ case kSongsAction:
+ initModule("Muzik", "", nullptr);
+ break;
+
+ case kShowPDAAction:
+ _actor->loadPDA(kNavigatePage);
+ break;
+
+ case kShowAustraliaArt:
+ _actor->loadPDA("AUSART");
+ break;
+ case kShowAustraliaCloth:
+ _actor->loadPDA("AUSCLO");
+ break;
+ case kShowAustraliaFood:
+ _actor->loadPDA("AUSFOO");
+ break;
+ case kShowAustraliaHistory:
+ _actor->loadPDA("AUSHIS");
+ break;
+ case kShowAustraliaNature:
+ _actor->loadPDA("AUSNAT");
+ break;
+ case kShowAustraliaPeople:
+ _actor->loadPDA("AUSPEO");
+ break;
+ case kShowAustraliaPlaces:
+ _actor->loadPDA("AUSPLA");
+ break;
+ case kShowAustraliaReligion:
+ _actor->loadPDA("AUSREL");
+ break;
+
+ case kShowBhutanArt:
+ _actor->loadPDA("BHUART");
+ break;
+ case kShowBhutanCloth:
+ _actor->loadPDA("BHUCLO");
+ break;
+ case kShowBhutanFood:
+ _actor->loadPDA("BHUFOO");
+ break;
+ case kShowBhutanHistory:
+ _actor->loadPDA("BHUHIS");
+ break;
+ case kShowBhutanNature:
+ _actor->loadPDA("BHUNAT");
+ break;
+ case kShowBhutanPeople:
+ _actor->loadPDA("BHUPEO");
+ break;
+ case kShowBhutanPlaces:
+ _actor->loadPDA("BHUPLA");
+ break;
+ case kShowBhutanReligion:
+ _actor->loadPDA("BHUREL");
+ break;
+
+ case kShowChinaArt:
+ _actor->loadPDA("CHIART");
+ break;
+ case kShowChinaCloth:
+ _actor->loadPDA("CHICLO");
+ break;
+ case kShowChinaFood:
+ _actor->loadPDA("CHIFOO");
+ break;
+ case kShowChinaHistory:
+ _actor->loadPDA("CHIHIS");
+ break;
+ case kShowChinaNature:
+ _actor->loadPDA("CHINAT");
+ break;
+ case kShowChinaPeople:
+ _actor->loadPDA("CHIPEO");
+ break;
+ case kShowChinaPlaces:
+ _actor->loadPDA("CHIPLA");
+ break;
+ case kShowChinaReligion:
+ _actor->loadPDA("CHIREL");
+ break;
+
+ case kShowEnglandArt:
+ _actor->loadPDA("BRIART");
+ break;
+ case kShowEnglandCloth:
+ _actor->loadPDA("BRICLO");
+ break;
+ case kShowEnglandFood:
+ _actor->loadPDA("BRIFOO");
+ break;
+ case kShowEnglandHistory:
+ _actor->loadPDA("BRIHIS");
+ break;
+ case kShowEnglandNature:
+ _actor->loadPDA("BRINAT");
+ break;
+ case kShowEnglandPeople:
+ _actor->loadPDA("BRIPEO");
+ break;
+ case kShowEnglandPlaces:
+ _actor->loadPDA("BRIPLA");
+ break;
+ case kShowEnglandReligion:
+ _actor->loadPDA("BRIREL");
+ break;
+
+ case kShowEgyptArt:
+ _actor->loadPDA("BRIART");
+ break;
+ case kShowEgyptCloth:
+ _actor->loadPDA("BRICLO");
+ break;
+ case kShowEgyptFood:
+ _actor->loadPDA("BRIFOO");
+ break;
+ case kShowEgyptHistory:
+ _actor->loadPDA("BRIHIS");
+ break;
+ case kShowEgyptNature:
+ _actor->loadPDA("BRINAT");
+ break;
+ case kShowEgyptPeople:
+ _actor->loadPDA("BRIPEO");
+ break;
+ case kShowEgyptPlaces:
+ _actor->loadPDA("BRIPLA");
+ break;
+ case kShowEgyptReligion:
+ _actor->loadPDA("BRIREL");
+ break;
+
+ case kShowIndiaArt:
+ _actor->loadPDA("INDART");
+ break;
+ case kShowIndiaCloth:
+ _actor->loadPDA("INDCLO");
+ break;
+ case kShowIndiaFood:
+ _actor->loadPDA("INDFOO");
+ break;
+ case kShowIndiaHistory:
+ _actor->loadPDA("INDHIS");
+ break;
+ case kShowIndiaNature:
+ _actor->loadPDA("INDNAT");
+ break;
+ case kShowIndiaPeople:
+ _actor->loadPDA("INDPEO");
+ break;
+ case kShowIndiaPlaces:
+ _actor->loadPDA("INDPLA");
+ break;
+ case kShowIndiaReligion:
+ _actor->loadPDA("INDREL");
+ break;
+
+ case kShowContent:
+ _actor->loadPDA("TOC");
+ break;
+ case kShowGreece:
+ _actor->loadPDA("GREOVER");
+ break;
+ case kShowIndonesia:
+ _actor->loadPDA("INDOVER");
+ break;
+ case kShowIsrael:
+ _actor->loadPDA("ISROVER");
+ break;
+ case kShowKenya:
+ _actor->loadPDA("KENOVER");
+ break;
+ case kShowRussia:
+ _actor->loadPDA("SIBOVER");
+ break;
+
+ default:
+ break;
+ }
+}
+
+} // End of namespace Pink
diff --git a/engines/pink/module.mk b/engines/pink/module.mk
index ab9cc89..80422cf 100644
--- a/engines/pink/module.mk
+++ b/engines/pink/module.mk
@@ -9,6 +9,7 @@ MODULE_OBJS = \
detection.o \
director.o \
file.o \
+ gui.o \
pda_mgr.o \
pink.o \
resource_mgr.o \
diff --git a/engines/pink/pink.cpp b/engines/pink/pink.cpp
index 18e1dcb..2f645c7 100644
--- a/engines/pink/pink.cpp
+++ b/engines/pink/pink.cpp
@@ -76,9 +76,9 @@ Common::Error PinkEngine::init() {
_console = new Console(this);
- _director = new Director(exeResources);
+ _director = new Director();
- _director->getWndManager().setEnginePauseCallback(this, &pauseEngine);
+ initMenu(exeResources);
Common::String orbName;
Common::String broName;
diff --git a/engines/pink/pink.h b/engines/pink/pink.h
index da7ac49..b46d4f0 100644
--- a/engines/pink/pink.h
+++ b/engines/pink/pink.h
@@ -59,6 +59,10 @@
* missing menu
*/
+namespace Graphics {
+class MacMenu;
+}
+
namespace Pink {
class Console;
@@ -109,6 +113,8 @@ public:
void setVariable(Common::String &variable, Common::String &value);
bool checkValueOfVariable(Common::String &variable, Common::String &value);
+ void executeMenuCommand(uint id);
+
OrbFile *getOrb() { return &_orb; }
BroFile *getBro() { return _bro; }
Common::RandomSource &getRnd() { return _rnd; };
@@ -122,6 +128,8 @@ public:
private:
Common::Error init();
+ void initMenu(Common::PEResources &exeResources);
+
bool loadCursors(Common::PEResources &exeResources);
void initModule(const Common::String &moduleName, const Common::String &pageName, Archive *saveFile);
@@ -139,6 +147,7 @@ private:
OrbFile _orb;
BroFile *_bro;
+ Graphics::MacMenu *_menu;
Director *_director;
LeadActor *_actor;
Commit: 1832dd0babb0b477a59d77f15c3a8d376b37018b
https://github.com/scummvm/scummvm/commit/1832dd0babb0b477a59d77f15c3a8d376b37018b
Author: Andrei Prykhodko (whiterandrek at gmail.com)
Date: 2018-07-22T21:33:48+03:00
Commit Message:
PINK: fixed starting new game from menu in pda state
Changed paths:
engines/pink/pda_mgr.cpp
engines/pink/pda_mgr.h
engines/pink/pink.cpp
diff --git a/engines/pink/pda_mgr.cpp b/engines/pink/pda_mgr.cpp
index 29911e1..7a151c0 100644
--- a/engines/pink/pda_mgr.cpp
+++ b/engines/pink/pda_mgr.cpp
@@ -172,6 +172,9 @@ void PDAMgr::onMouseMove(Common::Point point) {
}
void PDAMgr::close() {
+ if (!_globalPage)
+ return;
+
delete _globalPage;
delete _page;
_globalPage = nullptr;
diff --git a/engines/pink/pda_mgr.h b/engines/pink/pda_mgr.h
index afcae1b..dda4cf0 100644
--- a/engines/pink/pda_mgr.h
+++ b/engines/pink/pda_mgr.h
@@ -50,6 +50,8 @@ public:
void update() { _cursorMgr.update(); }
+ void close();
+
void onLeftButtonClick(Common::Point point);
void onLeftButtonUp(Common::Point point);
void onMouseMove(Common::Point point);
@@ -60,7 +62,6 @@ public:
void setLead(LeadActor *lead) { _lead = lead; }
private:
- void close();
void loadGlobal();
void initPerilButtons();
diff --git a/engines/pink/pink.cpp b/engines/pink/pink.cpp
index 2f645c7..895300a 100644
--- a/engines/pink/pink.cpp
+++ b/engines/pink/pink.cpp
@@ -214,6 +214,7 @@ void PinkEngine::addModule(const Common::String &moduleName) {
void PinkEngine::removeModule() {
for (uint i = 0; i < _modules.size(); ++i) {
if (_module == _modules[i]) {
+ _pdaMgr.close();
_modules[i] = new ModuleProxy(_module->getName());
delete _module;
_module = nullptr;
More information about the Scummvm-git-logs
mailing list