diff options
author | DualMatrix <piet.goris@gmail.com> | 2018-09-08 20:34:37 +0200 |
---|---|---|
committer | DualMatrix <piet.goris@gmail.com> | 2018-09-08 20:34:37 +0200 |
commit | dd6074010c2afe5a1f9f23d12e900a8ea12584b0 (patch) | |
tree | 09fd57a37bce7b181696e7dbd84ffba609bf22af /scene | |
parent | 4b6846a59d785af3bef6a29958387ed0ee0f6575 (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.cpp | 22 |
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; } |