[Scummvm-cvs-logs] SF.net SVN: scummvm:[47285] scummvm/trunk/engines/sci/graphics/menu.cpp
m_kiewitz at users.sourceforge.net
m_kiewitz at users.sourceforge.net
Tue Jan 12 22:49:43 CET 2010
Revision: 47285
http://scummvm.svn.sourceforge.net/scummvm/?rev=47285&view=rev
Author: m_kiewitz
Date: 2010-01-12 21:49:43 +0000 (Tue, 12 Jan 2010)
Log Message:
-----------
SCI: implemented mouse interaction while being in keyboard mode, also ignore disabled entries/separator lines within mouse mode
Modified Paths:
--------------
scummvm/trunk/engines/sci/graphics/menu.cpp
Modified: scummvm/trunk/engines/sci/graphics/menu.cpp
===================================================================
--- scummvm/trunk/engines/sci/graphics/menu.cpp 2010-01-12 21:46:50 UTC (rev 47284)
+++ scummvm/trunk/engines/sci/graphics/menu.cpp 2010-01-12 21:49:43 UTC (rev 47285)
@@ -634,7 +634,7 @@
uint16 newItemId = _curItemId;
GuiMenuItemEntry *curItemEntry = findItem(_curMenuId, _curItemId);
GuiMenuItemEntry *newItemEntry = curItemEntry;
- uint16 cursorX, curX = 0;
+ Common::Point mousePosition;
// We don't 100% follow sierra here: we select last item instead of selecting first item of first menu everytime
// Also sierra sci didnt allow mouse interaction, when menu was activated via keyboard
@@ -711,36 +711,36 @@
break;
case SCI_EVENT_MOUSE_PRESS:
+ mousePosition = _cursor->getPosition();
if (_cursor->getPosition().y < 10) {
- cursorX = _cursor->getPosition().x;
- curX = 0;
-
- for (GuiMenuList::iterator menuIterator = _list.begin(); menuIterator != _list.end(); menuIterator++) {
- if (cursorX >= curX && cursorX <= curX + (*menuIterator)->textWidth) {
- newMenuId = (*menuIterator)->id; newItemId = 1;
- newItemEntry = interactiveGetItem(newMenuId, newItemId, newMenuId != curItemEntry->menuId);
- break;
- }
-
- curX += (*menuIterator)->textWidth;
- }
-
- if ((newMenuId != curItemEntry->menuId) || (newItemId != curItemEntry->id)) {
- // paint old and new
+ // Somewhere on the menubar
+ newMenuId = mouseFindMenuSelection(mousePosition);
+ if (newMenuId) {
+ newItemId = 1;
+ newItemEntry = interactiveGetItem(newMenuId, newItemId, newMenuId != curItemEntry->menuId);
if (newMenuId != curItemEntry->menuId) {
- // Menu changed, remove cur menu and paint new menu
drawMenu(curItemEntry->menuId, newMenuId);
} else {
invertMenuSelection(curItemEntry->id);
}
invertMenuSelection(newItemId);
-
curItemEntry = newItemEntry;
+ } else {
+ newMenuId = curItemEntry->menuId;
}
+ } else {
+ // Somewhere below menubar
+ newItemId = mouseFindMenuItemSelection(mousePosition, newMenuId);
+ if (newItemId) {
+ newItemEntry = interactiveGetItem(newMenuId, newItemId, false);
+ if ((newItemEntry->enabled) && (!newItemEntry->separatorLine)) {
+ _curMenuId = newItemEntry->menuId; _curItemId = newItemEntry->id;
+ return newItemEntry;
+ }
+ newItemEntry = curItemEntry;
+ }
+ newItemId = curItemEntry->id;
}
-
- // TODO: Handle mouse clicks for the menu items of each menu (i.e. when y >= 10)
-
break;
case SCI_EVENT_NONE:
kernel_sleep(_event, 2500 / 1000);
@@ -777,6 +777,8 @@
case SCI_EVENT_MOUSE_RELEASE:
if ((curMenuId == 0) || (curItemId == 0))
return NULL;
+ if ((!curItemEntry->enabled) || (curItemEntry->separatorLine))
+ return NULL;
return curItemEntry;
case SCI_EVENT_NONE:
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