[Scummvm-cvs-logs] SF.net SVN: scummvm: [20757] scummvm/trunk/engines/lure

dreammaster at users.sourceforge.net dreammaster at users.sourceforge.net
Sat Feb 18 20:05:01 CET 2006


Revision: 20757
Author:   dreammaster
Date:     2006-02-18 20:04:07 -0800 (Sat, 18 Feb 2006)
ViewCVS:  http://svn.sourceforge.net/scummvm?rev=20757&view=rev

Log Message:
-----------
Changed the menu subsystem to use getReference rather than being passed in the constructor

Modified Paths:
--------------
    scummvm/trunk/engines/lure/menu.cpp
    scummvm/trunk/engines/lure/menu.h
Modified: scummvm/trunk/engines/lure/menu.cpp
===================================================================
--- scummvm/trunk/engines/lure/menu.cpp	2006-02-19 04:02:01 UTC (rev 20756)
+++ scummvm/trunk/engines/lure/menu.cpp	2006-02-19 04:04:07 UTC (rev 20757)
@@ -71,14 +71,13 @@
 
 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 @@
 }
 
 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
-		}
+	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 (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;
-				}						
+				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;
+					_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);
+					// 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 @@
 		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) {

Modified: scummvm/trunk/engines/lure/menu.h
===================================================================
--- scummvm/trunk/engines/lure/menu.h	2006-02-19 04:02:01 UTC (rev 20756)
+++ scummvm/trunk/engines/lure/menu.h	2006-02-19 04:04:07 UTC (rev 20757)
@@ -57,10 +57,6 @@
 
 class Menu {
 private:
-	OSystem &_system;
-	Screen &_screen;
-	Events &_events;
-	Mouse &_mouse;
 	MemoryBlock *_menu;
 	MenuRecord *_menus[NUM_MENUS];
 	MenuRecord *_selectedMenu;
@@ -72,7 +68,7 @@
 	void toggleHighlight(MenuRecord *menuRec);
 	void toggleHighlightItem(uint8 index);
 public:
-	Menu(OSystem &system);
+	Menu();
 	~Menu();
 	static Menu &getReference();
 	uint8 execute();







More information about the Scummvm-git-logs mailing list