summaryrefslogtreecommitdiff
path: root/scene
diff options
context:
space:
mode:
authorDualMatrix <piet.goris@gmail.com>2018-09-08 20:34:37 +0200
committerDualMatrix <piet.goris@gmail.com>2018-09-08 20:34:37 +0200
commitdd6074010c2afe5a1f9f23d12e900a8ea12584b0 (patch)
tree09fd57a37bce7b181696e7dbd84ffba609bf22af /scene
parent4b6846a59d785af3bef6a29958387ed0ee0f6575 (diff)
Fixed the remove_line function in richtextlabel. It was totally broken
Fixed the remove_line function in richtextlabel. It was totally broken This fixes #21037
Diffstat (limited to 'scene')
-rw-r--r--scene/gui/rich_text_label.cpp22
1 files changed, 16 insertions, 6 deletions
diff --git a/scene/gui/rich_text_label.cpp b/scene/gui/rich_text_label.cpp
index a5f9bea1b1..eff16c83fc 100644
--- a/scene/gui/rich_text_label.cpp
+++ b/scene/gui/rich_text_label.cpp
@@ -1423,18 +1423,28 @@ bool RichTextLabel::remove_line(const int p_line) {
if (p_line >= current_frame->lines.size() || p_line < 0)
return false;
- int lines = p_line * 2;
+ int i = 0;
+ while (i < current->subitems.size() && current->subitems[i]->line < p_line) {
+ i++;
+ }
- if (current->subitems[lines]->type != ITEM_NEWLINE)
- _remove_item(current->subitems[lines], current->subitems[lines]->line, lines);
+ bool was_newline = false;
+ while (i < current->subitems.size()) {
+ was_newline = current->subitems[i]->type == ITEM_NEWLINE;
+ _remove_item(current->subitems[i], current->subitems[i]->line, p_line);
+ if (was_newline)
+ break;
+ }
- _remove_item(current->subitems[lines], current->subitems[lines]->line, lines);
+ if (!was_newline) {
+ current_frame->lines.remove(p_line);
+ }
- if (p_line == 0) {
+ if (p_line == 0 && current->subitems.size() > 0)
main->lines.write[0].from = main;
- }
main->first_invalid_line = 0;
+
return true;
}