aboutsummaryrefslogtreecommitdiff
path: root/gui/ThemeEngine.cpp
diff options
context:
space:
mode:
authorEugene Sandulenko2017-03-01 08:17:34 +0100
committerGitHub2017-03-01 08:17:34 +0100
commit7c259fe1295fda60f3d6b5f5c6e3efd67ca9b852 (patch)
tree9283a347b32a95a389ca97e901967131ad8e815d /gui/ThemeEngine.cpp
parentace2fa77eb910b823b45c54d6608b913ea004071 (diff)
parent7dd1a1e4f52b962ebcfe78584acdb9242797028f (diff)
downloadscummvm-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.cpp28
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);