[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