Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[RTL] Add cell option to control if cell is shrunk to its contents width. #101482

Merged
merged 1 commit into from
Jan 13, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion core/extension/gdextension_special_compat_hashes.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -776,7 +776,7 @@ void GDExtensionSpecialCompatHashes::initialize() {
{ "push_paragraph", 3218895358, 3089306873 },
{ "push_list", 4036303897, 3017143144 },
{ "push_table", 1125058220, 2623499273 },
{ "set_table_column_expand", 4132157579, 2185176273 },
{ "set_table_column_expand", 4258957458, 2185176273 },
#ifdef REAL_T_IS_DOUBLE
{ "add_image", 3346058748, 1507062345 },
{ "push_dropcap", 981432822, 763534173 },
Expand Down
1 change: 1 addition & 0 deletions doc/classes/RichTextLabel.xml
Original file line number Diff line number Diff line change
Expand Up @@ -597,6 +597,7 @@
<param index="0" name="column" type="int" />
<param index="1" name="expand" type="bool" />
<param index="2" name="ratio" type="int" default="1" />
<param index="3" name="shrink" type="bool" default="true" />
<description>
Edits the selected column's expansion options. If [param expand] is [code]true[/code], the column expands in proportion to its expansion ratio versus the other columns' ratios.
For example, 2 columns with ratios 3 and 4 plus 70 pixels in available width would expand 30 and 40 pixels, respectively.
Expand Down
7 changes: 7 additions & 0 deletions misc/extension_api_validation/4.3-stable.expected
Original file line number Diff line number Diff line change
Expand Up @@ -278,3 +278,10 @@ Validate extension JSON: JSON file: Field was added in a way that breaks compati
Validate extension JSON: JSON file: Field was added in a way that breaks compatibility 'classes/GPUParticles3D/methods/restart': arguments

Added an optional keep_seed parameter to restart particles, to avoid modifying the seed to do particle seeking.


GH-101482
---------
Validate extension JSON: Error: Field 'classes/RichTextLabel/methods/set_table_column_expand/arguments': size changed value in new API, from 3 to 4.

Added optional "shrink" argument. Compatibility method registered.
15 changes: 15 additions & 0 deletions scene/gui/rich_text_label.compat.inc
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,18 @@

#ifndef DISABLE_DEPRECATED

void RichTextLabel::_push_font_bind_compat_79053(const Ref<Font> &p_font, int p_size) {
push_font(p_font, p_size);
}

void RichTextLabel::_set_table_column_expand_bind_compat_79053(int p_column, bool p_expand, int p_ratio) {
set_table_column_expand(p_column, p_expand, p_ratio, true);
}

void RichTextLabel::_set_table_column_expand_bind_compat_101482(int p_column, bool p_expand, int p_ratio) {
set_table_column_expand(p_column, p_expand, p_ratio, true);
}

void RichTextLabel::_push_meta_bind_compat_99481(const Variant &p_meta, MetaUnderline p_underline_mode) {
push_meta(p_meta, p_underline_mode, String());
}
Expand All @@ -47,6 +59,9 @@ bool RichTextLabel::_remove_paragraph_bind_compat_91098(int p_paragraph) {
}

void RichTextLabel::_bind_compatibility_methods() {
ClassDB::bind_compatibility_method(D_METHOD("push_font", "font", "font_size"), &RichTextLabel::_push_font_bind_compat_79053);
ClassDB::bind_compatibility_method(D_METHOD("set_table_column_expand", "column", "expand", "ratio"), &RichTextLabel::_set_table_column_expand_bind_compat_79053);
ClassDB::bind_compatibility_method(D_METHOD("set_table_column_expand", "column", "expand", "ratio"), &RichTextLabel::_set_table_column_expand_bind_compat_101482, DEFVAL(1));
ClassDB::bind_compatibility_method(D_METHOD("push_meta", "data", "underline_mode"), &RichTextLabel::_push_meta_bind_compat_99481, DEFVAL(META_UNDERLINE_ALWAYS));
ClassDB::bind_compatibility_method(D_METHOD("push_meta", "data"), &RichTextLabel::_push_meta_bind_compat_89024);
ClassDB::bind_compatibility_method(D_METHOD("add_image", "image", "width", "height", "color", "inline_align", "region"), &RichTextLabel::_add_image_bind_compat_80410, DEFVAL(0), DEFVAL(0), DEFVAL(Color(1.0, 1.0, 1.0)), DEFVAL(INLINE_ALIGNMENT_CENTER), DEFVAL(Rect2()));
Expand Down
21 changes: 12 additions & 9 deletions scene/gui/rich_text_label.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -693,7 +693,7 @@ void RichTextLabel::_set_table_size(ItemTable *p_table, int p_available_width) {
table_need_fit = false;
// Fit slim.
for (int i = 0; i < col_count; i++) {
if (!p_table->columns[i].expand) {
if (!p_table->columns[i].expand || !p_table->columns[i].shrink) {
continue;
}
int dif = p_table->columns[i].width - p_table->columns[i].max_width;
Expand Down Expand Up @@ -3900,6 +3900,7 @@ void RichTextLabel::push_table(int p_columns, InlineAlignment p_alignment, int p
item->align_to_row = p_align_to_row;
for (int i = 0; i < (int)item->columns.size(); i++) {
item->columns[i].expand = false;
item->columns[i].shrink = true;
item->columns[i].expand_ratio = 1;
}
_add_item(item, true, false);
Expand Down Expand Up @@ -4038,7 +4039,7 @@ void RichTextLabel::push_context() {
_add_item(item, true);
}

void RichTextLabel::set_table_column_expand(int p_column, bool p_expand, int p_ratio) {
void RichTextLabel::set_table_column_expand(int p_column, bool p_expand, int p_ratio, bool p_shrink) {
_stop_thread();
MutexLock data_lock(data_mutex);

Expand All @@ -4047,6 +4048,7 @@ void RichTextLabel::set_table_column_expand(int p_column, bool p_expand, int p_r
ItemTable *table = static_cast<ItemTable *>(current);
ERR_FAIL_INDEX(p_column, (int)table->columns.size());
table->columns[p_column].expand = p_expand;
table->columns[p_column].shrink = p_shrink;
table->columns[p_column].expand_ratio = p_ratio;
}

Expand Down Expand Up @@ -4582,13 +4584,19 @@ void RichTextLabel::append_text(const String &p_bbcode) {
pos = brk_end + 1;
tag_stack.push_front("cell");
} else if (tag.begins_with("cell ")) {
bool shrink = true;
OptionMap::Iterator shrink_option = bbcode_options.find("shrink");
if (shrink_option) {
shrink = (shrink_option->value == "true");
}

OptionMap::Iterator expand_option = bbcode_options.find("expand");
if (expand_option) {
int ratio = expand_option->value.to_int();
if (ratio < 1) {
ratio = 1;
}
set_table_column_expand(get_current_table_column(), true, ratio);
set_table_column_expand(get_current_table_column(), true, ratio, shrink);
}

push_cell();
Expand Down Expand Up @@ -6429,7 +6437,7 @@ void RichTextLabel::_bind_methods() {
ClassDB::bind_method(D_METHOD("push_strikethrough"), &RichTextLabel::push_strikethrough);
ClassDB::bind_method(D_METHOD("push_table", "columns", "inline_align", "align_to_row"), &RichTextLabel::push_table, DEFVAL(INLINE_ALIGNMENT_TOP), DEFVAL(-1));
ClassDB::bind_method(D_METHOD("push_dropcap", "string", "font", "size", "dropcap_margins", "color", "outline_size", "outline_color"), &RichTextLabel::push_dropcap, DEFVAL(Rect2()), DEFVAL(Color(1, 1, 1)), DEFVAL(0), DEFVAL(Color(0, 0, 0, 0)));
ClassDB::bind_method(D_METHOD("set_table_column_expand", "column", "expand", "ratio"), &RichTextLabel::set_table_column_expand, DEFVAL(1));
ClassDB::bind_method(D_METHOD("set_table_column_expand", "column", "expand", "ratio", "shrink"), &RichTextLabel::set_table_column_expand, DEFVAL(1), DEFVAL(true));
ClassDB::bind_method(D_METHOD("set_cell_row_background_color", "odd_row_bg", "even_row_bg"), &RichTextLabel::set_cell_row_background_color);
ClassDB::bind_method(D_METHOD("set_cell_border_color", "color"), &RichTextLabel::set_cell_border_color);
ClassDB::bind_method(D_METHOD("set_cell_size_override", "min_size", "max_size"), &RichTextLabel::set_cell_size_override);
Expand Down Expand Up @@ -6568,11 +6576,6 @@ void RichTextLabel::_bind_methods() {
ClassDB::bind_method(D_METHOD("is_menu_visible"), &RichTextLabel::is_menu_visible);
ClassDB::bind_method(D_METHOD("menu_option", "option"), &RichTextLabel::menu_option);

#ifndef DISABLE_DEPRECATED
ClassDB::bind_compatibility_method(D_METHOD("push_font", "font", "font_size"), &RichTextLabel::push_font);
ClassDB::bind_compatibility_method(D_METHOD("set_table_column_expand", "column", "expand", "ratio"), &RichTextLabel::set_table_column_expand);
#endif // DISABLE_DEPRECATED

// Note: set "bbcode_enabled" first, to avoid unnecessary "text" resets.
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "bbcode_enabled"), "set_use_bbcode", "is_using_bbcode");
ADD_PROPERTY(PropertyInfo(Variant::STRING, "text", PROPERTY_HINT_MULTILINE_TEXT), "set_text", "get_text");
Expand Down
6 changes: 5 additions & 1 deletion scene/gui/rich_text_label.h
Original file line number Diff line number Diff line change
Expand Up @@ -132,10 +132,13 @@ class RichTextLabel : public Control {
static void _bind_methods();

#ifndef DISABLE_DEPRECATED
void _push_font_bind_compat_79053(const Ref<Font> &p_font, int p_size);
void _set_table_column_expand_bind_compat_79053(int p_column, bool p_expand, int p_ratio);
void _push_meta_bind_compat_99481(const Variant &p_meta, MetaUnderline p_underline_mode);
void _push_meta_bind_compat_89024(const Variant &p_meta);
void _add_image_bind_compat_80410(const Ref<Texture2D> &p_image, const int p_width, const int p_height, const Color &p_color, InlineAlignment p_alignment, const Rect2 &p_region);
bool _remove_paragraph_bind_compat_91098(int p_paragraph);
void _set_table_column_expand_bind_compat_101482(int p_column, bool p_expand, int p_ratio);
static void _bind_compatibility_methods();
#endif

Expand Down Expand Up @@ -339,6 +342,7 @@ class RichTextLabel : public Control {
struct ItemTable : public Item {
struct Column {
bool expand = false;
bool shrink = true;
int expand_ratio = 0;
int min_width = 0;
int max_width = 0;
Expand Down Expand Up @@ -724,7 +728,7 @@ class RichTextLabel : public Control {
void push_fgcolor(const Color &p_color);
void push_customfx(Ref<RichTextEffect> p_custom_effect, Dictionary p_environment);
void push_context();
void set_table_column_expand(int p_column, bool p_expand, int p_ratio = 1);
void set_table_column_expand(int p_column, bool p_expand, int p_ratio = 1, bool p_shrink = true);
void set_cell_row_background_color(const Color &p_odd_row_bg, const Color &p_even_row_bg);
void set_cell_border_color(const Color &p_color);
void set_cell_size_override(const Size2 &p_min_size, const Size2 &p_max_size);
Expand Down