aboutsummaryrefslogtreecommitdiff
path: root/engines/zvision
diff options
context:
space:
mode:
authorTorbjörn Andersson2015-02-08 13:56:01 +0100
committerTorbjörn Andersson2015-02-08 13:56:01 +0100
commit8725f2cff2357049a3759f24e3fa530c25644e25 (patch)
tree7be1430462462ddee7c424386d4cfa8538f2b984 /engines/zvision
parentb7b4e9cc5899eff0810d97a848ace0fa2ede5548 (diff)
downloadscummvm-rg350-8725f2cff2357049a3759f24e3fa530c25644e25.tar.gz
scummvm-rg350-8725f2cff2357049a3759f24e3fa530c25644e25.tar.bz2
scummvm-rg350-8725f2cff2357049a3759f24e3fa530c25644e25.zip
ZVISION: Limit input text to the width of the input control
This is to prevent the player from entering ridiculously long savegame descriptions.
Diffstat (limited to 'engines/zvision')
-rw-r--r--engines/zvision/scripting/controls/input_control.cpp14
-rw-r--r--engines/zvision/scripting/controls/input_control.h1
2 files changed, 14 insertions, 1 deletions
diff --git a/engines/zvision/scripting/controls/input_control.cpp b/engines/zvision/scripting/controls/input_control.cpp
index b25aa13543..20c8e7ccbc 100644
--- a/engines/zvision/scripting/controls/input_control.cpp
+++ b/engines/zvision/scripting/controls/input_control.cpp
@@ -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();
}
diff --git a/engines/zvision/scripting/controls/input_control.h b/engines/zvision/scripting/controls/input_control.h
index e23ba0b9de..7f272e8d81 100644
--- a/engines/zvision/scripting/controls/input_control.h
+++ b/engines/zvision/scripting/controls/input_control.h
@@ -56,6 +56,7 @@ private:
bool _readOnly;
int16 _txtWidth;
+ int16 _maxTxtWidth;
Video::VideoDecoder *_animation;
int32 _frameDelay;
int16 _frame;