[Scummvm-cvs-logs] SF.net SVN: scummvm:[45839] scummvm/trunk/engines/sci/gui

m_kiewitz at users.sourceforge.net m_kiewitz at users.sourceforge.net
Wed Nov 11 21:08:55 CET 2009


Revision: 45839
          http://scummvm.svn.sourceforge.net/scummvm/?rev=45839&view=rev
Author:   m_kiewitz
Date:     2009-11-11 20:08:55 +0000 (Wed, 11 Nov 2009)

Log Message:
-----------
SCI/newgui: menu now only missing: menu invert, separators

Modified Paths:
--------------
    scummvm/trunk/engines/sci/gui/gui_menu.cpp
    scummvm/trunk/engines/sci/gui/gui_menu.h

Modified: scummvm/trunk/engines/sci/gui/gui_menu.cpp
===================================================================
--- scummvm/trunk/engines/sci/gui/gui_menu.cpp	2009-11-11 19:43:51 UTC (rev 45838)
+++ scummvm/trunk/engines/sci/gui/gui_menu.cpp	2009-11-11 20:08:55 UTC (rev 45839)
@@ -400,6 +400,7 @@
 	GuiMenuItemList::iterator itemIterator = _itemList.begin();
 	GuiMenuItemList::iterator itemEnd = _itemList.end();
 	GuiMenuItemEntry *itemEntry;
+	GuiMenuItemEntry *firstItemEntry = NULL;
 	GuiMenuItemEntry *lastItemEntry = NULL;
 
 	// Fixup menuId if needed
@@ -407,20 +408,21 @@
 		menuId = 1;
 	if (menuId == 0)
 		menuId = _listCount;
-	// Fixup itemId as well
-	if (itemId == 0)
-		itemId = 32678;
 	while (itemIterator != itemEnd) {
 		itemEntry = *itemIterator;
 		if (itemEntry->menuId == menuId) {
 			if (itemEntry->id == itemId)
 				return itemEntry;
+			if (!firstItemEntry)
+				firstItemEntry = itemEntry;
 			if ((!lastItemEntry) || (itemEntry->id > lastItemEntry->id))
 				lastItemEntry = itemEntry;
 		}
 		itemIterator++;
 	}
-	return lastItemEntry;
+	if (itemId == 0)
+		return lastItemEntry;
+	return firstItemEntry;
 }
 
 void SciGuiMenu::drawMenu(uint16 menuId) {
@@ -496,6 +498,17 @@
 	_gfx->BitsShow(_menuRect);
 }
 
+void SciGuiMenu::invertMenuSelection(uint16 itemId) {
+	Common::Rect itemRect = _menuRect;
+
+	itemRect.top += (itemId - 1) * _gfx->_curPort->fontHeight;
+	itemRect.bottom = itemRect.top + _gfx->_curPort->fontHeight + 1;
+	itemRect.left++; itemRect.right--;
+
+	_gfx->InvertRect(itemRect);
+	_gfx->BitsShow(itemRect);
+}
+
 GuiMenuItemEntry *SciGuiMenu::interactiveWithKeyboard() {
 	sci_event_t curEvent;
 	uint16 newMenuId = _curMenuId;
@@ -506,8 +519,13 @@
 	calculateTextWidth();
 	_oldPort = _gfx->SetPort(_gfx->_menuPort);
 	_barSaveHandle = _gfx->BitsSave(_gfx->_menuBarRect, SCI_SCREEN_MASK_VISUAL);
+
+	_gfx->PenColor(0);
+	_gfx->BackColor(_screen->_colorWhite);
+
 	drawBar();
 	drawMenu(curItemEntry->menuId);
+	invertMenuSelection(curItemEntry->id);
 	_gfx->BitsShow(_gfx->_menuBarRect);
 	_gfx->BitsShow(_menuRect);
 
@@ -544,7 +562,10 @@
 				if (newMenuId != curItemEntry->menuId) {
 					// Menu changed, remove cur menu and paint new menu
 					drawMenu(newMenuId);
+				} else {
+					invertMenuSelection(curItemEntry->id);
 				}
+				invertMenuSelection(newItemId);
 
 				curItemEntry = newItemEntry;
 			}

Modified: scummvm/trunk/engines/sci/gui/gui_menu.h
===================================================================
--- scummvm/trunk/engines/sci/gui/gui_menu.h	2009-11-11 19:43:51 UTC (rev 45838)
+++ scummvm/trunk/engines/sci/gui/gui_menu.h	2009-11-11 20:08:55 UTC (rev 45839)
@@ -94,6 +94,7 @@
 	GuiMenuItemEntry *findItem(uint16 menuId, uint16 itemId);
 	void calculateTextWidth();
 	void drawMenu(uint16 menuId);
+	void invertMenuSelection(uint16 itemId);
 	GuiMenuItemEntry *interactiveWithKeyboard();
 	GuiMenuItemEntry *interactiveWithMouse();
 	GuiMenuItemEntry *interactiveGetItem(uint16 menuId, uint16 itemId);


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list