aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorPaul Gilbert2006-02-19 04:04:07 +0000
committerPaul Gilbert2006-02-19 04:04:07 +0000
commitf868a59940a12a45dc34b0e0f5b8f666818a00fc (patch)
treed0a1f4498398d5d3c2e53c78194cb5f0b5cb8ee6 /engines
parent441d0a89cca4fa8f262af46082ada13e06dfa234 (diff)
downloadscummvm-rg350-f868a59940a12a45dc34b0e0f5b8f666818a00fc.tar.gz
scummvm-rg350-f868a59940a12a45dc34b0e0f5b8f666818a00fc.tar.bz2
scummvm-rg350-f868a59940a12a45dc34b0e0f5b8f666818a00fc.zip
Changed the menu subsystem to use getReference rather than being passed in the constructor
svn-id: r20757
Diffstat (limited to 'engines')
-rw-r--r--engines/lure/menu.cpp107
-rw-r--r--engines/lure/menu.h6
2 files changed, 58 insertions, 55 deletions
diff --git a/engines/lure/menu.cpp b/engines/lure/menu.cpp
index 752b11f339..57cdd751dd 100644
--- a/engines/lure/menu.cpp
+++ b/engines/lure/menu.cpp
@@ -71,14 +71,13 @@ char *MenuRecord::getEntry(uint8 index) {
static Menu *int_menu = NULL;
-Menu::Menu(OSystem &system): _system(system), _screen(Screen::getReference()),
- _events(Events::getReference()), _mouse(Mouse::getReference()) {
+Menu::Menu() {
int_menu = this;
- MemoryBlock *res = Disk::getReference().getEntry(5);
+ MemoryBlock *data = Disk::getReference().getEntry(MENU_RESOURCE_ID);
PictureDecoder decoder;
- _menu = decoder.decode(res, SCREEN_SIZE);
- delete res;
+ _menu = decoder.decode(data, SCREEN_SIZE);
+ delete data;
_menus[0] = new MenuRecord(40, 87, 20, 80, "Credits");
_menus[1] = new MenuRecord(127, 179, 100, 120, "Restart game,Save game,Restore game");
@@ -96,58 +95,66 @@ Menu &Menu::getReference() {
}
uint8 Menu::execute() {
- _mouse.setCursorNum(CURSOR_ARROW);
- _system.copyRectToScreen(_menu->data(), FULL_SCREEN_WIDTH, 0, 0, FULL_SCREEN_WIDTH, MENUBAR_Y_SIZE);
- _system.updateScreen();
+ OSystem &system = System::getReference();
+ Mouse &mouse = Mouse::getReference();
+ Events &events = Events::getReference();
+ Screen &screen = Screen::getReference();
+
+ mouse.setCursorNum(CURSOR_ARROW);
+ system.copyRectToScreen(_menu->data(), FULL_SCREEN_WIDTH, 0, 0,
+ FULL_SCREEN_WIDTH, MENUBAR_Y_SIZE);
+ system.updateScreen();
_selectedMenu = NULL;
_surfaceMenu = NULL;
_selectedIndex = 0;
- while (_mouse.lButton()) {
- while (_events.pollEvent()) {
- // handle events
- }
-
- if (_mouse.y() < MENUBAR_Y_SIZE)
- {
- MenuRecord *p = getMenuAt(_mouse.x());
-
- if (_selectedMenu != p) {
- // If necessary, remove prior menu
- if (_selectedMenu) {
- toggleHighlight(_selectedMenu);
- _screen.updateArea(_selectedMenu->xstart(), MENUBAR_Y_SIZE,
- _surfaceMenu->width(), _surfaceMenu->height());
- delete _surfaceMenu;
- _surfaceMenu = NULL;
- _selectedIndex = 0;
- }
-
- _selectedMenu = p;
-
- // If a new menu is selected, show it
- if (_selectedMenu) {
- toggleHighlight(_selectedMenu);
- _surfaceMenu = Surface::newDialog(
- _selectedMenu->width(), _selectedMenu->numEntries(),
- _selectedMenu->entries(), false, MENU_UNSELECTED_COLOUR);
- _surfaceMenu->copyToScreen(_selectedMenu->xstart(), MENUBAR_Y_SIZE);
+ while (mouse.lButton() || mouse.rButton()) {
+ if (events.pollEvent()) {
+ if (events.quitFlag) return MENUITEM_NONE;
+
+ if (mouse.y() < MENUBAR_Y_SIZE)
+ {
+ MenuRecord *p = getMenuAt(mouse.x());
+
+ if (_selectedMenu != p) {
+ // If necessary, remove prior menu
+ if (_selectedMenu) {
+ toggleHighlight(_selectedMenu);
+// screen.updateArea(_selectedMenu->xstart(), MENUBAR_Y_SIZE,
+// _surfaceMenu->width(), _surfaceMenu->height());
+ screen.updateArea(0, MENUBAR_Y_SIZE, FULL_SCREEN_WIDTH,
+ _surfaceMenu->height());
+ delete _surfaceMenu;
+ _surfaceMenu = NULL;
+ _selectedIndex = 0;
+ }
+
+ _selectedMenu = p;
+
+ // If a new menu is selected, show it
+ if (_selectedMenu) {
+ toggleHighlight(_selectedMenu);
+ _surfaceMenu = Surface::newDialog(
+ _selectedMenu->width(), _selectedMenu->numEntries(),
+ _selectedMenu->entries(), false, MENU_UNSELECTED_COLOUR);
+ _surfaceMenu->copyToScreen(_selectedMenu->xstart(), MENUBAR_Y_SIZE);
+ }
+
+ system.copyRectToScreen(_menu->data(), FULL_SCREEN_WIDTH, 0, 0,
+ FULL_SCREEN_WIDTH, MENUBAR_Y_SIZE);
+ system.updateScreen();
}
-
- _system.copyRectToScreen(_menu->data(), FULL_SCREEN_WIDTH, 0, 0, FULL_SCREEN_WIDTH, MENUBAR_Y_SIZE);
- _system.updateScreen();
}
- }
- // Check for changing selected index
- uint8 index = getIndexAt(_mouse.x(), _mouse.y());
- if (index != _selectedIndex) {
- if (_selectedIndex != 0) toggleHighlightItem(_selectedIndex);
- _selectedIndex = index;
- if (_selectedIndex != 0) toggleHighlightItem(_selectedIndex);
+ // Check for changing selected index
+ uint8 index = getIndexAt(mouse.x(), mouse.y());
+ if (index != _selectedIndex) {
+ if (_selectedIndex != 0) toggleHighlightItem(_selectedIndex);
+ _selectedIndex = index;
+ if (_selectedIndex != 0) toggleHighlightItem(_selectedIndex);
+ }
}
- _system.delayMillis(10);
}
if (_surfaceMenu) delete _surfaceMenu;
@@ -157,9 +164,9 @@ uint8 Menu::execute() {
toggleHighlight(_selectedMenu);
// Restore the previous screen
- _screen.update();
+ screen.update();
- if (_selectedMenu == NULL) return MENUITEM_NONE;
+ if ((_selectedMenu == NULL) || (_selectedIndex == 0)) return MENUITEM_NONE;
else if (_selectedMenu == _menus[0]) return MENUITEM_CREDITS;
else if (_selectedMenu == _menus[1]) {
switch (_selectedIndex) {
diff --git a/engines/lure/menu.h b/engines/lure/menu.h
index 96c6a1b2fd..29d07252e6 100644
--- a/engines/lure/menu.h
+++ b/engines/lure/menu.h
@@ -57,10 +57,6 @@ public:
class Menu {
private:
- OSystem &_system;
- Screen &_screen;
- Events &_events;
- Mouse &_mouse;
MemoryBlock *_menu;
MenuRecord *_menus[NUM_MENUS];
MenuRecord *_selectedMenu;
@@ -72,7 +68,7 @@ private:
void toggleHighlight(MenuRecord *menuRec);
void toggleHighlightItem(uint8 index);
public:
- Menu(OSystem &system);
+ Menu();
~Menu();
static Menu &getReference();
uint8 execute();