Browse Source

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
DualMatrix 7 years ago
parent
commit
dd6074010c
1 changed files with 16 additions and 6 deletions
  1. 16 6
      scene/gui/rich_text_label.cpp

+ 16 - 6
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;
 }