[Scummvm-cvs-logs] scummvm master -> 056767bfb9732251f3c4c2d59d72b3c18c3e287a

sev- sev at scummvm.org
Tue Apr 26 19:55:59 CEST 2016


This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
587f03fab9 WAGE: Moved menu shortcut processing to Menu class
fab749cbe6 WAGE: More abstraction to menu rendering
d26c12c497 WAGE: Reuse WM _screen for Menu
056767bfb9 WAGE: Fix background restoring on menu navigation


Commit: 587f03fab972a250611f0b989faa5dc78ee57090
    https://github.com/scummvm/scummvm/commit/587f03fab972a250611f0b989faa5dc78ee57090
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-04-26T11:05:39+02:00

Commit Message:
WAGE: Moved menu shortcut processing to Menu class

Changed paths:
    engines/wage/gui.cpp
    engines/wage/gui.h
    engines/wage/menu.cpp
    engines/wage/menu.h
    engines/wage/wage.cpp



diff --git a/engines/wage/gui.cpp b/engines/wage/gui.cpp
index 6fcbbc3..1feed36 100644
--- a/engines/wage/gui.cpp
+++ b/engines/wage/gui.cpp
@@ -470,10 +470,6 @@ void Gui::regenWeaponsMenu() {
 	_menu->regenWeaponsMenu();
 }
 
-void Gui::processMenuShortCut(byte flags, uint16 ascii) {
-	_menu->processMenuShortCut(flags, ascii);
-}
-
 void Gui::pushArrowCursor() {
 	CursorMan.pushCursor(macCursorArrow, 11, 16, 1, 1, 3);
 }
diff --git a/engines/wage/gui.h b/engines/wage/gui.h
index cfc7a09..d0af24c 100644
--- a/engines/wage/gui.h
+++ b/engines/wage/gui.h
@@ -96,7 +96,6 @@ public:
 	const Graphics::Font *getFont(const char *name, Graphics::FontManager::FontUsage fallback);
 	void regenCommandsMenu();
 	void regenWeaponsMenu();
-	void processMenuShortCut(byte flags, uint16 ascii);
 	void pushArrowCursor();
 	void popCursor();
 
diff --git a/engines/wage/menu.cpp b/engines/wage/menu.cpp
index 425f2d6..18b1f04 100644
--- a/engines/wage/menu.cpp
+++ b/engines/wage/menu.cpp
@@ -105,9 +105,6 @@ struct MenuData {
 };
 
 Menu::Menu(int id, Gui *gui) : BaseMacWindow(id), _gui(gui) {
-	assert(_gui->_engine);
-	assert(_gui->_engine->_world);
-
 	_font = getMenuFont();
 
 	MenuItem *about = new MenuItem(_gui->_builtInFonts ? "\xa9" : "\xf0"); // (c) Symbol as the most resembling apple
@@ -447,12 +444,29 @@ void Menu::renderSubmenu(MenuItem *menu) {
 }
 
 bool Menu::processEvent(Common::Event &event) {
-	if (event.type == Common::EVENT_LBUTTONDOWN)
+	switch (event.type) {
+	case Common::EVENT_KEYDOWN:
+		return keyEvent(event);
+	case Common::EVENT_LBUTTONDOWN:
 		return mouseClick(event.mouse.x, event.mouse.y);
-	else if (event.type == Common::EVENT_LBUTTONUP)
+	case Common::EVENT_LBUTTONUP:
 		return mouseRelease(event.mouse.x, event.mouse.y);
-	else if (event.type == Common::EVENT_MOUSEMOVE)
+	case Common::EVENT_MOUSEMOVE:
 		return mouseMove(event.mouse.x, event.mouse.y);
+	default:
+		return false;
+	}
+}
+
+bool Menu::keyEvent(Common::Event &event) {
+	if (event.type != Common::EVENT_KEYDOWN)
+		return false;
+
+	if (event.kbd.flags & (Common::KBD_ALT | Common::KBD_CTRL | Common::KBD_META)) {
+		if (event.kbd.ascii >= 0x20 && event.kbd.ascii <= 0x7f) {
+			return processMenuShortCut(event.kbd.flags, event.kbd.ascii);
+		}
+	}
 
 	return false;
 }
@@ -563,7 +577,7 @@ void Menu::executeCommand(MenuSubItem *subitem) {
 	}
 }
 
