diff options
author | Torbjörn Andersson | 2006-01-28 18:21:46 +0000 |
---|---|---|
committer | Torbjörn Andersson | 2006-01-28 18:21:46 +0000 |
commit | 91d253c5b142b751fea3596b519d0eb0efb0c6a0 (patch) | |
tree | 67bd6fffc27aa972768869dbfab51309f8f9b2eb | |
parent | dd02251cb30221a9b3e55602afff364b76dd9b3c (diff) | |
download | scummvm-rg350-91d253c5b142b751fea3596b519d0eb0efb0c6a0.tar.gz scummvm-rg350-91d253c5b142b751fea3596b519d0eb0efb0c6a0.tar.bz2 scummvm-rg350-91d253c5b142b751fea3596b519d0eb0efb0c6a0.zip |
Applied my own patch #1416897, in an attempt to speed up list widget
redrawing. There may be regressions, but none are known at the moment.
svn-id: r20271
-rw-r--r-- | gui/ListWidget.cpp | 31 | ||||
-rw-r--r-- | gui/ListWidget.h | 2 |
2 files changed, 26 insertions, 7 deletions
diff --git a/gui/ListWidget.cpp b/gui/ListWidget.cpp index 9f3797af15..82f92d81a5 100644 --- a/gui/ListWidget.cpp +++ b/gui/ListWidget.cpp @@ -55,9 +55,15 @@ ListWidget::ListWidget(GuiObject *boss, int x, int y, int w, int h, WidgetSize w // FIXME: This flag should come from widget definition _editable = true; + + _textWidth = new int[_entriesPerPage]; + + for (int i = 0; i < _entriesPerPage; i++) + _textWidth[i] = 0; } ListWidget::~ListWidget() { + delete[] _textWidth; } void ListWidget::setSelected(int item) { @@ -316,30 +322,41 @@ void ListWidget::drawWidget(bool hilite) { if (_hasFocus) inverted = true; else - g_gui.theme()->drawWidgetBackground(Common::Rect(_x, _y + 1 + kLineHeight * i, _x+_w-1, y+fontHeight-1), _hints, Theme::kWidgetBackgroundBorderSmall); + g_gui.theme()->drawWidgetBackground(Common::Rect(_x, _y + 1 + kLineHeight * i, _x + _w - 1, y + fontHeight - 1), _hints, Theme::kWidgetBackgroundBorderSmall); } + Common::Rect r(getEditRect()); + // If in numbering mode, we first print a number prefix if (_numberingMode != kListNumberingOff) { char temp[10]; sprintf(temp, "%2d. ", (pos + _numberingMode)); buffer = temp; - g_gui.theme()->drawText(Common::Rect(_x+2, y, _x+_w-2, y+fontHeight-1), buffer, Theme::kStateEnabled, Theme::kTextAlignLeft, inverted); + g_gui.theme()->drawText(Common::Rect(_x + 2, y, _x + r.left, y + fontHeight - 1), buffer, Theme::kStateEnabled, Theme::kTextAlignLeft, inverted); } - Common::Rect r(getEditRect()); - if (_selectedItem == pos && _editMode) { + int width; + if (_selectedItem == pos && _editMode) { buffer = _editString; adjustOffset(); deltax = -_editScrollOffset; - - g_gui.theme()->drawText(Common::Rect(_x + r.left - deltax, y, _x+_w-2, y+fontHeight-1), buffer, Theme::kStateEnabled, Theme::kTextAlignLeft, inverted); + width = _w - r.left + deltax - 2; + g_gui.theme()->drawText(Common::Rect(_x + r.left - deltax, y, _x + r.left - deltax + width, y + fontHeight - 1), buffer, Theme::kStateEnabled, Theme::kTextAlignLeft, inverted); } else { + int maxWidth = _textWidth[i]; buffer = _list[pos]; deltax = 0; - g_gui.theme()->drawText(Common::Rect(_x + r.left, y, _x+_w-2, y+fontHeight-1), buffer, Theme::kStateEnabled, Theme::kTextAlignLeft, inverted); + if (_selectedItem != pos) + width = g_gui.getStringWidth(buffer); + else + width = _w - r.left - 2; + if (width > maxWidth) + maxWidth = width; + g_gui.theme()->drawText(Common::Rect(_x + r.left, y, _x + r.left + maxWidth, y + fontHeight - 1), buffer, Theme::kStateEnabled, Theme::kTextAlignLeft, inverted); } + + _textWidth[i] = width; } } diff --git a/gui/ListWidget.h b/gui/ListWidget.h index 0156733226..e5e217c9b8 100644 --- a/gui/ListWidget.h +++ b/gui/ListWidget.h @@ -100,6 +100,8 @@ protected: void lostFocusWidget(); void scrollToCurrent(); + + int *_textWidth; }; } // End of namespace GUI |