[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