aboutsummaryrefslogtreecommitdiff
path: root/sword1/menu.cpp
diff options
context:
space:
mode:
authorTorbjörn Andersson2004-01-02 11:15:35 +0000
committerTorbjörn Andersson2004-01-02 11:15:35 +0000
commit750e18eab3beb692350cbe8e545646fc866f1090 (patch)
treee9aa8333ad414c04bbb75548224e2a8db15e2efd /sword1/menu.cpp
parentf1a9a86a147b383108322de7615afa44bf62ac8a (diff)
downloadscummvm-rg350-750e18eab3beb692350cbe8e545646fc866f1090.tar.gz
scummvm-rg350-750e18eab3beb692350cbe8e545646fc866f1090.tar.bz2
scummvm-rg350-750e18eab3beb692350cbe8e545646fc866f1090.zip
Moved the menu refreshing to a separate function so that it can be easily
accessed even when checkMenuClick() returns before reaching the end of the function. Used this to fix a menu highlighting regression. svn-id: r12083
Diffstat (limited to 'sword1/menu.cpp')
-rw-r--r--sword1/menu.cpp59
1 files changed, 31 insertions, 28 deletions
diff --git a/sword1/menu.cpp b/sword1/menu.cpp
index 5e9aa6560c..0d3592437e 100644
--- a/sword1/menu.cpp
+++ b/sword1/menu.cpp
@@ -101,35 +101,57 @@ SwordMenu::SwordMenu(SwordScreen *pScreen, SwordMouse *pMouse) {
_inMenu = 0;
}
+void SwordMenu::refreshMenus() {
+ if (_objectBarStatus == MENU_OPEN) {
+ buildMenu();
+ for (uint8 cnt = 0; cnt < 16; cnt++) {
+ if (_objects[cnt])
+ _objects[cnt]->draw();
+ else
+ _screen->showFrame(cnt * 40, 0, 0xffffffff, 0);
+ }
+ }
+ if (_subjectBarStatus == MENU_OPEN) {
+ buildSubjects();
+ for (uint8 cnt = 0; cnt < 16; cnt++) {
+ if (_subjects[cnt])
+ _subjects[cnt]->draw();
+ else
+ _screen->showFrame(cnt * 40, 440, 0xffffffff, 0);
+ }
+ }
+}
+
uint8 SwordMenu::checkMenuClick(uint8 menuType) {
- bool refreshMenus = false;
uint16 mouseEvent = _mouse->testEvent();
if (!mouseEvent)
return 0;
uint16 x, y;
_mouse->giveCoords(&x, &y);
if (menuType == MENU_BOT) {
- for (uint8 cnt = 0; cnt < SwordLogic::_scriptVars[IN_SUBJECT]; cnt++)
- if (_subjects[cnt]->wasClicked(x, y))
+ for (uint8 cnt = 0; cnt < SwordLogic::_scriptVars[IN_SUBJECT]; cnt++) {
+ if (_subjects[cnt]->wasClicked(x, y)) {
if (mouseEvent & BS1L_BUTTON_DOWN) {
SwordLogic::_scriptVars[OBJECT_HELD] = _subjectBar[cnt];
- refreshMenus = true;
+ refreshMenus();
} else if (mouseEvent & BS1L_BUTTON_UP) {
if (SwordLogic::_scriptVars[OBJECT_HELD] == _subjectBar[cnt])
return cnt + 1;
else {
SwordLogic::_scriptVars[OBJECT_HELD] = 0;
- refreshMenus = true;
+ refreshMenus();
}
}
+ }
+ }
} else {
for (uint8 cnt = 0; cnt < _inMenu; cnt++) {
- if (_objects[cnt]->wasClicked(x, y))
+ if (_objects[cnt]->wasClicked(x, y)) {
if (mouseEvent & BS1R_BUTTON_DOWN) { // looking at item
SwordLogic::_scriptVars[OBJECT_HELD] = _menuList[cnt];
SwordLogic::_scriptVars[MENU_LOOKING] = 1;
SwordLogic::_scriptVars[DEFAULT_ICON_TEXT] = _objectDefs[_menuList[cnt]].textDesc;
- refreshMenus = true;
+ refreshMenus();
} else if (mouseEvent & BS1L_BUTTON_DOWN) {
if (SwordLogic::_scriptVars[OBJECT_HELD]) {
if (SwordLogic::_scriptVars[OBJECT_HELD] == _menuList[cnt]) {
@@ -143,30 +165,11 @@ uint8 SwordMenu::checkMenuClick(uint8 menuType) {
} else {
SwordLogic::_scriptVars[OBJECT_HELD] = _menuList[cnt];
_mouse->setLuggage(_objectDefs[_menuList[cnt]].luggageIconRes, 0);
+ refreshMenus();
return cnt + 1;
}
- refreshMenus = true;
+ refreshMenus();
}
- }
- }
- if (refreshMenus) {
- if (_objectBarStatus == MENU_OPEN) {
- buildMenu();
- for (uint8 cnt = 0; cnt < 16; cnt++) {
- if (_objects[cnt])
- _objects[cnt]->draw();
- else
- _screen->showFrame(cnt * 40, 0, 0xffffffff, 0);
- }
- }
-
- if (_subjectBarStatus == MENU_OPEN) {
- buildSubjects();
- for (uint8 cnt = 0; cnt < 16; cnt++) {
- if (_subjects[cnt])
- _subjects[cnt]->draw();
- else
- _screen->showFrame(cnt * 40, 440, 0xffffffff, 0);
}
}
}