Permalink
Browse files

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.
  • Loading branch information...
Joefish committed Aug 23, 2017
1 parent e5db40e commit b176779749cdd9232fa9aca870c74021a39d271d
Showing with 5 additions and 1 deletion.
  1. +2 −0 engines/supernova/msn_def.h
  2. +3 −1 engines/supernova/state.cpp
@@ -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;
@@ -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) {

0 comments on commit b176779

Please sign in to comment.