From b64248981b917f7772413b0dd1af46ff6fc78d89 Mon Sep 17 00:00:00 2001 From: Joseph-Eugene Winzer Date: Wed, 23 Aug 2017 03:25:48 +0200 Subject: [PATCH] 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. --- engines/supernova/msn_def.h | 2 ++ engines/supernova/state.cpp | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/engines/supernova/msn_def.h b/engines/supernova/msn_def.h index a8c76a49dfb..884b4673507 100644 --- a/engines/supernova/msn_def.h +++ b/engines/supernova/msn_def.h @@ -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; diff --git a/engines/supernova/state.cpp b/engines/supernova/state.cpp index 98230c2fb80..28ba850b600 100644 --- a/engines/supernova/state.cpp +++ b/engines/supernova/state.cpp @@ -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) {