diff options
author | Martin Kiewitz | 2016-01-30 15:52:22 +0100 |
---|---|---|
committer | Martin Kiewitz | 2016-01-30 15:52:22 +0100 |
commit | 741b868e70f48e73ba71078cc486ed20bf23a73f (patch) | |
tree | ee6d25a7704643c2e33f33fe57431f92e106db96 /engines/sherlock/scalpel/scalpel_screen.cpp | |
parent | dc3c3a84fde54058a3b9a379e96862104adadcc6 (diff) | |
download | scummvm-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.cpp | 43 |
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); } } |