-void Menu::processMenuShortCut(byte flags, uint16 ascii) {
+bool Menu::processMenuShortCut(byte flags, uint16 ascii) {
 	ascii = tolower(ascii);
 
 	if (flags & (Common::KBD_CTRL | Common::KBD_META)) {
@@ -571,9 +585,11 @@ void Menu::processMenuShortCut(byte flags, uint16 ascii) {
 			for (uint j = 0; j < _items[i]->subitems.size(); j++)
 				if (_items[i]->subitems[j]->enabled && tolower(_items[i]->subitems[j]->shortcut) == ascii) {
 					executeCommand(_items[i]->subitems[j]);
-					break;
+					return true;
 				}
 	}
+
+	return false;
 }
 
 void Menu::enableCommand(int menunum, int action, bool state) {
diff --git a/engines/wage/menu.h b/engines/wage/menu.h
index 5118112..fba59bb 100644
--- a/engines/wage/menu.h
+++ b/engines/wage/menu.h
@@ -100,7 +100,6 @@ public:
 
 	void regenCommandsMenu();
 	void regenWeaponsMenu();
-	void processMenuShortCut(byte flags, uint16 ascii);
 	void enableCommand(int menunum, int action, bool state);
 	void disableAllMenus();
 
@@ -124,10 +123,13 @@ private:
 	void createWeaponsMenu(MenuItem *menu);
 	void executeCommand(MenuSubItem *subitem);
 
+	bool keyEvent(Common::Event &event);
 	bool mouseClick(int x, int y);
 	bool mouseRelease(int x, int y);
 	bool mouseMove(int x, int y);
 
+	bool processMenuShortCut(byte flags, uint16 ascii);
+
 	Common::Array<MenuItem *> _items;
 	MenuItem *_weapons;
 	MenuItem *_commands;
diff --git a/engines/wage/wage.cpp b/engines/wage/wage.cpp
index be79b14..567e276 100644
--- a/engines/wage/wage.cpp
+++ b/engines/wage/wage.cpp
@@ -180,13 +180,6 @@ void WageEngine::processEvents() {
 					break;
 				}
 
-				if (event.kbd.flags & (Common::KBD_ALT | Common::KBD_CTRL | Common::KBD_META)) {
-					if (event.kbd.ascii >= 0x20 && event.kbd.ascii <= 0x7f) {
-						_gui->processMenuShortCut(event.kbd.flags, event.kbd.ascii);
-					}
-					break;
-				}
-
 				if (event.kbd.ascii >= 0x20 && event.kbd.ascii <= 0x7f) {
 					_inputText += (char)event.kbd.ascii;
 					_gui->drawInput();


Commit: fab749cbe6ab0155bf3db17d013ad593e009ab33
    https://github.com/scummvm/scummvm/commit/fab749cbe6ab0155bf3db17d013ad593e009ab33
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-04-26T11:17:56+02:00

Commit Message:
WAGE: More abstraction to menu rendering

Changed paths:
    engines/wage/gui.cpp
    engines/wage/macwindowmanager.cpp
    engines/wage/macwindowmanager.h
    engines/wage/menu.cpp
    engines/wage/menu.h



diff --git a/engines/wage/gui.cpp b/engines/wage/gui.cpp
index 1feed36..c49b1ff 100644
--- a/engines/wage/gui.cpp
+++ b/engines/wage/gui.cpp
@@ -186,7 +186,7 @@ Gui::Gui(WageEngine *engine) {
 
 	g_system->getTimerManager()->installTimerProc(&cursorTimerHandler, 200000, this, "wageCursor");
 
-	_menu = _wm.addMenu(this);
+	_menu = _wm.addMenu(&_screen, this);
 
 	_sceneWindow = _wm.addWindow(false, false);
 	_sceneWindow->setCallback(sceneWindowCallback, this);
diff --git a/engines/wage/macwindowmanager.cpp b/engines/wage/macwindowmanager.cpp
index b143f90..cef7f0ab 100644
--- a/engines/wage/macwindowmanager.cpp
+++ b/engines/wage/macwindowmanager.cpp
@@ -100,8 +100,8 @@ MacWindow *MacWindowManager::addWindow(bool scrollable, bool resizable) {
     return w;
 }
 
-Menu *MacWindowManager::addMenu(Gui *g) {
-	_menu = new Menu(_lastId, g);
+Menu *MacWindowManager::addMenu(Graphics::ManagedSurface *screen, Gui *g) {
+	_menu = new Menu(_lastId, screen, g);
 
 	_windows.push_back(_menu);
 
diff --git a/engines/wage/macwindowmanager.h b/engines/wage/macwindowmanager.h
index 91d426e..04cb8d0 100644
--- a/engines/wage/macwindowmanager.h
+++ b/engines/wage/macwindowmanager.h
@@ -61,7 +61,7 @@ public:
 	void setScreen(Graphics::ManagedSurface *screen) { _screen = screen; }
 
 	MacWindow *addWindow(bool scrollable, bool resizable);
-	Menu *addMenu(Gui *gui);
+	Menu *addMenu(Graphics::ManagedSurface *screen, Gui *gui);
 	void setActive(int id);
 
 	void setFullRefresh(bool redraw) { _fullRefresh = true; }
diff --git a/engines/wage/menu.cpp b/engines/wage/menu.cpp
index 18b1f04..03757f5 100644
--- a/engines/wage/menu.cpp
+++ b/engines/wage/menu.cpp
@@ -104,7 +104,7 @@ struct MenuData {
 	{ 0, NULL,			0, 0, false }
 };
 
-Menu::Menu(int id, Gui *gui) : BaseMacWindow(id), _gui(gui) {
+Menu::Menu(int id, Graphics::ManagedSurface *screen, Gui *gui) : BaseMacWindow(id), _screen(screen), _gui(gui) {
 	_font = getMenuFont();
 
 	MenuItem *about = new MenuItem(_gui->_builtInFonts ? "\xa9" : "\xf0"); // (c) Symbol as the most resembling apple
@@ -157,15 +157,15 @@ Menu::Menu(int id, Gui *gui) : BaseMacWindow(id), _gui(gui) {
 
 	_bbox.left = 0;
 	_bbox.top = 0;
-	_bbox.right = _gui->_screen.w - 1;
+	_bbox.right = _screen->w - 1;
 	_bbox.bottom = kMenuHeight - 1;
 
 	_menuActivated = false;
 	_activeItem = -1;
 	_activeSubItem = -1;
 
-	_screenCopy.create(_gui->_screen.w, _gui->_screen.h, Graphics::PixelFormat::createFormatCLUT8());
-	_tempSurface.create(_gui->_screen.w, _font->getFontHeight(), Graphics::PixelFormat::createFormatCLUT8());
+	_screenCopy.create(_screen->w, _screen->h, Graphics::PixelFormat::createFormatCLUT8());
+	_tempSurface.create(_screen->w, _font->getFontHeight(), Graphics::PixelFormat::createFormatCLUT8());
 }
 
 Menu::~Menu() {
@@ -343,11 +343,11 @@ bool Menu::draw(Graphics::ManagedSurface *g, bool forceRedraw) {
 
 	_contentIsDirty = true;
 
-	Design::drawFilledRoundRect(&_gui->_screen, r, kDesktopArc, kColorWhite, _gui->_patterns, kPatternSolid);
+	Design::drawFilledRoundRect(g, r, kDesktopArc, kColorWhite, _gui->_patterns, kPatternSolid);
 	r.top = 7;
-	Design::drawFilledRect(&_gui->_screen, r, kColorWhite, _gui->_patterns, kPatternSolid);
+	Design::drawFilledRect(g, r, kColorWhite, _gui->_patterns, kPatternSolid);
 	r.top = kMenuHeight - 1;
-	Design::drawFilledRect(&_gui->_screen, r, kColorBlack, _gui->_patterns, kPatternSolid);
+	Design::drawFilledRect(g, r, kColorBlack, _gui->_patterns, kPatternSolid);
 
 	for (uint i = 0; i < _items.size(); i++) {
 		int color = kColorBlack;
@@ -359,31 +359,31 @@ bool Menu::draw(Graphics::ManagedSurface *g, bool forceRedraw) {
 			hbox.left -= 1;
 			hbox.right += 2;
 
-			Design::drawFilledRect(&_gui->_screen, hbox, kColorBlack, _gui->_patterns, kPatternSolid);
+			Design::drawFilledRect(g, hbox, kColorBlack, _gui->_patterns, kPatternSolid);
 			color = kColorWhite;
 
 			if (!it->subitems.empty())
-				renderSubmenu(it);
+				renderSubmenu(g, it);
 		}
 
-		_font->drawString(&_gui->_screen, it->name, it->bbox.left + kMenuLeftMargin, it->bbox.top + (_gui->_builtInFonts ? 2 : 1), it->bbox.width(), color);
+		_font->drawString(g, it->name, it->bbox.left + kMenuLeftMargin, it->bbox.top + (_gui->_builtInFonts ? 2 : 1), it->bbox.width(), color);
 	}
 
-	g_system->copyRectToScreen(_gui->_screen.getPixels(), _gui->_screen.pitch, 0, 0, _gui->_screen.w, kMenuHeight);
+	g_system->copyRectToScreen(g->getPixels(), g->pitch, 0, 0, g->w, kMenuHeight);
 
 	return true;
 }
 
-void Menu::renderSubmenu(MenuItem *menu) {
+void Menu::renderSubmenu(Graphics::ManagedSurface *g, MenuItem *menu) {
 	Common::Rect *r = &menu->subbbox;
 
 	if (r->width() == 0 || r->height() == 0)
 		return;
 
-	Design::drawFilledRect(&_gui->_screen, *r, kColorWhite, _gui->_patterns, kPatternSolid);
-	Design::drawRect(&_gui->_screen, *r, 1, kColorBlack, _gui->_patterns, kPatternSolid);
-	Design::drawVLine(&_gui->_screen, r->right + 1, r->top + 3, r->bottom + 1, 1, kColorBlack, _gui->_patterns, kPatternSolid);
-	Design::drawHLine(&_gui->_screen, r->left + 3, r->right + 1, r->bottom + 1, 1, kColorBlack, _gui->_patterns, kPatternSolid);
+	Design::drawFilledRect(g, *r, kColorWhite, _gui->_patterns, kPatternSolid);
+	Design::drawRect(g, *r, 1, kColorBlack, _gui->_patterns, kPatternSolid);
+	Design::drawVLine(g, r->right + 1, r->top + 3, r->bottom + 1, 1, kColorBlack, _gui->_patterns, kPatternSolid);
+	Design::drawHLine(g, r->left + 3, r->right + 1, r->bottom + 1, 1, kColorBlack, _gui->_patterns, kPatternSolid);
 
 	int x = r->left + kMenuDropdownPadding;
 	int y = r->top + 1;
@@ -397,11 +397,11 @@ void Menu::renderSubmenu(MenuItem *menu) {
 			color = kColorWhite;
 			Common::Rect trect(r->left, y - (_gui->_builtInFonts ? 1 : 0), r->right, y + _font->getFontHeight());
 
-			Design::drawFilledRect(&_gui->_screen, trect, kColorBlack, _gui->_patterns, kPatternSolid);
+			Design::drawFilledRect(g, trect, kColorBlack, _gui->_patterns, kPatternSolid);
 		}
 
 		if (!text.empty()) {
-			Graphics::ManagedSurface *s = &_gui->_screen;
+			Graphics::ManagedSurface *s = g;
 			int tx = x, ty = y;
 
 			if (!menu->subitems[i]->enabled) {
@@ -423,7 +423,7 @@ void Menu::renderSubmenu(MenuItem *menu) {
 				// fake it here
 				for (int ii = 0; ii < _tempSurface.h; ii++) {
 					const byte *src = (const byte *)_tempSurface.getBasePtr(0, ii);
-					byte *dst = (byte *)_gui->_screen.getBasePtr(x, y+ii);
+					byte *dst = (byte *)g->getBasePtr(x, y+ii);
 					byte pat = _gui->_patterns[kPatternCheckers2 - 1][ii % 8];
 					for (int j = 0; j < r->width(); j++) {
 						if (*src != kColorGreen && (pat & (1 << (7 - (x + j) % 8))))
@@ -434,13 +434,13 @@ void Menu::renderSubmenu(MenuItem *menu) {
 				}
 			}
 		} else { // Delimiter
-			Design::drawHLine(&_gui->_screen, r->left + 1, r->right - 1, y + kMenuDropdownItemHeight / 2, 1, kColorBlack, _gui->_patterns, kPatternStripes);
+			Design::drawHLine(g, r->left + 1, r->right - 1, y + kMenuDropdownItemHeight / 2, 1, kColorBlack, _gui->_patterns, kPatternStripes);
 		}
 
 		y += kMenuDropdownItemHeight;
 	}
 
-	g_system->copyRectToScreen(_gui->_screen.getBasePtr(r->left, r->top), _gui->_screen.pitch, r->left, r->top, r->width() + 3, r->height() + 3);
+	g_system->copyRectToScreen(g->getBasePtr(r->left, r->top), g->pitch, r->left, r->top, r->width() + 3, r->height() + 3);
 }
 
 bool Menu::processEvent(Common::Event &event) {
@@ -486,8 +486,8 @@ bool Menu::mouseClick(int x, int y) {
 					r.right += 3;
 					r.bottom += 3;
 
-					_gui->_screen.copyRectToSurface(_screenCopy, r.left, r.top, r);
-					g_system->copyRectToScreen(_gui->_screen.getBasePtr(r.left, r.top), _gui->_screen.pitch, r.left, r.top, r.width() + 1, r.height() + 1);
+					_screen->copyRectToSurface(_screenCopy, r.left, r.top, r);
+					g_system->copyRectToScreen(_screen->getBasePtr(r.left, r.top), _screen->pitch, r.left, r.top, r.width() + 1, r.height() + 1);
 				}
 
 				_activeItem = i;
@@ -503,12 +503,12 @@ bool Menu::mouseClick(int x, int y) {
 		if (numSubItem != _activeSubItem) {
 			_activeSubItem = numSubItem;
 
-			renderSubmenu(_items[_activeItem]);
+			renderSubmenu(_screen, _items[_activeItem]);
 		}
 	} else if (_menuActivated && _activeItem != -1) {
 		_activeSubItem = -1;
 
-		renderSubmenu(_items[_activeItem]);
+		renderSubmenu(_screen, _items[_activeItem]);
 	}
 
 	return false;
diff --git a/engines/wage/menu.h b/engines/wage/menu.h
index fba59bb..ed4bfa5 100644
--- a/engines/wage/menu.h
+++ b/engines/wage/menu.h
@@ -92,7 +92,7 @@ enum {
 
 class Menu : public BaseMacWindow {
 public:
-	Menu(int id, Gui *gui);
+	Menu(int id, Graphics::ManagedSurface *screen, Gui *gui);
 	~Menu();
 
 	bool draw(Graphics::ManagedSurface *g, bool forceRedraw = false);
@@ -110,6 +110,7 @@ public:
 
 private:
 	Gui *_gui;
+	Graphics::ManagedSurface *_screen;
 	Graphics::ManagedSurface _screenCopy;
 	Graphics::ManagedSurface _tempSurface;
 
@@ -118,7 +119,7 @@ private:
 	const char *getAcceleratorString(MenuSubItem *item, const char *prefix);
 	int calculateMenuWidth(MenuItem *menu);
 	void calcMenuBounds(MenuItem *menu);
-	void renderSubmenu(MenuItem *menu);
+	void renderSubmenu(Graphics::ManagedSurface *g, MenuItem *menu);
 	void createCommandsMenu(MenuItem *menu);
 	void createWeaponsMenu(MenuItem *menu);
 	void executeCommand(MenuSubItem *subitem);


Commit: d26c12c49778be525f23746c774e53c3f61852c4
    https://github.com/scummvm/scummvm/commit/d26c12c49778be525f23746c774e53c3f61852c4
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-04-26T19:35:27+02:00

Commit Message:
WAGE: Reuse WM _screen for Menu

Changed paths:
    engines/wage/gui.cpp
    engines/wage/macwindowmanager.cpp
    engines/wage/macwindowmanager.h
    engines/wage/menu.cpp
    engines/wage/menu.h



diff --git a/engines/wage/gui.cpp b/engines/wage/gui.cpp
index c49b1ff..1feed36 100644
--- a/engines/wage/gui.cpp
+++ b/engines/wage/gui.cpp
@@ -186,7 +186,7 @@ Gui::Gui(WageEngine *engine) {
 
 	g_system->getTimerManager()->installTimerProc(&cursorTimerHandler, 200000, this, "wageCursor");
 
-	_menu = _wm.addMenu(&_screen, this);
+	_menu = _wm.addMenu(this);
 
 	_sceneWindow = _wm.addWindow(false, false);
 	_sceneWindow->setCallback(sceneWindowCallback, this);
diff --git a/engines/wage/macwindowmanager.cpp b/engines/wage/macwindowmanager.cpp
index cef7f0ab..b204d1b 100644
--- a/engines/wage/macwindowmanager.cpp
+++ b/engines/wage/macwindowmanager.cpp
@@ -100,8 +100,8 @@ MacWindow *MacWindowManager::addWindow(bool scrollable, bool resizable) {
     return w;
 }
 
-Menu *MacWindowManager::addMenu(Graphics::ManagedSurface *screen, Gui *g) {
-	_menu = new Menu(_lastId, screen, g);
+Menu *MacWindowManager::addMenu(Gui *g) {
+	_menu = new Menu(_lastId, _screen->getBounds(), g);
 
 	_windows.push_back(_menu);
 
diff --git a/engines/wage/macwindowmanager.h b/engines/wage/macwindowmanager.h
index 04cb8d0..91d426e 100644
--- a/engines/wage/macwindowmanager.h
+++ b/engines/wage/macwindowmanager.h
@@ -61,7 +61,7 @@ public:
 	void setScreen(Graphics::ManagedSurface *screen) { _screen = screen; }
 
 	MacWindow *addWindow(bool scrollable, bool resizable);
-	Menu *addMenu(Graphics::ManagedSurface *screen, Gui *gui);
+	Menu *addMenu(Gui *gui);
 	void setActive(int id);
 
 	void setFullRefresh(bool redraw) { _fullRefresh = true; }
diff --git a/engines/wage/menu.cpp b/engines/wage/menu.cpp
index 03757f5..c19a199 100644
--- a/engines/wage/menu.cpp
+++ b/engines/wage/menu.cpp
@@ -104,9 +104,11 @@ struct MenuData {
 	{ 0, NULL,			0, 0, false }
 };
 
-Menu::Menu(int id, Graphics::ManagedSurface *screen, Gui *gui) : BaseMacWindow(id), _screen(screen), _gui(gui) {
+Menu::Menu(int id, const Common::Rect &bounds, Gui *gui) : BaseMacWindow(id), _gui(gui) {
 	_font = getMenuFont();
 
+	_screen.create(bounds.width(), bounds.height(), Graphics::PixelFormat::createFormatCLUT8());
+
 	MenuItem *about = new MenuItem(_gui->_builtInFonts ? "\xa9" : "\xf0"); // (c) Symbol as the most resembling apple
 	_items.push_back(about);
 	_items[0]->subitems.push_back(new MenuSubItem(_gui->_engine->_world->getAboutMenuItemName(), kMenuActionAbout));
@@ -157,15 +159,15 @@ Menu::Menu(int id, Graphics::ManagedSurface *screen, Gui *gui) : BaseMacWindow(i
 
 	_bbox.left = 0;
 	_bbox.top = 0;
-	_bbox.right = _screen->w - 1;
+	_bbox.right = _screen.w - 1;
 	_bbox.bottom = kMenuHeight - 1;
 
 	_menuActivated = false;
 	_activeItem = -1;
 	_activeSubItem = -1;
 
-	_screenCopy.create(_screen->w, _screen->h, Graphics::PixelFormat::createFormatCLUT8());
-	_tempSurface.create(_screen->w, _font->getFontHeight(), Graphics::PixelFormat::createFormatCLUT8());
+	_screenCopy.create(_screen.w, _screen.h, Graphics::PixelFormat::createFormatCLUT8());
+	_tempSurface.create(_screen.w, _font->getFontHeight(), Graphics::PixelFormat::createFormatCLUT8());
 }
 
 Menu::~Menu() {
@@ -343,11 +345,11 @@ bool Menu::draw(Graphics::ManagedSurface *g, bool forceRedraw) {
 
 	_contentIsDirty = true;
 
-	Design::drawFilledRoundRect(g, r, kDesktopArc, kColorWhite, _gui->_patterns, kPatternSolid);
+	Design::drawFilledRoundRect(&_screen, r, kDesktopArc, kColorWhite, _gui->_patterns, kPatternSolid);
 	r.top = 7;
-	Design::drawFilledRect(g, r, kColorWhite, _gui->_patterns, kPatternSolid);
+	Design::drawFilledRect(&_screen, r, kColorWhite, _gui->_patterns, kPatternSolid);
 	r.top = kMenuHeight - 1;
-	Design::drawFilledRect(g, r, kColorBlack, _gui->_patterns, kPatternSolid);
+	Design::drawFilledRect(&_screen, r, kColorBlack, _gui->_patterns, kPatternSolid);
 
 	for (uint i = 0; i < _items.size(); i++) {
 		int color = kColorBlack;
@@ -359,31 +361,31 @@ bool Menu::draw(Graphics::ManagedSurface *g, bool forceRedraw) {
 			hbox.left -= 1;
 			hbox.right += 2;
 
-			Design::drawFilledRect(g, hbox, kColorBlack, _gui->_patterns, kPatternSolid);
+			Design::drawFilledRect(&_screen, hbox, kColorBlack, _gui->_patterns, kPatternSolid);
 			color = kColorWhite;
 
 			if (!it->subitems.empty())
-				renderSubmenu(g, it);
+				renderSubmenu(it);
 		}
 
-		_font->drawString(g, it->name, it->bbox.left + kMenuLeftMargin, it->bbox.top + (_gui->_builtInFonts ? 2 : 1), it->bbox.width(), color);
+		_font->drawString(&_screen, it->name, it->bbox.left + kMenuLeftMargin, it->bbox.top + (_gui->_builtInFonts ? 2 : 1), it->bbox.width(), color);
 	}
 
-	g_system->copyRectToScreen(g->getPixels(), g->pitch, 0, 0, g->w, kMenuHeight);
+	g_system->copyRectToScreen(_screen.getPixels(), _screen.pitch, 0, 0, _screen.w, kMenuHeight);
 
 	return true;
 }
 
-void Menu::renderSubmenu(Graphics::ManagedSurface *g, MenuItem *menu) {
+void Menu::renderSubmenu(MenuItem *menu) {
 	Common::Rect *r = &menu->subbbox;
 
 	if (r->width() == 0 || r->height() == 0)
 		return;
 
-	Design::drawFilledRect(g, *r, kColorWhite, _gui->_patterns, kPatternSolid);
-	Design::drawRect(g, *r, 1, kColorBlack, _gui->_patterns, kPatternSolid);
-	Design::drawVLine(g, r->right + 1, r->top + 3, r->bottom + 1, 1, kColorBlack, _gui->_patterns, kPatternSolid);
-	Design::drawHLine(g, r->left + 3, r->right + 1, r->bottom + 1, 1, kColorBlack, _gui->_patterns, kPatternSolid);
+	Design::drawFilledRect(&_screen, *r, kColorWhite, _gui->_patterns, kPatternSolid);
+	Design::drawRect(&_screen, *r, 1, kColorBlack, _gui->_patterns, kPatternSolid);
+	Design::drawVLine(&_screen, r->right + 1, r->top + 3, r->bottom + 1, 1, kColorBlack, _gui->_patterns, kPatternSolid);
+	Design::drawHLine(&_screen, r->left + 3, r->right + 1, r->bottom + 1, 1, kColorBlack, _gui->_patterns, kPatternSolid);
 
 	int x = r->left + kMenuDropdownPadding;
 	int y = r->top + 1;
@@ -397,11 +399,11 @@ void Menu::renderSubmenu(Graphics::ManagedSurface *g, MenuItem *menu) {
 			color = kColorWhite;
 			Common::Rect trect(r->left, y - (_gui->_builtInFonts ? 1 : 0), r->right, y + _font->getFontHeight());
 
-			Design::drawFilledRect(g, trect, kColorBlack, _gui->_patterns, kPatternSolid);
+			Design::drawFilledRect(&_screen, trect, kColorBlack, _gui->_patterns, kPatternSolid);
 		}
 
 		if (!text.empty()) {
-			Graphics::ManagedSurface *s = g;
+			Graphics::ManagedSurface *s = &_screen;
 			int tx = x, ty = y;
 
 			if (!menu->subitems[i]->enabled) {
@@ -423,7 +425,7 @@ void Menu::renderSubmenu(Graphics::ManagedSurface *g, MenuItem *menu) {
 				// fake it here
 				for (int ii = 0; ii < _tempSurface.h; ii++) {
 					const byte *src = (const byte *)_tempSurface.getBasePtr(0, ii);
-					byte *dst = (byte *)g->getBasePtr(x, y+ii);
+					byte *dst = (byte *)_screen.getBasePtr(x, y+ii);
 					byte pat = _gui->_patterns[kPatternCheckers2 - 1][ii % 8];
 					for (int j = 0; j < r->width(); j++) {
 						if (*src != kColorGreen && (pat & (1 << (7 - (x + j) % 8))))
@@ -434,13 +436,13 @@ void Menu::renderSubmenu(Graphics::ManagedSurface *g, MenuItem *menu) {
 				}
 			}
 		} else { // Delimiter
-			Design::drawHLine(g, r->left + 1, r->right - 1, y + kMenuDropdownItemHeight / 2, 1, kColorBlack, _gui->_patterns, kPatternStripes);
+			Design::drawHLine(&_screen, r->left + 1, r->right - 1, y + kMenuDropdownItemHeight / 2, 1, kColorBlack, _gui->_patterns, kPatternStripes);
 		}
 
 		y += kMenuDropdownItemHeight;
 	}
 
-	g_system->copyRectToScreen(g->getBasePtr(r->left, r->top), g->pitch, r->left, r->top, r->width() + 3, r->height() + 3);
+	g_system->copyRectToScreen(_screen.getBasePtr(r->left, r->top), _screen.pitch, r->left, r->top, r->width() + 3, r->height() + 3);
 }
 
 bool Menu::processEvent(Common::Event &event) {
@@ -486,8 +488,8 @@ bool Menu::mouseClick(int x, int y) {
 					r.right += 3;
 					r.bottom += 3;
 
-					_screen->copyRectToSurface(_screenCopy, r.left, r.top, r);
-					g_system->copyRectToScreen(_screen->getBasePtr(r.left, r.top), _screen->pitch, r.left, r.top, r.width() + 1, r.height() + 1);
+					_screen.copyRectToSurface(_screenCopy, r.left, r.top, r);
+					g_system->copyRectToScreen(_screen.getBasePtr(r.left, r.top), _screen.pitch, r.left, r.top, r.width() + 1, r.height() + 1);
 				}
 
 				_activeItem = i;
@@ -503,12 +505,12 @@ bool Menu::mouseClick(int x, int y) {
 		if (numSubItem != _activeSubItem) {
 			_activeSubItem = numSubItem;
 
-			renderSubmenu(_screen, _items[_activeItem]);
+			renderSubmenu(_items[_activeItem]);
 		}
 	} else if (_menuActivated && _activeItem != -1) {
 		_activeSubItem = -1;
 
-		renderSubmenu(_screen, _items[_activeItem]);
+		renderSubmenu(_items[_activeItem]);
 	}
 
 	return false;
diff --git a/engines/wage/menu.h b/engines/wage/menu.h
index ed4bfa5..40d52ea 100644
--- a/engines/wage/menu.h
+++ b/engines/wage/menu.h
@@ -92,7 +92,7 @@ enum {
 
 class Menu : public BaseMacWindow {
 public:
-	Menu(int id, Graphics::ManagedSurface *screen, Gui *gui);
+	Menu(int id, const Common::Rect &bounds, Gui *gui);
 	~Menu();
 
 	bool draw(Graphics::ManagedSurface *g, bool forceRedraw = false);
@@ -110,7 +110,7 @@ public:
 
 private:
 	Gui *_gui;
-	Graphics::ManagedSurface *_screen;
+	Graphics::ManagedSurface _screen;
 	Graphics::ManagedSurface _screenCopy;
 	Graphics::ManagedSurface _tempSurface;
 
@@ -119,7 +119,7 @@ private:
 	const char *getAcceleratorString(MenuSubItem *item, const char *prefix);
 	int calculateMenuWidth(MenuItem *menu);
 	void calcMenuBounds(MenuItem *menu);
-	void renderSubmenu(Graphics::ManagedSurface *g, MenuItem *menu);
+	void renderSubmenu(MenuItem *menu);
 	void createCommandsMenu(MenuItem *menu);
 	void createWeaponsMenu(MenuItem *menu);
 	void executeCommand(MenuSubItem *subitem);


Commit: 056767bfb9732251f3c4c2d59d72b3c18c3e287a
    https://github.com/scummvm/scummvm/commit/056767bfb9732251f3c4c2d59d72b3c18c3e287a
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-04-26T19:38:06+02:00

Commit Message:
WAGE: Fix background restoring on menu navigation

Changed paths:
    engines/wage/menu.cpp



diff --git a/engines/wage/menu.cpp b/engines/wage/menu.cpp
index c19a199..2b84858 100644
--- a/engines/wage/menu.cpp
+++ b/engines/wage/menu.cpp
@@ -489,7 +489,7 @@ bool Menu::mouseClick(int x, int y) {
 					r.bottom += 3;
 
 					_screen.copyRectToSurface(_screenCopy, r.left, r.top, r);
-					g_system->copyRectToScreen(_screen.getBasePtr(r.left, r.top), _screen.pitch, r.left, r.top, r.width() + 1, r.height() + 1);
+					g_system->copyRectToScreen(_screen.getBasePtr(r.left, r.top), _screen.pitch, r.left, r.top, r.width(), r.height());
 				}
 
 				_activeItem = i;






More information about the Scummvm-git-logs mailing list