diff options
author | Bastien Bouclet | 2018-01-27 15:04:10 +0100 |
---|---|---|
committer | Bastien Bouclet | 2018-01-27 18:12:53 +0100 |
commit | 7dc602f35287223f9a335d5f19d92b4f8951c04d (patch) | |
tree | f9f5f086cac88673e517db26744cf596163425c5 /gui | |
parent | 5878c618c931f6c600dda0b156d96f909013779b (diff) | |
download | scummvm-rg350-7dc602f35287223f9a335d5f19d92b4f8951c04d.tar.gz scummvm-rg350-7dc602f35287223f9a335d5f19d92b4f8951c04d.tar.bz2 scummvm-rg350-7dc602f35287223f9a335d5f19d92b4f8951c04d.zip |
GUI: Fix the caret drawing over the scroll bar in the list widget
Also remove the unused linesWidth variable and fix the hlLeftPadding and
hlRightPadding widget attributes to actually work.
There are still issues remaining with the caret in the list widget due
to the ellipsis being used to shorten long text. Ellipsis is accounted
for when drawing the text but not when computing the caret position.
Diffstat (limited to 'gui')
-rw-r--r-- | gui/widgets/list.cpp | 36 | ||||
-rw-r--r-- | gui/widgets/list.h | 3 |
2 files changed, 10 insertions, 29 deletions
diff --git a/gui/widgets/list.cpp b/gui/widgets/list.cpp index b4a5f4bf0b..df12d6fd5f 100644 --- a/gui/widgets/list.cpp +++ b/gui/widgets/list.cpp @@ -37,7 +37,6 @@ ListWidget::ListWidget(Dialog *boss, const String &name, const char *tooltip, ui : EditableWidget(boss, name, tooltip), _cmd(cmd) { _scrollBar = NULL; - _textWidth = NULL; // This ensures that _entriesPerPage is properly initialized. reflowLayout(); @@ -69,7 +68,6 @@ ListWidget::ListWidget(Dialog *boss, int x, int y, int w, int h, const char *too : EditableWidget(boss, x, y, w, h, tooltip), _cmd(cmd) { _scrollBar = NULL; - _textWidth = NULL; // This ensures that _entriesPerPage is properly initialized. reflowLayout(); @@ -97,10 +95,6 @@ ListWidget::ListWidget(Dialog *boss, int x, int y, int w, int h, const char *too _editColor = ThemeEngine::kFontColorNormal; } -ListWidget::~ListWidget() { - delete[] _textWidth; -} - bool ListWidget::containsWidget(Widget *w) const { if (w == _scrollBar || _scrollBar->containsWidget(w)) return true; @@ -502,7 +496,6 @@ void ListWidget::drawWidget() { // Draw a thin frame around the list. g_gui.theme()->drawWidgetBackgroundClip(Common::Rect(_x, _y, _x + _w, _y + _h), getBossClipRect(), 0, ThemeEngine::kWidgetBackgroundBorder); - const int scrollbarW = (_scrollBar && _scrollBar->isVisible()) ? _scrollBarWidth : 0; // Draw the list items for (i = 0, pos = _currentPos; i < _entriesPerPage && pos < len; i++, pos++) { @@ -520,13 +513,11 @@ void ListWidget::drawWidget() { // If in numbering mode, we first print a number prefix if (_numberingMode != kListNumberingOff) { buffer = Common::String::format("%2d. ", (pos + _numberingMode)); - g_gui.theme()->drawTextClip(Common::Rect(_x, y, _x + r.left + _leftPadding, y + fontHeight - 2), getBossClipRect(), - buffer, _state, Graphics::kTextAlignLeft, inverted, _leftPadding, true); + g_gui.theme()->drawTextClip(Common::Rect(_x + _hlLeftPadding, y, _x + r.left + _leftPadding, y + fontHeight - 2), + getBossClipRect(), buffer, _state, Graphics::kTextAlignLeft, inverted, _leftPadding, true); pad = 0; } - int width; - ThemeEngine::FontColor color = ThemeEngine::kFontColorNormal; if (!_listColors.empty()) { @@ -540,22 +531,21 @@ void ListWidget::drawWidget() { buffer = _editString; color = _editColor; adjustOffset(); - width = _w - r.left - _hlRightPadding - _leftPadding - scrollbarW; - g_gui.theme()->drawTextClip(Common::Rect(_x + r.left, y, _x + r.left + width, y + fontHeight - 2), getBossClipRect(), buffer, _state, - Graphics::kTextAlignLeft, inverted, pad, true, ThemeEngine::kFontStyleBold, color); + g_gui.theme()->drawTextClip(Common::Rect(_x + r.left, y, _x + r.right, y + fontHeight - 2), + getBossClipRect(), buffer, _state, + Graphics::kTextAlignLeft, inverted, pad, true, ThemeEngine::kFontStyleBold, color); } else { buffer = _list[pos]; - width = _w - r.left - scrollbarW; - g_gui.theme()->drawTextClip(Common::Rect(_x + r.left, y, _x + r.left + width, y + fontHeight - 2), getBossClipRect(), buffer, _state, - Graphics::kTextAlignLeft, inverted, pad, true, ThemeEngine::kFontStyleBold, color); + g_gui.theme()->drawTextClip(Common::Rect(_x + r.left, y, _x + r.right, y + fontHeight - 2), + getBossClipRect(), buffer, _state, + Graphics::kTextAlignLeft, inverted, pad, true, ThemeEngine::kFontStyleBold, color); } - - _textWidth[i] = width; } } Common::Rect ListWidget::getEditRect() const { - Common::Rect r(_hlLeftPadding, 0, _w - _hlLeftPadding - _hlRightPadding, kLineHeight - 2); + const int scrollbarW = (_scrollBar && _scrollBar->isVisible()) ? _scrollBarWidth : 0; + Common::Rect r(_hlLeftPadding, 0, _w - _hlRightPadding - scrollbarW, kLineHeight - 2); const int offset = (_selectedItem - _currentPos) * kLineHeight + _topPadding; r.top += offset; r.bottom += offset; @@ -668,12 +658,6 @@ void ListWidget::reflowLayout() { _entriesPerPage = fracToInt(entriesPerPage); assert(_entriesPerPage > 0); - delete[] _textWidth; - _textWidth = new int[_entriesPerPage]; - - for (int i = 0; i < _entriesPerPage; i++) - _textWidth[i] = 0; - if (_scrollBar) { _scrollBar->resize(_w - _scrollBarWidth + 1, 0, _scrollBarWidth, _h); scrollBarRecalc(); diff --git a/gui/widgets/list.h b/gui/widgets/list.h index 44366be3e9..57e677e91e 100644 --- a/gui/widgets/list.h +++ b/gui/widgets/list.h @@ -87,7 +87,6 @@ protected: public: ListWidget(Dialog *boss, const String &name, const char *tooltip = 0, uint32 cmd = 0); ListWidget(Dialog *boss, int x, int y, int w, int h, const char *tooltip = 0, uint32 cmd = 0); - virtual ~ListWidget(); virtual bool containsWidget(Widget *) const; virtual Widget *findWidget(int x, int y); @@ -149,8 +148,6 @@ protected: void lostFocusWidget(); void checkBounds(); void scrollToCurrent(); - - int *_textWidth; }; } // End of namespace GUI |