ZVISION: Limit input text to the width of the input control

This is to prevent the player from entering ridiculously long
savegame descriptions.
This commit is contained in:
Torbjörn Andersson 2015-02-08 13:56:01 +01:00
parent b7b4e9cc58
commit 8725f2cff2
2 changed files with 14 additions and 1 deletions

View File

@ -110,6 +110,10 @@ InputControl::InputControl(ZVision *engine, uint32 key, Common::SeekableReadStre
_engine->getScriptManager()->trimCommentsAndWhiteSpace(&line);
getParams(line, param, values);
}
_maxTxtWidth = _textRectangle.width();
if (_animation)
_maxTxtWidth -= _animation->getWidth();
}
InputControl::~InputControl() {
@ -208,12 +212,20 @@ bool InputControl::process(uint32 deltaTimeInMillis) {
Graphics::Surface txt;
txt.copyFrom(*_background);
int32 oldTxtWidth = _txtWidth;
if (!_readOnly || !_focused)
_txtWidth = _engine->getTextRenderer()->drawTxt(_currentInputText, _stringInit, txt);
else
_txtWidth = _engine->getTextRenderer()->drawTxt(_currentInputText, _stringChooserInit, txt);
_engine->getRenderManager()->blitSurfaceToBkg(txt, _textRectangle.left, _textRectangle.top);
if (_readOnly || _txtWidth <= _maxTxtWidth)
_engine->getRenderManager()->blitSurfaceToBkg(txt, _textRectangle.left, _textRectangle.top);
else {
// Assume the last character caused the overflow.
_currentInputText.deleteLastChar();
_txtWidth = oldTxtWidth;
}
txt.free();
}

View File

@ -56,6 +56,7 @@ private:
bool _readOnly;
int16 _txtWidth;
int16 _maxTxtWidth;
Video::VideoDecoder *_animation;
int32 _frameDelay;
int16 _frame;