From fe7f28bf6c955715f1180a0da315ec4ade38fdd0 Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Sun, 24 Nov 2013 00:49:18 +0100 Subject: GUI: Do not draw text outside edit rect in EditableWidget. --- gui/widgets/editable.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'gui/widgets/editable.cpp') diff --git a/gui/widgets/editable.cpp b/gui/widgets/editable.cpp index 9ce4defde4..6f550b5642 100644 --- a/gui/widgets/editable.cpp +++ b/gui/widgets/editable.cpp @@ -261,7 +261,8 @@ void EditableWidget::drawCaret(bool erase) { int x = editRect.left; int y = editRect.top; - x += getCaretOffset(); + const int caretOffset = getCaretOffset(); + x += caretOffset; if (y < 0 || y + editRect.height() > _h) return; @@ -290,7 +291,16 @@ void EditableWidget::drawCaret(bool erase) { character = " "; } - g_gui.theme()->drawText(Common::Rect(x, y, x + width, y + editRect.height()), character, _state, Graphics::kTextAlignLeft, _inversion, 0, false, _font, ThemeEngine::kFontColorNormal, true, _textDrawableArea); + // TODO: Right now we manually prevent text from being drawn outside + // the edit area here. We might want to consider to use + // setTextDrawableArea for this. However, it seems that only + // EditTextWidget uses that but not ListWidget. Thus, one should check + // whether we can unify the drawing in the text area first to avoid + // possible glitches due to different methods used. + width = MIN(editRect.width() - caretOffset, width); + if (width > 0) { + g_gui.theme()->drawText(Common::Rect(x, y, x + width, y + editRect.height()), character, _state, Graphics::kTextAlignLeft, _inversion, 0, false, _font, ThemeEngine::kFontColorNormal, true, _textDrawableArea); + } } _caretVisible = !erase; -- cgit v1.2.3