GUI: Fix TabWidget height issues

Changes theme stx files to specify TabWidget's type. That fixes wrong TabWidget height.

Changes TabWidget's getHeight() to return not only "children" height, but also tabs height. That fixes wrong clipping area.

Changes Widget's findWidget to use getHeight(). That fixes bug when widgets in the bottom of TabWidget were not reacting to the mouse events.
This commit is contained in:
Alexander Tkachev 2016-07-12 22:37:57 +06:00
parent 53ab0b2805
commit 64a79fd1ab
9 changed files with 21 additions and 12 deletions

Binary file not shown.

View file

@ -222,7 +222,7 @@
<dialog name = 'GlobalOptions' overlays = 'Dialog.Launcher.GameList' shading = 'dim'> <dialog name = 'GlobalOptions' overlays = 'Dialog.Launcher.GameList' shading = 'dim'>
<layout type = 'vertical' padding = '0, 0, 0, 0'> <layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'TabWidget'/> <widget name = 'TabWidget' type = 'TabWidget'/>
<layout type = 'horizontal' padding = '16, 16, 16, 16'> <layout type = 'horizontal' padding = '16, 16, 16, 16'>
<space/> <space/>
<widget name = 'Cancel' <widget name = 'Cancel'
@ -551,7 +551,7 @@
<dialog name = 'GameOptions' overlays = 'Dialog.Launcher.GameList' shading = 'dim'> <dialog name = 'GameOptions' overlays = 'Dialog.Launcher.GameList' shading = 'dim'>
<layout type = 'vertical' padding = '0, 0, 0, 0' spacing = '16'> <layout type = 'vertical' padding = '0, 0, 0, 0' spacing = '16'>
<widget name = 'TabWidget'/> <widget name = 'TabWidget' type = 'TabWidget'/>
<layout type = 'horizontal' padding = '16, 16, 16, 4'> <layout type = 'horizontal' padding = '16, 16, 16, 4'>
<space/> <space/>
<widget name = 'Cancel' <widget name = 'Cancel'
@ -850,7 +850,7 @@
<dialog name = 'FluidSynthSettings' overlays = 'GlobalOptions' shading = 'dim'> <dialog name = 'FluidSynthSettings' overlays = 'GlobalOptions' shading = 'dim'>
<layout type = 'vertical' padding = '0, 0, 0, 0'> <layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'TabWidget'/> <widget name = 'TabWidget' type = 'TabWidget'/>
<layout type = 'horizontal' padding = '16, 16, 16, 16'> <layout type = 'horizontal' padding = '16, 16, 16, 16'>
<space/> <space/>
<widget name = 'ResetSettings' <widget name = 'ResetSettings'

View file

@ -97,7 +97,7 @@
padding = '0, 0, 2, 0' padding = '0, 0, 2, 0'
/> />
<widget name = 'TabWidget.Body' <widget name = 'TabWidget.Body'
padding = '0, 0, 0, -8' padding = '0, 0, 0, 0'
/> />
<widget name = 'TabWidget.NavButton' <widget name = 'TabWidget.NavButton'
size = '32, 18' size = '32, 18'
@ -219,7 +219,7 @@
<dialog name = 'GlobalOptions' overlays = 'screen' inset = '16' shading = 'dim'> <dialog name = 'GlobalOptions' overlays = 'screen' inset = '16' shading = 'dim'>
<layout type = 'vertical' padding = '0, 0, 0, 0'> <layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'TabWidget'/> <widget name = 'TabWidget' type = 'TabWidget'/>
<layout type = 'horizontal' padding = '8, 8, 8, 8'> <layout type = 'horizontal' padding = '8, 8, 8, 8'>
<space/> <space/>
<widget name = 'Cancel' <widget name = 'Cancel'
@ -556,7 +556,7 @@
<dialog name = 'GameOptions' overlays = 'screen' inset = '16' shading = 'dim'> <dialog name = 'GameOptions' overlays = 'screen' inset = '16' shading = 'dim'>
<layout type = 'vertical' padding = '0, 0, 0, 0' spacing = '16'> <layout type = 'vertical' padding = '0, 0, 0, 0' spacing = '16'>
<widget name = 'TabWidget'/> <widget name = 'TabWidget' type = 'TabWidget'/>
<layout type = 'horizontal' padding = '8, 8, 8, 8'> <layout type = 'horizontal' padding = '8, 8, 8, 8'>
<space/> <space/>
<widget name = 'Cancel' <widget name = 'Cancel'
@ -863,7 +863,7 @@
<dialog name = 'FluidSynthSettings' overlays = 'GlobalOptions' shading = 'dim'> <dialog name = 'FluidSynthSettings' overlays = 'GlobalOptions' shading = 'dim'>
<layout type = 'vertical' padding = '0, 0, 0, 0'> <layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'TabWidget'/> <widget name = 'TabWidget' type = 'TabWidget'/>
<layout type = 'horizontal' padding = '8, 8, 8, 8'> <layout type = 'horizontal' padding = '8, 8, 8, 8'>
<space/> <space/>
<widget name = 'ResetSettings' <widget name = 'ResetSettings'

