diff options
| author | Eugene Sandulenko | 2016-04-26 11:17:56 +0200 | 
|---|---|---|
| committer | Eugene Sandulenko | 2016-04-26 11:17:56 +0200 | 
| commit | fab749cbe6ab0155bf3db17d013ad593e009ab33 (patch) | |
| tree | 4a1e8ec91cda4a341f964cedff3db64900ee77ea | |
| parent | 587f03fab972a250611f0b989faa5dc78ee57090 (diff) | |
| download | scummvm-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.cpp | 2 | ||||
| -rw-r--r-- | engines/wage/macwindowmanager.cpp | 4 | ||||
| -rw-r--r-- | engines/wage/macwindowmanager.h | 2 | ||||
| -rw-r--r-- | engines/wage/menu.cpp | 50 | ||||
| -rw-r--r-- | engines/wage/menu.h | 5 | 
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); | 
