diff options
author | Eugene Sandulenko | 2017-03-01 08:17:34 +0100 |
---|---|---|
committer | GitHub | 2017-03-01 08:17:34 +0100 |
commit | 7c259fe1295fda60f3d6b5f5c6e3efd67ca9b852 (patch) | |
tree | 9283a347b32a95a389ca97e901967131ad8e815d /gui/ThemeEngine.cpp | |
parent | ace2fa77eb910b823b45c54d6608b913ea004071 (diff) | |
parent | 7dd1a1e4f52b962ebcfe78584acdb9242797028f (diff) | |
download | scummvm-rg350-7c259fe1295fda60f3d6b5f5c6e3efd67ca9b852.tar.gz scummvm-rg350-7c259fe1295fda60f3d6b5f5c6e3efd67ca9b852.tar.bz2 scummvm-rg350-7c259fe1295fda60f3d6b5f5c6e3efd67ca9b852.zip |
Merge pull request #911 from wjp/tabs
GUI: Improve tab widget
Diffstat (limited to 'gui/ThemeEngine.cpp')
-rw-r--r-- | gui/ThemeEngine.cpp | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/gui/ThemeEngine.cpp b/gui/ThemeEngine.cpp index d859a88da5..8e04b35f45 100644 --- a/gui/ThemeEngine.cpp +++ b/gui/ThemeEngine.cpp @@ -1308,7 +1308,7 @@ void ThemeEngine::drawRadiobuttonClip(const Common::Rect &r, const Common::Rect queueDDClip(dd, r2, clippingRect); r2.left = r2.right + checkBoxSize; - r2.right = r.right; + r2.right = MAX(r2.left, r.right); queueDDTextClip(getTextData(dd), getTextColor(dd), r2, clippingRect, str, true, false, _widgets[kDDRadiobuttonDefault]->_textAlignH, _widgets[dd]->_textAlignV); } @@ -1519,7 +1519,7 @@ void ThemeEngine::drawPopUpWidgetClip(const Common::Rect &r, const Common::Rect queueDDClip(dd, r, clip); - if (!sel.empty()) { + if (!sel.empty() && r.width() >= 13 && r.height() >= 1) { Common::Rect text(r.left + 3, r.top + 1, r.right - 10, r.bottom); queueDDTextClip(getTextData(dd), getTextColor(dd), text, clip, sel, true, false, _widgets[dd]->_textAlignH, _widgets[dd]->_textAlignV, deltax); } @@ -1620,28 +1620,34 @@ void ThemeEngine::drawTab(const Common::Rect &r, int tabHeight, int tabWidth, co } } -void ThemeEngine::drawTabClip(const Common::Rect &r, const Common::Rect &clip, int tabHeight, int tabWidth, const Common::Array<Common::String> &tabs, int active, uint16 hints, int titleVPad, WidgetStateInfo state) { +void ThemeEngine::drawTabClip(const Common::Rect &r, const Common::Rect &clip, int tabHeight, const Common::Array<int> &tabWidths, const Common::Array<Common::String> &tabs, int active, uint16 hints, int titleVPad, WidgetStateInfo state) { if (!ready()) return; + assert(tabs.size() == tabWidths.size()); + queueDDClip(kDDTabBackground, Common::Rect(r.left, r.top, r.right, r.top + tabHeight), clip); - for (int i = 0; i < (int)tabs.size(); ++i) { - if (i == active) + int width = 0; + int activePos = -1; + for (int i = 0; i < (int)tabs.size(); width += tabWidths[i++]) { + if (r.left + width > r.right || r.left + width + tabWidths[i] > r.right) continue; - if (r.left + i * tabWidth > r.right || r.left + (i + 1) * tabWidth > r.right) + if (i == active) { + activePos = width; continue; + } - Common::Rect tabRect(r.left + i * tabWidth, r.top, r.left + (i + 1) * tabWidth, r.top + tabHeight); + + Common::Rect tabRect(r.left + width, r.top, r.left + width + tabWidths[i], r.top + tabHeight); queueDDClip(kDDTabInactive, tabRect, clip); queueDDTextClip(getTextData(kDDTabInactive), getTextColor(kDDTabInactive), tabRect, clip, tabs[i], false, false, _widgets[kDDTabInactive]->_textAlignH, _widgets[kDDTabInactive]->_textAlignV); } - if (active >= 0 && - (r.left + active * tabWidth < r.right) && (r.left + (active + 1) * tabWidth < r.right)) { - Common::Rect tabRect(r.left + active * tabWidth, r.top, r.left + (active + 1) * tabWidth, r.top + tabHeight); - const uint16 tabLeft = active * tabWidth; + if (activePos >= 0) { + Common::Rect tabRect(r.left + activePos, r.top, r.left + activePos + tabWidths[active], r.top + tabHeight); + const uint16 tabLeft = activePos; const uint16 tabRight = MAX(r.right - tabRect.right, 0); queueDDClip(kDDTabActive, tabRect, clip, (tabLeft << 16) | (tabRight & 0xFFFF)); queueDDTextClip(getTextData(kDDTabActive), getTextColor(kDDTabActive), tabRect, clip, tabs[active], false, false, _widgets[kDDTabActive]->_textAlignH, _widgets[kDDTabActive]->_textAlignV); |