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:
parent
2c0518e0ba
commit
b64248981b
2 changed files with 5 additions and 1 deletions
|
@ -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) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue