2
0
Эх сурвалжийг харах

Merge pull request #101482 from bruvzg/rtl_expand_control

[RTL] Add cell option to control if cell is shrinked to its contents width.
Rémi Verschelde 8 сар өмнө
parent
commit
f8dc6a0afe

+ 1 - 1
core/extension/gdextension_special_compat_hashes.cpp

@@ -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 },

+ 1 - 0
doc/classes/RichTextLabel.xml

@@ -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.

+ 7 - 0
misc/extension_api_validation/4.3-stable.expected

@@ -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 - 0
scene/gui/rich_text_label.compat.inc

@@ -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());
 }
@@ -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()));

+ 12 - 9
scene/gui/rich_text_label.cpp

@@ -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;
@@ -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);
@@ -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);
 
@@ -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;
 }
 
@@ -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();
@@ -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);
@@ -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");

+ 5 - 1
scene/gui/rich_text_label.h

@@ -132,10 +132,13 @@ protected:
 	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
 
@@ -339,6 +342,7 @@ private:
 	struct ItemTable : public Item {
 		struct Column {
 			bool expand = false;
+			bool shrink = true;
 			int expand_ratio = 0;
 			int min_width = 0;
 			int max_width = 0;
@@ -724,7 +728,7 @@ public:
 	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);