aboutsummaryrefslogtreecommitdiff
path: root/engines/scumm
diff options
context:
space:
mode:
authorVicent Marti2009-07-16 17:29:31 +0000
committerVicent Marti2009-07-16 17:29:31 +0000
commitaf289bdb03d7f0a5e8f01c03e462f230835e0077 (patch)
treea91e3a7763d9155b2fbeda88b34964133b627afb /engines/scumm
parentff75d68f1ca292733b601b33ab3cfe4aab670174 (diff)
downloadscummvm-rg350-af289bdb03d7f0a5e8f01c03e462f230835e0077.tar.gz
scummvm-rg350-af289bdb03d7f0a5e8f01c03e462f230835e0077.tar.bz2
scummvm-rg350-af289bdb03d7f0a5e8f01c03e462f230835e0077.zip
Fixed bug 2820514 ("Help dialog causes crash")
svn-id: r42537
Diffstat (limited to 'engines/scumm')
-rw-r--r--engines/scumm/dialogs.cpp16
-rw-r--r--engines/scumm/dialogs.h1
2 files changed, 13 insertions, 4 deletions
diff --git a/engines/scumm/dialogs.cpp b/engines/scumm/dialogs.cpp
index 9fb107f9fc..54ade5b7ca 100644
--- a/engines/scumm/dialogs.cpp
+++ b/engines/scumm/dialogs.cpp
@@ -641,6 +641,8 @@ HelpDialog::HelpDialog(const GameSettings &game)
new GUI::ButtonWidget(this, "ScummHelp.Close", "Close", kCloseCmd, 'C');
_prevButton->clearFlags(WIDGET_ENABLED);
+ _numLines = HELP_NUM_LINES;
+
// Dummy entries
for (int i = 0; i < HELP_NUM_LINES; i++) {
_key[i] = new StaticTextWidget(this, 0, 0, 10, 10, "", Graphics::kTextAlignRight);
@@ -658,15 +660,20 @@ void HelpDialog::reflowLayout() {
g_gui.xmlEval()->getWidgetData("ScummHelp.HelpText", x, y, w, h);
+ /* Make sure than we don't have more lines than what we can fit
+ * on the space that the layout reserves for text */
+ _numLines = MIN(HELP_NUM_LINES, (int)(h / lineHeight));
+
+
int keyW = w * 20 / 100;
int dscX = x + keyW + 32;
int dscW = w * 80 / 100;
int xoff = (_w >> 1) - (w >> 1);
- for (int i = 0; i < HELP_NUM_LINES; i++) {
- _key[i]->resize(xoff + x, y + lineHeight * i, keyW, lineHeight + 2);
- _dsc[i]->resize(xoff + dscX, y + lineHeight * i, dscW, lineHeight + 2);
+ for (int i = 0; i < _numLines; i++) {
+ _key[i]->resize(xoff + x, y + lineHeight * i, keyW, lineHeight);
+ _dsc[i]->resize(xoff + dscX, y + lineHeight * i, dscW, lineHeight);
}
displayKeyBindings();
@@ -675,6 +682,7 @@ void HelpDialog::reflowLayout() {
void HelpDialog::displayKeyBindings() {
String titleStr, *keyStr, *dscStr;
+ int i;
#ifndef __DS__
ScummHelp::updateStrings(_game.id, _game.version, _game.platform, _page, titleStr, keyStr, dscStr);
@@ -684,7 +692,7 @@ void HelpDialog::displayKeyBindings() {
#endif
_title->setLabel(titleStr);
- for (int i = 0; i < HELP_NUM_LINES; i++) {
+ for (i = 0; i < _numLines; i++) {
_key[i]->setLabel(keyStr[i]);
_dsc[i]->setLabel(dscStr[i]);
}
diff --git a/engines/scumm/dialogs.h b/engines/scumm/dialogs.h
index 290b3450dc..996ff0e7a7 100644
--- a/engines/scumm/dialogs.h
+++ b/engines/scumm/dialogs.h
@@ -124,6 +124,7 @@ protected:
int _page;
int _numPages;
+ int _numLines;
const GameSettings _game;