From d22419b45372a931c170041f29d85b2ba5abea76 Mon Sep 17 00:00:00 2001
From: Daylily-Zeleen <daylily-zeleen@foxmail.com>
Date: Thu, 31 Oct 2024 02:30:35 +0800
Subject: [PATCH] Fix `total_visible_line_count` calculation when removing and
 clearing text of `TextEdit`.

---
 scene/gui/text_edit.cpp | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp
index 6b5ff23436e7..810301b7ff82 100644
--- a/scene/gui/text_edit.cpp
+++ b/scene/gui/text_edit.cpp
@@ -332,6 +332,7 @@ void TextEdit::Text::clear() {
 
 	max_line_width_dirty = true;
 	max_line_height_dirty = true;
+	total_visible_line_count = 0;
 
 	Line line;
 	line.gutters.resize(gutter_count);
@@ -421,6 +422,10 @@ void TextEdit::Text::remove_range(int p_from_line, int p_to_line) {
 
 	for (int i = p_from_line; i < p_to_line; i++) {
 		const Line &text_line = text[i];
+		if (text_line.hidden) {
+			continue;
+		}
+
 		if (text_line.height == max_line_height) {
 			max_line_height_dirty = true;
 		}
@@ -435,6 +440,8 @@ void TextEdit::Text::remove_range(int p_from_line, int p_to_line) {
 		text.write[(i - diff) + 1] = text[i + 1];
 	}
 	text.resize(text.size() - diff);
+
+	ERR_FAIL_COND(total_visible_line_count < 0); // BUG
 }
 
 void TextEdit::Text::add_gutter(int p_at) {