Skip to content

Commit

Permalink
WAGE: Render submenu rectangle
Browse files Browse the repository at this point in the history
  • Loading branch information
sev- committed Jan 12, 2016
1 parent a2053eb commit 5a9acaa
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 7 deletions.
14 changes: 14 additions & 0 deletions engines/wage/design.cpp
Expand Up @@ -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);

Expand Down
2 changes: 2 additions & 0 deletions engines/wage/design.h
Expand Up @@ -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;
Expand Down
21 changes: 14 additions & 7 deletions engines/wage/menu.cpp
Expand Up @@ -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));
Expand Down Expand Up @@ -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()) {
Expand Down Expand Up @@ -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);
Expand All @@ -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++)
Expand Down
2 changes: 2 additions & 0 deletions engines/wage/menu.h
Expand Up @@ -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<MenuItem *> _items;

Expand Down

0 comments on commit 5a9acaa

Please sign in to comment.