From d875706e01e1813cb6e4191036d53afbaface78b Mon Sep 17 00:00:00 2001 From: William Deurwaarder Date: Tue, 24 Aug 2021 22:02:24 +0200 Subject: [PATCH] RichTextLabel returns member (Array) for custom effects for Editor As RichTextLabel returned a copy of the member (Vector) the editor was notified that the value had changed which caused the dropdown menu to be immediately closed after opening. The fix is to return the member (Array) in stead of a copy which is the same instance and thereby does not notify the editor that the value has changed. --- scene/gui/rich_text_label.cpp | 24 ++++++++---------------- scene/gui/rich_text_label.h | 6 +++--- 2 files changed, 11 insertions(+), 19 deletions(-) diff --git a/scene/gui/rich_text_label.cpp b/scene/gui/rich_text_label.cpp index 21a87d4e762..811f7f334e8 100644 --- a/scene/gui/rich_text_label.cpp +++ b/scene/gui/rich_text_label.cpp @@ -3946,24 +3946,15 @@ float RichTextLabel::get_percent_visible() const { return percent_visible; } -void RichTextLabel::set_effects(const Vector &effects) { - custom_effects.clear(); - for (int i = 0; i < effects.size(); i++) { - Ref effect = Ref(effects[i]); - custom_effects.push_back(effect); - } - +void RichTextLabel::set_effects(Array p_effects) { + custom_effects = p_effects; if ((bbcode != "") && use_bbcode) { parse_bbcode(bbcode); } } -Vector RichTextLabel::get_effects() { - Vector r; - for (int i = 0; i < custom_effects.size(); i++) { - r.push_back(custom_effects[i]); - } - return r; +Array RichTextLabel::get_effects() { + return custom_effects; } void RichTextLabel::install_effect(const Variant effect) { @@ -4279,12 +4270,13 @@ void RichTextLabel::_draw_fbg_boxes(RID p_ci, RID p_rid, Vector2 line_off, Item Ref RichTextLabel::_get_custom_effect_by_code(String p_bbcode_identifier) { for (int i = 0; i < custom_effects.size(); i++) { - if (!custom_effects[i].is_valid()) { + Ref effect = custom_effects[i]; + if (!effect.is_valid()) { continue; } - if (custom_effects[i]->get_bbcode() == p_bbcode_identifier) { - return custom_effects[i]; + if (effect->get_bbcode() == p_bbcode_identifier) { + return effect; } } diff --git a/scene/gui/rich_text_label.h b/scene/gui/rich_text_label.h index ae04a7e6842..f25a8bf193e 100644 --- a/scene/gui/rich_text_label.h +++ b/scene/gui/rich_text_label.h @@ -363,7 +363,7 @@ private: ItemMeta *meta_hovering = nullptr; Variant current_meta; - Vector> custom_effects; + Array custom_effects; void _invalidate_current_line(ItemFrame *p_frame); void _validate_line_caches(ItemFrame *p_frame); @@ -577,8 +577,8 @@ public: void set_percent_visible(float p_percent); float get_percent_visible() const; - void set_effects(const Vector &effects); - Vector get_effects(); + void set_effects(Array p_effects); + Array get_effects(); void install_effect(const Variant effect);