Gui::Gui(WageEngine *engine) { _engine = engine; _scene = NULL; _sceneDirty = true; _consoleDirty = true; _cursorDirty = false; _consoleFullRedraw = true; _screen.create(g_system->getWidth(), g_system->getHeight(), Graphics::PixelFormat::createFormatCLUT8()); _wm.setScreen(&_screen); _scrollPos = 0; _consoleLineHeight = 8; // Dummy value which makes sense _consoleNumLines = 24; // Dummy value _cursorX = 0; _cursorY = 0; _cursorState = false; _cursorOff = false; _inTextSelection = false; _selectionStartX = _selectionStartY = -1; _selectionEndX = _selectionEndY = -1; _inputTextLineNum = 0; g_system->getTimerManager()->installTimerProc(&cursorTimerHandler, 200000, this, "wageCursor"); _menu = _wm.addMenu(); _menu->setCommandsCallback(menuCommandsCallback, this); _menu->addStaticMenus(menuSubItems); _menu->addMenuSubItem(kMenuAbout, _engine->_world->getAboutMenuItemName(), kMenuActionAbout); _commandsMenuId = _menu->addMenuItem(_engine->_world->_commandsMenuName.c_str()); regenCommandsMenu(); if (!_engine->_world->_weaponMenuDisabled) { _weaponsMenuId = _menu->addMenuItem(_engine->_world->_weaponsMenuName.c_str()); regenWeaponsMenu(); } else { _weaponsMenuId = -1; } _menu->calcDimensions(); _sceneWindow = _wm.addWindow(false, false, false); _sceneWindow->setCallback(sceneWindowCallback, this); _consoleWindow = _wm.addWindow(true, true, true); _consoleWindow->setCallback(consoleWindowCallback, this); loadBorders(); }
Menu::Menu(Gui *gui) : _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 _items.push_back(about); _items[0]->subitems.push_back(new MenuSubItem(_gui->_engine->_world->getAboutMenuItemName(), kMenuActionAbout)); MenuItem *file = new MenuItem("File"); _items.push_back(file); MenuItem *edit = new MenuItem("Edit"); _items.push_back(edit); for (int i = 0; menuSubItems[i].menunum; i++) { const MenuData *m = &menuSubItems[i]; _items[m->menunum]->subitems.push_back(new MenuSubItem(m->title, m->action, 0, m->shortcut, m->enabled)); } _commands = new MenuItem(_gui->_engine->_world->_commandsMenuName.c_str()); _items.push_back(_commands); regenCommandsMenu(); _weapons = NULL; if (!_gui->_engine->_world->_weaponMenuDisabled) { _weapons = new MenuItem(_gui->_engine->_world->_weaponsMenuName.c_str()); _items.push_back(_weapons); regenWeaponsMenu(); } // Calculate menu dimensions int y = 1; int x = 18; for (uint i = 0; i < _items.size(); i++) { int w = _font->getStringWidth(_items[i]->name); if (_items[i]->bbox.bottom == 0) { _items[i]->bbox.left = x - kMenuLeftMargin; _items[i]->bbox.top = y; _items[i]->bbox.right = x + w + kMenuSpacing - kMenuLeftMargin; _items[i]->bbox.bottom = y + _font->getFontHeight() + (_gui->_builtInFonts ? 3 : 2); } calcMenuBounds(_items[i]); x += w + kMenuSpacing; } _bbox.left = 0; _bbox.top = 0; _bbox.right = _gui->_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()); }