Skip to content

Commit f55b81b

Browse files
committed
Merge pull request #91193 from timothyqiu/tab-icon-size
Allow setting max icon width per tab for TabContainer
2 parents 853740e + 779426b commit f55b81b

File tree

3 files changed

+36
-0
lines changed

3 files changed

+36
-0
lines changed

doc/classes/TabContainer.xml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,13 @@
6464
Returns the [Texture2D] for the tab at index [param tab_idx] or [code]null[/code] if the tab has no [Texture2D].
6565
</description>
6666
</method>
67+
<method name="get_tab_icon_max_width" qualifiers="const">
68+
<return type="int" />
69+
<param index="0" name="tab_idx" type="int" />
70+
<description>
71+
Returns the maximum allowed width of the icon for the tab at index [param tab_idx].
72+
</description>
73+
</method>
6774
<method name="get_tab_idx_at_point" qualifiers="const">
6875
<return type="int" />
6976
<param index="0" name="point" type="Vector2" />
@@ -164,6 +171,14 @@
164171
Sets an icon for the tab at index [param tab_idx].
165172
</description>
166173
</method>
174+
<method name="set_tab_icon_max_width">
175+
<return type="void" />
176+
<param index="0" name="tab_idx" type="int" />
177+
<param index="1" name="width" type="int" />
178+
<description>
179+
Sets the maximum allowed width of the icon for the tab at index [param tab_idx]. This limit is applied on top of the default size of the icon and on top of [theme_item icon_max_width]. The height is adjusted according to the icon's ratio.
180+
</description>
181+
</method>
167182
<method name="set_tab_metadata">
168183
<return type="void" />
169184
<param index="0" name="tab_idx" type="int" />

scene/gui/tab_container.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -794,6 +794,22 @@ Ref<Texture2D> TabContainer::get_tab_icon(int p_tab) const {
794794
return tab_bar->get_tab_icon(p_tab);
795795
}
796796

797+
void TabContainer::set_tab_icon_max_width(int p_tab, int p_width) {
798+
if (tab_bar->get_tab_icon_max_width(p_tab) == p_width) {
799+
return;
800+
}
801+
802+
tab_bar->set_tab_icon_max_width(p_tab, p_width);
803+
804+
_update_margins();
805+
_repaint();
806+
queue_redraw();
807+
}
808+
809+
int TabContainer::get_tab_icon_max_width(int p_tab) const {
810+
return tab_bar->get_tab_icon_max_width(p_tab);
811+
}
812+
797813
void TabContainer::set_tab_disabled(int p_tab, bool p_disabled) {
798814
if (tab_bar->is_tab_disabled(p_tab) == p_disabled) {
799815
return;
@@ -990,6 +1006,8 @@ void TabContainer::_bind_methods() {
9901006
ClassDB::bind_method(D_METHOD("get_tab_tooltip", "tab_idx"), &TabContainer::get_tab_tooltip);
9911007
ClassDB::bind_method(D_METHOD("set_tab_icon", "tab_idx", "icon"), &TabContainer::set_tab_icon);
9921008
ClassDB::bind_method(D_METHOD("get_tab_icon", "tab_idx"), &TabContainer::get_tab_icon);
1009+
ClassDB::bind_method(D_METHOD("set_tab_icon_max_width", "tab_idx", "width"), &TabContainer::set_tab_icon_max_width);
1010+
ClassDB::bind_method(D_METHOD("get_tab_icon_max_width", "tab_idx"), &TabContainer::get_tab_icon_max_width);
9931011
ClassDB::bind_method(D_METHOD("set_tab_disabled", "tab_idx", "disabled"), &TabContainer::set_tab_disabled);
9941012
ClassDB::bind_method(D_METHOD("is_tab_disabled", "tab_idx"), &TabContainer::is_tab_disabled);
9951013
ClassDB::bind_method(D_METHOD("set_tab_hidden", "tab_idx", "hidden"), &TabContainer::set_tab_hidden);

scene/gui/tab_container.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,9 @@ class TabContainer : public Container {
161161
void set_tab_icon(int p_tab, const Ref<Texture2D> &p_icon);
162162
Ref<Texture2D> get_tab_icon(int p_tab) const;
163163

164+
void set_tab_icon_max_width(int p_tab, int p_width);
165+
int get_tab_icon_max_width(int p_tab) const;
166+
164167
void set_tab_disabled(int p_tab, bool p_disabled);
165168
bool is_tab_disabled(int p_tab) const;
166169

0 commit comments

Comments
 (0)