Binary file not shown.

View file

@ -565,7 +565,7 @@
<dialog name = 'GameOptions' overlays = 'Dialog.Launcher.GameList' shading = 'dim'> <dialog name = 'GameOptions' overlays = 'Dialog.Launcher.GameList' shading = 'dim'>
<layout type = 'vertical' padding = '0, 0, 0, 0' spacing = '16'> <layout type = 'vertical' padding = '0, 0, 0, 0' spacing = '16'>
<widget name = 'TabWidget'/> <widget name = 'TabWidget' type = 'TabWidget'/>
<layout type = 'horizontal' padding = '16, 16, 16, 4'> <layout type = 'horizontal' padding = '16, 16, 16, 4'>
<space/> <space/>
<widget name = 'Cancel' <widget name = 'Cancel'
@ -864,7 +864,7 @@
<dialog name = 'FluidSynthSettings' overlays = 'GlobalOptions' shading = 'dim'> <dialog name = 'FluidSynthSettings' overlays = 'GlobalOptions' shading = 'dim'>
<layout type = 'vertical' padding = '0, 0, 0, 0'> <layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'TabWidget'/> <widget name = 'TabWidget' type = 'TabWidget'/>
<layout type = 'horizontal' padding = '16, 16, 16, 16'> <layout type = 'horizontal' padding = '16, 16, 16, 16'>
<space/> <space/>
<widget name = 'ResetSettings' <widget name = 'ResetSettings'

View file

@ -217,7 +217,7 @@
<dialog name = 'GlobalOptions' overlays = 'screen' inset = '16' shading = 'dim'> <dialog name = 'GlobalOptions' overlays = 'screen' inset = '16' shading = 'dim'>
<layout type = 'vertical' padding = '0, 0, 0, 0'> <layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'TabWidget'/> <widget name = 'TabWidget' type = 'TabWidget'/>
<layout type = 'horizontal' padding = '8, 8, 8, 8'> <layout type = 'horizontal' padding = '8, 8, 8, 8'>
<space/> <space/>
<widget name = 'Cancel' <widget name = 'Cancel'
@ -861,7 +861,7 @@
<dialog name = 'FluidSynthSettings' overlays = 'GlobalOptions' shading = 'dim'> <dialog name = 'FluidSynthSettings' overlays = 'GlobalOptions' shading = 'dim'>
<layout type = 'vertical' padding = '0, 0, 0, 0'> <layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'TabWidget'/> <widget name = 'TabWidget' type = 'TabWidget'/>
<layout type = 'horizontal' padding = '8, 8, 8, 8'> <layout type = 'horizontal' padding = '8, 8, 8, 8'>
<space/> <space/>
<widget name = 'ResetSettings' <widget name = 'ResetSettings'

View file

@ -156,7 +156,7 @@ void Widget::draw() {
Widget *Widget::findWidgetInChain(Widget *w, int x, int y) { Widget *Widget::findWidgetInChain(Widget *w, int x, int y) {
while (w) { while (w) {
// Stop as soon as we find a widget that contains the point (x,y) // Stop as soon as we find a widget that contains the point (x,y)
if (x >= w->_x && x < w->_x + w->_w && y >= w->_y && y < w->_y + w->_h) if (x >= w->_x && x < w->_x + w->_w && y >= w->_y && y < w->_y + w->getHeight())
break; break;
w = w->_next; w = w->_next;
} }

View file

@ -85,6 +85,14 @@ int16 TabWidget::getChildY() const {
return getAbsY() + _tabHeight; return getAbsY() + _tabHeight;
} }
uint16 TabWidget::getHeight() const {
// NOTE: if you change that, make sure to do the same
// changes in the ThemeLayoutTabWidget (gui/ThemeLayout.cpp)
// NOTE: this height is used for clipping, so it *includes*
// tabs, because it starts from getAbsY(), not getChildY()
return _h + _tabHeight;
}
int TabWidget::addTab(const String &title) { int TabWidget::addTab(const String &title) {
// Add a new tab page // Add a new tab page
Tab newTab; Tab newTab;

View file

@ -110,6 +110,7 @@ protected:
// We overload getChildY to make sure child widgets are positioned correctly. // We overload getChildY to make sure child widgets are positioned correctly.
// Essentially this compensates for the space taken up by the tab title header. // Essentially this compensates for the space taken up by the tab title header.
virtual int16 getChildY() const; virtual int16 getChildY() const;
virtual uint16 getHeight() const;
virtual void drawWidget(); virtual void drawWidget();