Skip to content

Commit

Permalink
RichTextLabel returns member (Array) for custom effects for Editor
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
williamd67 committed Aug 24, 2021
1 parent ca7f53d commit d875706
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 19 deletions.
24 changes: 8 additions & 16 deletions scene/gui/rich_text_label.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3946,24 +3946,15 @@ float RichTextLabel::get_percent_visible() const {
return percent_visible;
}

void RichTextLabel::set_effects(const Vector<Variant> &effects) {
custom_effects.clear();
for (int i = 0; i < effects.size(); i++) {
Ref<RichTextEffect> effect = Ref<RichTextEffect>(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<Variant> RichTextLabel::get_effects() {
Vector<Variant> 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) {
Expand Down Expand Up @@ -4279,12 +4270,13 @@ void RichTextLabel::_draw_fbg_boxes(RID p_ci, RID p_rid, Vector2 line_off, Item

Ref<RichTextEffect> 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<RichTextEffect> 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;
}
}

Expand Down
6 changes: 3 additions & 3 deletions scene/gui/rich_text_label.h
Original file line number Diff line number Diff line change
Expand Up @@ -363,7 +363,7 @@ class RichTextLabel : public Control {
ItemMeta *meta_hovering = nullptr;
Variant current_meta;

Vector<Ref<RichTextEffect>> custom_effects;
Array custom_effects;

void _invalidate_current_line(ItemFrame *p_frame);
void _validate_line_caches(ItemFrame *p_frame);
Expand Down Expand Up @@ -577,8 +577,8 @@ class RichTextLabel : public Control {
void set_percent_visible(float p_percent);
float get_percent_visible() const;

void set_effects(const Vector<Variant> &effects);
Vector<Variant> get_effects();
void set_effects(Array p_effects);
Array get_effects();

void install_effect(const Variant effect);

Expand Down

0 comments on commit d875706

Please sign in to comment.