From 463e2002abc0ecd7439fbf00966cef83842babce Mon Sep 17 00:00:00 2001 From: Alexander Pech Date: Sat, 2 Jan 2021 21:46:44 +1100 Subject: [PATCH] Keep RichTextLabel visible character properties in sync The RichTextLabel class is inconsistent in how it updates the visible_characters and percent_visible properties when either is changed. To keep both properties consistent, update percent_visible when setting the visible_characters property. For both properties, when setting one, notify change for the other. Docs updated for member set_visible_characters on RichTextLabel class. --- doc/classes/RichTextLabel.xml | 1 + scene/gui/rich_text_label.cpp | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/doc/classes/RichTextLabel.xml b/doc/classes/RichTextLabel.xml index 147e41bf1b9..a182abc17ba 100644 --- a/doc/classes/RichTextLabel.xml +++ b/doc/classes/RichTextLabel.xml @@ -455,6 +455,7 @@ The restricted number of characters to display in the label. If [code]-1[/code], all characters will be displayed. + [b]Note:[/b] Setting this property updates [member percent_visible] based on current [method get_total_character_count]. diff --git a/scene/gui/rich_text_label.cpp b/scene/gui/rich_text_label.cpp index 4f4d5ece4a9..8891c6ab49d 100644 --- a/scene/gui/rich_text_label.cpp +++ b/scene/gui/rich_text_label.cpp @@ -3716,6 +3716,7 @@ void RichTextLabel::set_percent_visible(float p_percent) { } main->first_invalid_line = 0; //invalidate ALL _validate_line_caches(main); + _change_notify("visible_characters"); update(); } } @@ -3929,6 +3930,15 @@ void RichTextLabel::_bind_methods() { void RichTextLabel::set_visible_characters(int p_visible) { visible_characters = p_visible; + if (p_visible == -1) { + percent_visible = 1; + } else { + int total_char_count = get_total_character_count(); + if (total_char_count > 0) { + percent_visible = (float)p_visible / (float)total_char_count; + } + } + _change_notify("percent_visible"); update(); }