diff --git a/engines/wage/design.cpp b/engines/wage/design.cpp index abed29bee5eb..621da1e331d4 100644 --- a/engines/wage/design.cpp +++ b/engines/wage/design.cpp @@ -442,6 +442,20 @@ void Design::drawBitmap(Graphics::Surface *surface, Common::ReadStream &in) { tmp.free(); } +void Design::drawRect(Graphics::Surface *surface, Common::Rect &rect, int thickness, int color, Patterns &patterns, byte fillType) { + plotData pd(surface, &patterns, fillType, thickness); + int x1 = rect.left; + int y1 = rect.top; + int x2 = rect.right; + int y2 = rect.bottom; + + Graphics::drawLine(x1, y1, x2, y1, kColorBlack, drawPixel, &pd); + Graphics::drawLine(x2, y1, x2, y2, kColorBlack, drawPixel, &pd); + Graphics::drawLine(x2, y2, x1, y2, kColorBlack, drawPixel, &pd); + Graphics::drawLine(x1, y2, x1, y1, kColorBlack, drawPixel, &pd); +} + + void Design::drawFilledRect(Graphics::Surface *surface, Common::Rect &rect, int color, Patterns &patterns, byte fillType) { plotData pd(surface, &patterns, fillType, 1); diff --git a/engines/wage/design.h b/engines/wage/design.h index 300d6fadf3b7..459862ed383f 100644 --- a/engines/wage/design.h +++ b/engines/wage/design.h @@ -69,9 +69,11 @@ class Design { void paint(Graphics::Surface *canvas, Patterns &patterns, int x, int y); bool isPointOpaque(int x, int y); + static void drawRect(Graphics::Surface *surface, Common::Rect &rect, int thickness, int color, Patterns &patterns, byte fillType); static void drawFilledRect(Graphics::Surface *surface, Common::Rect &rect, int color, Patterns &patterns, byte fillType); static void drawFilledRoundRect(Graphics::Surface *surface, Common::Rect &rect, int arc, int color, Patterns &patterns, byte fillType); + private: byte *_data; int _len; diff --git a/engines/wage/menu.cpp b/engines/wage/menu.cpp index c63c39b8463f..09846cf66223 100644 --- a/engines/wage/menu.cpp +++ b/engines/wage/menu.cpp @@ -122,6 +122,8 @@ struct MenuData { }; Menu::Menu(Gui *gui) : _gui(gui) { + _patterns.push_back(fillPattern); + 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)); @@ -205,7 +207,7 @@ int Menu::calculateMenuWidth(MenuItem *menu) { int maxWidth = 0; for (int i = 0; i < menu->subitems.size(); i++) { MenuSubItem *item = menu->subitems[i]; - if (item->text != NULL) { + if (item->text.size()) { Common::String text(item->text); Common::String acceleratorText(getAcceleratorString(item)); if (acceleratorText.size()) { @@ -237,22 +239,22 @@ void Menu::calcMenuBounds(MenuItem *menu) { void Menu::render() { Common::Rect r(_bbox); - Patterns p; - p.push_back(fillPattern); - Design::drawFilledRoundRect(&_gui->_screen, r, kDesktopArc, kColorWhite, p, 1); + Design::drawFilledRoundRect(&_gui->_screen, r, kDesktopArc, kColorWhite, _patterns, 1); r.top = 7; - Design::drawFilledRect(&_gui->_screen, r, kColorWhite, p, 1); + Design::drawFilledRect(&_gui->_screen, r, kColorWhite, _patterns, 1); r.top = kMenuHeight - 1; - Design::drawFilledRect(&_gui->_screen, r, kColorBlack, p, 1); + Design::drawFilledRect(&_gui->_screen, r, kColorBlack, _patterns, 1); for (int i = 0; i < _items.size(); i++) { int color = kColorBlack; MenuItem *it = _items[i]; if (_activeItem == i) { - Design::drawFilledRect(&_gui->_screen, it->bbox, kColorBlack, p, 1); + Design::drawFilledRect(&_gui->_screen, it->bbox, kColorBlack, _patterns, 1); color = kColorWhite; + + renderSubmenu(it); } _font->drawString(&_gui->_screen, it->name, it->bbox.left + kMenuLeftMargin, it->bbox.top, it->bbox.width(), color); @@ -261,6 +263,11 @@ void Menu::render() { g_system->copyRectToScreen(_gui->_screen.getPixels(), _gui->_screen.pitch, 0, 0, _gui->_screen.w, kMenuHeight); } +void Menu::renderSubmenu(MenuItem *menu) { + Design::drawFilledRect(&_gui->_screen, menu->subbbox, kColorWhite, _patterns, 1); + Design::drawRect(&_gui->_screen, menu->subbbox, 1, kColorBlack, _patterns, 1); +} + bool Menu::mouseClick(int x, int y) { if (_bbox.contains(x, y)) { for (int i = 0; i < _items.size(); i++) diff --git a/engines/wage/menu.h b/engines/wage/menu.h index a6b5db24057a..bfcb7301c134 100644 --- a/engines/wage/menu.h +++ b/engines/wage/menu.h @@ -68,12 +68,14 @@ class Menu { private: Gui *_gui; + Patterns _patterns; private: const Graphics::Font *getMenuFont(); const char *getAcceleratorString(MenuSubItem *item); int calculateMenuWidth(MenuItem *menu); void calcMenuBounds(MenuItem *menu); + void renderSubmenu(MenuItem *menu); Common::Array _items;