SUPERNOVA: Fixes too large edit() field

Before edit() cleared the input on screen by overdrawing it from x to
the right side of the screen. This works fine for terminals but for
example setting the watches alarm time it does not.
The text font is 5x8 so overdrawing the max input length + 1 * 5 is
sufficient to clear the screen from our input and the cursor. Also if
the value ends up being too big it is clamped to the right side
of the screen.
This commit is contained in:
Joseph-Eugene Winzer 2017-08-23 03:25:48 +02:00 committed by Thierry Crozat
parent 2c0518e0ba
commit b64248981b
2 changed files with 5 additions and 1 deletions

View file

@ -27,6 +27,8 @@ namespace Supernova {
const int kScreenWidth = 320;
const int kScreenHeight = 200;
const int kFontWidth = 5;
const int kFontHeight = 8;
const int kTextSpeed[] = {19, 14, 10, 7, 4};
const int kMsecPerTick = 55;

View file

@ -980,12 +980,14 @@ void GameManager::animationOn() {
void GameManager::edit(Common::String &input, int x, int y, uint length) {
bool isEditing = true;
uint cursorIndex = input.size();
int overdrawWidth = ((length + 1) * kFontWidth > kScreenWidth - x) ?
kScreenWidth - x : (length + 1) * kFontWidth;
while (isEditing) {
_vm->_textCursorX = x;
_vm->_textCursorY = y;
_vm->_textColor = COL_EDIT;
_vm->renderBox(x, y - 1, 320 - x, 10, HGR_EDIT);
_vm->renderBox(x, y - 1, overdrawWidth, 9, HGR_EDIT);
for (uint i = 0; i < input.size(); ++i) {
// Draw char highlight depending on cursor position
if (i == cursorIndex) {