aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugene Sandulenko2016-04-26 11:17:56 +0200
committerEugene Sandulenko2016-04-26 11:17:56 +0200
commitfab749cbe6ab0155bf3db17d013ad593e009ab33 (patch)
tree4a1e8ec91cda4a341f964cedff3db64900ee77ea
parent587f03fab972a250611f0b989faa5dc78ee57090 (diff)
downloadscummvm-rg350-fab749cbe6ab0155bf3db17d013ad593e009ab33.tar.gz
scummvm-rg350-fab749cbe6ab0155bf3db17d013ad593e009ab33.tar.bz2
scummvm-rg350-fab749cbe6ab0155bf3db17d013ad593e009ab33.zip
WAGE: More abstraction to menu rendering
-rw-r--r--engines/wage/gui.cpp2
-rw-r--r--engines/wage/macwindowmanager.cpp4
-rw-r--r--engines/wage/macwindowmanager.h2
-rw-r--r--engines/wage/menu.cpp50
-rw-r--r--engines/wage/menu.h5
5 files changed, 32 insertions, 31 deletions
diff --git a/engines/wage/gui.cpp b/engines/wage/gui.cpp
index 1feed364cd..c49b1ff230 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 b143f90db4..cef7f0ab19 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 91d426e9d9..04cb8d029b 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 18b1f04024..03757f51c3 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 fba59bbc0a..ed4bfa56e0 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);