aboutsummaryrefslogtreecommitdiff
path: root/engines/sherlock/scalpel/scalpel_screen.cpp
diff options
context:
space:
mode:
authorMartin Kiewitz2016-01-30 15:52:22 +0100
committerMartin Kiewitz2016-01-30 15:52:22 +0100
commit741b868e70f48e73ba71078cc486ed20bf23a73f (patch)
treeee6d25a7704643c2e33f33fe57431f92e106db96 /engines/sherlock/scalpel/scalpel_screen.cpp
parentdc3c3a84fde54058a3b9a379e96862104adadcc6 (diff)
downloadscummvm-rg350-741b868e70f48e73ba71078cc486ed20bf23a73f.tar.gz
scummvm-rg350-741b868e70f48e73ba71078cc486ed20bf23a73f.tar.bz2
scummvm-rg350-741b868e70f48e73ba71078cc486ed20bf23a73f.zip
SHERLOCK: SS: Make load/save menu multilingual
Also change behavior of makeButton/buttonPrint to directly remove a hotkey-prefix, in case it was passed.
Diffstat (limited to 'engines/sherlock/scalpel/scalpel_screen.cpp')
-rw-r--r--engines/sherlock/scalpel/scalpel_screen.cpp43
1 files changed, 26 insertions, 17 deletions
diff --git a/engines/sherlock/scalpel/scalpel_screen.cpp b/engines/sherlock/scalpel/scalpel_screen.cpp
index fcf548f478..433d773e4f 100644
--- a/engines/sherlock/scalpel/scalpel_screen.cpp
+++ b/engines/sherlock/scalpel/scalpel_screen.cpp
@@ -31,7 +31,7 @@ ScalpelScreen::ScalpelScreen(SherlockEngine *vm) : Screen(vm) {
}
void ScalpelScreen::makeButton(const Common::Rect &bounds, int textX,
- const Common::String &str, const byte hotkey) {
+ const Common::String &str, bool textContainsHotkey) {
Surface &bb = *_backBuffer;
bb.fillRect(Common::Rect(bounds.left, bounds.top, bounds.right, bounds.top + 1), BUTTON_TOP);
@@ -40,24 +40,33 @@ void ScalpelScreen::makeButton(const Common::Rect &bounds, int textX,
bb.fillRect(Common::Rect(bounds.left + 1, bounds.bottom - 1, bounds.right, bounds.bottom), BUTTON_BOTTOM);
bb.fillRect(Common::Rect(bounds.left + 1, bounds.top + 1, bounds.right - 1, bounds.bottom - 1), BUTTON_MIDDLE);
- buttonPrint(Common::Point(textX, bounds.top), COMMAND_FOREGROUND, false, str, hotkey);
+ buttonPrint(Common::Point(textX, bounds.top), COMMAND_FOREGROUND, false, str, textContainsHotkey);
}
void ScalpelScreen::buttonPrint(const Common::Point &pt, uint color, bool slamIt,
- const Common::String &str, byte hotkey) {
- int xStart = pt.x - stringWidth(str) / 2;
+ const Common::String &str, bool textContainsHotkey) {
+ int xStart = pt.x;
+ int skipTextOffset = textContainsHotkey ? +1 : 0; // skip first char in case text contains hotkey
+
+ // Center text around given x-coordinate
+ if (textContainsHotkey) {
+ xStart -= (stringWidth(Common::String(str.c_str() + 1)) / 2);
+ } else {
+ xStart -= (stringWidth(str) / 2);
+ }
if (color == COMMAND_FOREGROUND) {
- Common::String prefixText = str;
uint16 prefixOffsetX = 0;
+ byte hotkey = str[0];
// Hotkey needs to be highlighted
- if (hotkey) {
- // Hotkey was passed, we search for the hotkey inside the button text and
- // remove it from there. We then draw the whole text as highlighted and afterward
- // the processed text again as regular text (without the hotkey)
+ if (textContainsHotkey) {
+ Common::String prefixText = Common::String(str.c_str() + 1);
uint16 prefixTextPos = 0;
+ // Hotkey was passed additionally, we search for the hotkey inside the button text and
+ // remove it from there. We then draw the whole text as highlighted and afterward
+ // the processed text again as regular text (without the hotkey)
while (prefixTextPos < prefixText.size()) {
if (prefixText[prefixTextPos] == hotkey) {
// Hotkey found, remove remaining text
@@ -69,25 +78,25 @@ void ScalpelScreen::buttonPrint(const Common::Point &pt, uint color, bool slamIt
prefixTextPos++;
}
- prefixOffsetX = stringWidth(prefixText);
- } else {
- // no hotkey passed, used first character of text
- hotkey = str[0];
+ if (prefixTextPos < prefixText.size()) {
+ // only adjust in case hotkey character was actually found
+ prefixOffsetX = stringWidth(prefixText);
+ }
}
if (slamIt) {
print(Common::Point(xStart, pt.y + 1),
- COMMAND_FOREGROUND, "%s", str.c_str());
+ COMMAND_FOREGROUND, "%s", str.c_str() + skipTextOffset);
print(Common::Point(xStart + prefixOffsetX, pt.y + 1), COMMAND_HIGHLIGHTED, "%c", hotkey);
} else {
gPrint(Common::Point(xStart, pt.y),
- COMMAND_FOREGROUND, "%s", str.c_str());
+ COMMAND_FOREGROUND, "%s", str.c_str() + skipTextOffset);
gPrint(Common::Point(xStart + prefixOffsetX, pt.y), COMMAND_HIGHLIGHTED, "%c", hotkey);
}
} else if (slamIt) {
- print(Common::Point(xStart, pt.y + 1), color, "%s", str.c_str());
+ print(Common::Point(xStart, pt.y + 1), color, "%s", str.c_str() + skipTextOffset);
} else {
- gPrint(Common::Point(xStart, pt.y), color, "%s", str.c_str());
+ gPrint(Common::Point(xStart, pt.y), color, "%s", str.c_str() + skipTextOffset);
}
}