From 9f8d8b7c4e35edae27a6c235f5b40cdfb0341ece Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pa=CC=84vels=20Nadtoc=CC=8Cajevs?= <7645683+bruvzg@users.noreply.github.com> Date: Wed, 5 Mar 2025 22:55:35 +0200 Subject: [PATCH] [RTL] Fix custom effects not updating. --- doc/classes/RichTextLabel.xml | 6 ++++++ scene/gui/rich_text_label.cpp | 11 ++++++++--- scene/gui/rich_text_label.h | 1 + 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/doc/classes/RichTextLabel.xml b/doc/classes/RichTextLabel.xml index 2662cb072b6..b106b485eec 100644 --- a/doc/classes/RichTextLabel.xml +++ b/doc/classes/RichTextLabel.xml @@ -525,6 +525,12 @@ Adds a [code skip-lint][u][/code] tag to the tag stack. + + + + Reloads custom effects. Useful when [member custom_effects] is modified manually. + + diff --git a/scene/gui/rich_text_label.cpp b/scene/gui/rich_text_label.cpp index 646009381db..6233d7441f5 100644 --- a/scene/gui/rich_text_label.cpp +++ b/scene/gui/rich_text_label.cpp @@ -6356,9 +6356,7 @@ float RichTextLabel::get_visible_ratio() const { void RichTextLabel::set_effects(Array p_effects) { custom_effects = p_effects; - if (!stack_externally_modified && use_bbcode) { - parse_bbcode(atr(text)); - } + reload_effects(); } Array RichTextLabel::get_effects() { @@ -6371,8 +6369,14 @@ void RichTextLabel::install_effect(const Variant effect) { ERR_FAIL_COND_MSG(rteffect.is_null(), "Invalid RichTextEffect resource."); custom_effects.push_back(effect); + reload_effects(); +} + +void RichTextLabel::reload_effects() { if (!stack_externally_modified && use_bbcode) { + internal_stack_editing = true; parse_bbcode(atr(text)); + internal_stack_editing = false; } } @@ -6580,6 +6584,7 @@ void RichTextLabel::_bind_methods() { ClassDB::bind_method(D_METHOD("set_effects", "effects"), &RichTextLabel::set_effects); ClassDB::bind_method(D_METHOD("get_effects"), &RichTextLabel::get_effects); ClassDB::bind_method(D_METHOD("install_effect", "effect"), &RichTextLabel::install_effect); + ClassDB::bind_method(D_METHOD("reload_effects"), &RichTextLabel::reload_effects); ClassDB::bind_method(D_METHOD("get_menu"), &RichTextLabel::get_menu); ClassDB::bind_method(D_METHOD("is_menu_visible"), &RichTextLabel::is_menu_visible); diff --git a/scene/gui/rich_text_label.h b/scene/gui/rich_text_label.h index 6c85587482c..72c7cc0397b 100644 --- a/scene/gui/rich_text_label.h +++ b/scene/gui/rich_text_label.h @@ -881,6 +881,7 @@ public: Array get_effects(); void install_effect(const Variant effect); + void reload_effects(); virtual Size2 get_minimum_size() const override;