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;