diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2016-05-01 15:27:58 +0200 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2016-05-01 15:29:07 +0200 |
commit | 8574489dd2597de73c720cb02b601b826b92a1ff (patch) | |
tree | 6df39e5bafd9a348ea9ceae052ed7c914c4a971a /scene/gui/tabs.cpp | |
parent | bbaf2969483d9b289bd8985067d546f5b60d645f (diff) | |
download | redot-engine-8574489dd2597de73c720cb02b601b826b92a1ff.tar.gz |
Tabs: Fix navigation buttons overlap when resizing
It was not taking into account the minimum width of the stylebox.
Fixed by factorizing some duplicate code.
Diffstat (limited to 'scene/gui/tabs.cpp')
-rw-r--r-- | scene/gui/tabs.cpp | 51 |
1 files changed, 9 insertions, 42 deletions
diff --git a/scene/gui/tabs.cpp b/scene/gui/tabs.cpp index ff95c8e084..deba06e200 100644 --- a/scene/gui/tabs.cpp +++ b/scene/gui/tabs.cpp @@ -313,43 +313,10 @@ void Tabs::_notification(int p_what) { continue; tabs[i].ofs_cache=w; - String s = tabs[i].text; - int lsize=0; - int slen=font->get_string_size(s).width; - lsize+=slen; + int lsize = get_tab_width(i); - - - Ref<Texture> icon; - if (tabs[i].icon.is_valid()) { - icon = tabs[i].icon; - if (icon.is_valid()) { - lsize+=icon->get_width(); - if (s!="") - lsize+=get_constant("hseparation"); - - } - } - - if (tabs[i].right_button.is_valid()) { - Ref<StyleBox> style = get_stylebox("button"); - Ref<Texture> rb=tabs[i].right_button; - - lsize+=get_constant("hseparation"); - //lsize+=style->get_margin(MARGIN_LEFT); - lsize+=rb->get_width(); - //lsize+=style->get_margin(MARGIN_RIGHT); - - } - - - if (cb_displaypolicy==CLOSE_BUTTON_SHOW_ALWAYS || (cb_displaypolicy==CLOSE_BUTTON_SHOW_ACTIVE_ONLY && i==current)) { - - lsize+=get_constant("hseparation"); - //lsize+=style->get_margin(MARGIN_LEFT); - lsize+=close->get_width(); - //lsize+=style->get_margin(MARGIN_RIGHT); - } + String text = tabs[i].text; + int slen = font->get_string_size(text).width; if (w+lsize > limit) { max_drawn_tab=i-1; @@ -366,7 +333,6 @@ void Tabs::_notification(int p_what) { Color col; if (i==current) { - sb=tab_fg; va=label_valign_fg; col=color_fg; @@ -377,21 +343,22 @@ void Tabs::_notification(int p_what) { } - Size2i sb_ms = sb->get_minimum_size(); - Rect2 sb_rect = Rect2( w, 0, lsize+sb_ms.width, h); - sb->draw(ci, sb_rect ); + Rect2 sb_rect = Rect2(w, 0, lsize, h); + sb->draw(ci, sb_rect); w+=sb->get_margin(MARGIN_LEFT); + Size2i sb_ms = sb->get_minimum_size(); + Ref<Texture> icon = tabs[i].icon; if (icon.is_valid()) { icon->draw(ci, Point2i( w, sb->get_margin(MARGIN_TOP)+((sb_rect.size.y-sb_ms.y)-icon->get_height())/2 ) ); - if (s!="") + if (text!="") w+=icon->get_width()+get_constant("hseparation"); } - font->draw(ci, Point2i( w, sb->get_margin(MARGIN_TOP)+((sb_rect.size.y-sb_ms.y)-font->get_height())/2+font->get_ascent() ), s, col ); + font->draw(ci, Point2i( w, sb->get_margin(MARGIN_TOP)+((sb_rect.size.y-sb_ms.y)-font->get_height())/2+font->get_ascent() ), text, col ); w+=slen; |