aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOystein Eftevaag2006-01-22 22:06:34 +0000
committerOystein Eftevaag2006-01-22 22:06:34 +0000
commitd2d40a0c784f457d28fcfb42a6164f424763c352 (patch)
tree2ea1ac33d9f964d6b68bc980226497865471aef8
parent90d67659dc207aadb368613a8a4412d0c34da62d (diff)
downloadscummvm-rg350-d2d40a0c784f457d28fcfb42a6164f424763c352.tar.gz
scummvm-rg350-d2d40a0c784f457d28fcfb42a6164f424763c352.tar.bz2
scummvm-rg350-d2d40a0c784f457d28fcfb42a6164f424763c352.zip
Added highlighting to the menu buttons on mouseover.
svn-id: r20142
-rw-r--r--kyra/gui.cpp76
-rw-r--r--kyra/kyra.cpp2
-rw-r--r--kyra/kyra.h5
3 files changed, 76 insertions, 7 deletions
diff --git a/kyra/gui.cpp b/kyra/gui.cpp
index cdc531644e..5bc7046d47 100644
--- a/kyra/gui.cpp
+++ b/kyra/gui.cpp
@@ -413,6 +413,7 @@ int KyraEngine::buttonMenuCallback(Button *caller) {
_menuRestoreScreen = true;
while (_displayMenu) {
+ gui_processHighlights(_menu[0]);
processButtonList(_menuButtonList);
gui_getInput();
}
@@ -458,8 +459,8 @@ void KyraEngine::initMenu(Menu menu) {
x1 = menu.x + menu.item[i].x;
y1 = menu.y + menu.item[i].y;
- x2 = menu.x + menu.item[i].x + menu.item[i].width - 1;
- y2 = menu.y + menu.item[i].y + menu.item[i].height - 1;
+ x2 = x1 + menu.item[i].width - 1;
+ y2 = y1 + menu.item[i].height - 1;
if (i < 6) {
_menuButtonData[i].nextButton = 0;
@@ -488,7 +489,7 @@ void KyraEngine::initMenu(Menu menu) {
textY = y1 + 2;
_text->printText(menu.item[i].itemString, textX - 1, textY + 1, 12, 0, 0);
- if (i == menu.field_14)
+ if (i == menu.highlightedItem)
_text->printText(menu.item[i].itemString, textX, textY, menu.item[i].highlightColor, 0, 0);
else
_text->printText(menu.item[i].itemString, textX, textY, menu.item[i].textColor, 0, 0);
@@ -602,13 +603,14 @@ int KyraEngine::gui_loadGameMenu(Button *button) {
_savegameOffset = 0;
setupSavegames(_menu[2], 5);
initMenu(_menu[2]);
+ processAllMenuButtons();
_displayLoadGameMenu = true;
_cancelLoadGameMenu = false;
while (_displayLoadGameMenu) {
gui_getInput();
- //processHighlights();
+ gui_processHighlights(_menu[2]);
processButtonList(_menuButtonList);
}
@@ -672,7 +674,7 @@ bool KyraEngine::gui_quitConfirm(const char *str) {
while (_displayQuitConfirmDialog) {
gui_getInput();
- //processHighlights();
+ gui_processHighlights(_menu[1]);
processButtonList(_menuButtonList);
}
@@ -723,5 +725,69 @@ int KyraEngine::gui_scrollDown(Button *button) {
return 0;
}
+void KyraEngine::gui_processHighlights(Menu &menu) {
+ int x1, y1, x2, y2;
+
+ for (int i = 0; i < menu.nrOfItems; i++) {
+ if (!menu.item[i].enabled)
+ continue;
+
+ x1 = menu.x + menu.item[i].x;
+ y1 = menu.y + menu.item[i].y;
+
+ x2 = x1 + menu.item[i].width;
+ y2 = y1 + menu.item[i].height;
+
+ if (_mouseX > x1 && _mouseX < x2 &&
+ _mouseY > y1 && _mouseY < y2) {
+
+ if (menu.highlightedItem != i) {
+ gui_redrawText(menu);
+ menu.highlightedItem = i;
+ gui_redrawHighlight(menu);
+ _screen->updateScreen();
+ }
+ }
+ }
+}
+
+void KyraEngine::gui_redrawText(Menu menu) {
+ int textX;
+ int i = menu.highlightedItem;
+
+ int x1 = menu.x + menu.item[i].x;
+ int y1 = menu.y + menu.item[i].y;
+
+ int x2 = x1 + menu.item[i].width - 1;
+
+ if (menu.item[i].field_12 != -1)
+ textX = x1 + menu.item[i].field_12 + 3;
+ else
+ textX = _text->getCenterStringX(menu.item[i].itemString, x1, x2);
+
+ int textY = y1 + 2;
+ _text->printText(menu.item[i].itemString, textX - 1, textY + 1, 12, 0, 0);
+ _text->printText(menu.item[i].itemString, textX, textY, menu.item[i].textColor, 0, 0);
+}
+
+void KyraEngine::gui_redrawHighlight(Menu menu) {
+ int textX;
+ int i = menu.highlightedItem;
+
+ int x1 = menu.x + menu.item[i].x;
+ int y1 = menu.y + menu.item[i].y;
+
+ int x2 = x1 + menu.item[i].width - 1;
+
+ if (menu.item[i].field_12 != -1)
+ textX = x1 + menu.item[i].field_12 + 3;
+ else
+ textX = _text->getCenterStringX(menu.item[i].itemString, x1, x2);
+
+ int textY = y1 + 2;
+ _text->printText(menu.item[i].itemString, textX - 1, textY + 1, 12, 0, 0);
+ _text->printText(menu.item[i].itemString, textX, textY, menu.item[i].highlightColor, 0, 0);
+}
+
} // end of namespace Kyra
diff --git a/kyra/kyra.cpp b/kyra/kyra.cpp
index 307bc2d02f..554ad9934a 100644
--- a/kyra/kyra.cpp
+++ b/kyra/kyra.cpp
@@ -730,7 +730,7 @@ void KyraEngine::mainLoop() {
}
void KyraEngine::quitGame() {
- res_unloadResources();
+ res_unloadResources(RES_ALL);
for (int i = 0; i < ARRAYSIZE(_movieObjects); ++i) {
_movieObjects[i]->close();
diff --git a/kyra/kyra.h b/kyra/kyra.h
index dd6f5f66f3..462049ceb8 100644
--- a/kyra/kyra.h
+++ b/kyra/kyra.h
@@ -205,7 +205,7 @@ struct Menu {
uint8 textColor;
int16 field_10;
uint16 field_12;
- uint16 field_14;
+ uint16 highlightedItem;
uint8 nrOfItems;
int16 scrollUpBtnX;
int16 scrollUpBtnY;
@@ -672,6 +672,9 @@ protected:
bool gui_quitConfirm(const char *str);
void gui_getInput();
+ void gui_redrawText(Menu menu);
+ void gui_redrawHighlight(Menu menu);
+ void gui_processHighlights(Menu &menu);
uint8 _game;
bool _fastMode;