GUI: Add ThemeLayoutTabWidget
This commit is contained in:
parent
24963ac97d
commit
0ae4409138
6 changed files with 58 additions and 13 deletions
|
@ -91,10 +91,18 @@ void ThemeEval::addWidget(const Common::String &name, int w, int h, const Common
|
|||
typeAlign = (Graphics::TextAlign)getVar("Globals." + type + ".Align", Graphics::kTextAlignInvalid);
|
||||
}
|
||||
|
||||
ThemeLayoutWidget *widget = new ThemeLayoutWidget(_curLayout.top(), name,
|
||||
typeW == -1 ? w : typeW,
|
||||
typeH == -1 ? h : typeH,
|
||||
typeAlign == Graphics::kTextAlignInvalid ? align : typeAlign);
|
||||
ThemeLayoutWidget *widget;
|
||||
if (type == "TabWidget")
|
||||
widget = new ThemeLayoutTabWidget(_curLayout.top(), name,
|
||||
typeW == -1 ? w : typeW,
|
||||
typeH == -1 ? h : typeH,
|
||||
typeAlign == Graphics::kTextAlignInvalid ? align : typeAlign,
|
||||
getVar("Globals.TabWidget.Tab.Height", 0));
|
||||
else
|
||||
widget = new ThemeLayoutWidget(_curLayout.top(), name,
|
||||
typeW == -1 ? w : typeW,
|
||||
typeH == -1 ? h : typeH,
|
||||
typeAlign == Graphics::kTextAlignInvalid ? align : typeAlign);
|
||||
|
||||
_curLayout.top()->addChild(widget);
|
||||
setVar(_curDialog + "." + name + ".Enabled", enabled ? 1 : 0);
|
||||
|
|
|
@ -45,7 +45,8 @@ public:
|
|||
kLayoutMain,
|
||||
kLayoutVertical,
|
||||
kLayoutHorizontal,
|
||||
kLayoutWidget
|
||||
kLayoutWidget,
|
||||
kLayoutTabWidget
|
||||
};
|
||||
|
||||
ThemeLayout(ThemeLayout *p) :
|
||||
|
@ -223,6 +224,41 @@ protected:
|
|||
Common::String _name;
|
||||
};
|
||||
|
||||
class ThemeLayoutTabWidget : public ThemeLayoutWidget {
|
||||
int _tabHeight;
|
||||
|
||||
public:
|
||||
ThemeLayoutTabWidget(ThemeLayout *p, const Common::String &name, int16 w, int16 h, Graphics::TextAlign align, int tabHeight):
|
||||
ThemeLayoutWidget(p, name, w, h, align) {
|
||||
_tabHeight = tabHeight;
|
||||
}
|
||||
|
||||
void reflowLayout() {
|
||||
for (uint i = 0; i < _children.size(); ++i) {
|
||||
_children[i]->resetLayout();
|
||||
_children[i]->reflowLayout();
|
||||
}
|
||||
}
|
||||
|
||||
virtual bool getWidgetData(const Common::String &name, int16 &x, int16 &y, uint16 &w, uint16 &h) {
|
||||
if (ThemeLayoutWidget::getWidgetData(name, x, y, w, h)) {
|
||||
h -= _tabHeight;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
protected:
|
||||
LayoutType getLayoutType() { return kLayoutTabWidget; }
|
||||
|
||||
ThemeLayout *makeClone(ThemeLayout *newParent) {
|
||||
ThemeLayoutTabWidget *n = new ThemeLayoutTabWidget(*this);
|
||||
n->_parent = newParent;
|
||||
return n;
|
||||
}
|
||||
};
|
||||
|
||||
class ThemeLayoutSpacing : public ThemeLayout {
|
||||
public:
|
||||
ThemeLayoutSpacing(ThemeLayout *p, int size) : ThemeLayout(p) {
|
||||
|
|
|
@ -236,7 +236,7 @@
|
|||
|
||||
<dialog name = 'GlobalOptions' overlays = 'Dialog.Launcher.GameList' shading = 'dim'>
|
||||
<layout type = 'vertical' padding = '0, 0, 0, 0'>
|
||||
<widget name = 'TabWidget'/>
|
||||
<widget name = 'TabWidget' type = 'TabWidget'/>
|
||||
<layout type = 'horizontal' padding = '16, 16, 16, 16'>
|
||||
<space/>
|
||||
<widget name = 'Cancel'
|
||||
|
|
|
@ -554,7 +554,7 @@
|
|||
|
||||
<dialog name = 'GameOptions' overlays = 'screen' inset = '16' shading = 'dim'>
|
||||
<layout type = 'vertical' padding = '0, 0, 0, 0'>
|
||||
<widget name = 'TabWidget'/>
|
||||
<widget name = 'TabWidget' type = 'TabWidget'/>
|
||||
<layout type = 'horizontal' padding = '8, 8, 8, 8'>
|
||||
<space/>
|
||||
<widget name = 'Cancel'
|
||||
|
|
|
@ -51,10 +51,7 @@ void ScrollContainerWidget::init() {
|
|||
|
||||
void ScrollContainerWidget::recalc() {
|
||||
int scrollbarWidth = g_gui.xmlEval()->getVar("Globals.Scrollbar.Width", 0);
|
||||
|
||||
//calculate _limitH - available height (boss's height - boss's "offset")
|
||||
int d = _boss->getChildY() - _boss->getAbsY();
|
||||
_limitH = _boss->getHeight() - d;
|
||||
_limitH = _h;
|
||||
|
||||
//calculate virtual height
|
||||
const int spacing = g_gui.xmlEval()->getVar("Global.Font.Height", 16); //on the bottom
|
||||
|
|
|
@ -80,6 +80,8 @@ TabWidget::~TabWidget() {
|
|||
}
|
||||
|
||||
int16 TabWidget::getChildY() const {
|
||||
// NOTE: if you change that, make sure to do the same
|
||||
// changes in the ThemeLayoutTabWidget (gui/ThemeLayout.cpp)
|
||||
return getAbsY() + _tabHeight;
|
||||
}
|
||||
|
||||
|
@ -258,6 +260,8 @@ void TabWidget::adjustTabs(int value) {
|
|||
void TabWidget::reflowLayout() {
|
||||
Widget::reflowLayout();
|
||||
|
||||
// NOTE: if you change that, make sure to do the same
|
||||
// changes in the ThemeLayoutTabWidget (gui/ThemeLayout.cpp)
|
||||
_tabHeight = g_gui.xmlEval()->getVar("Globals.TabWidget.Tab.Height");
|
||||
_tabWidth = g_gui.xmlEval()->getVar("Globals.TabWidget.Tab.Width");
|
||||
_titleVPad = g_gui.xmlEval()->getVar("Globals.TabWidget.Tab.Padding.Top");
|
||||
|
@ -304,7 +308,7 @@ void TabWidget::drawWidget() {
|
|||
for (int i = _firstVisibleTab; i < (int)_tabs.size(); ++i) {
|
||||
tabs.push_back(_tabs[i].title);
|
||||
}
|
||||
g_gui.theme()->drawDialogBackground(Common::Rect(_x + _bodyLP, _y + _bodyTP, _x+_w-_bodyRP, _y+_h-_bodyBP), _bodyBackgroundType);
|
||||
g_gui.theme()->drawDialogBackground(Common::Rect(_x + _bodyLP, _y + _bodyTP, _x+_w-_bodyRP, _y+_h-_bodyBP+_tabHeight), _bodyBackgroundType);
|
||||
|
||||
g_gui.theme()->drawTab(Common::Rect(_x, _y, _x+_w, _y+_h), _tabHeight, _tabWidth, tabs, _activeTab - _firstVisibleTab, 0, _titleVPad);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue