Browse Source

Fix calculation bug with `TextEdit::get_line_height()`

When `get_line_height()` is less than `1`, there is no visible text.
So limit the return value of `get_line_height()` to **not less** than
`1` for calculation.
Rindbee 2 years ago
parent
commit
391bce44b7
2 changed files with 6 additions and 2 deletions
  1. 2 1
      doc/classes/TextEdit.xml
  2. 4 1
      scene/gui/text_edit.cpp

+ 2 - 1
doc/classes/TextEdit.xml

@@ -347,7 +347,8 @@
 		<method name="get_line_height" qualifiers="const">
 			<return type="int" />
 			<description>
-				Returns the height of a largest line.
+				Returns the maximum value of the line height among all lines.
+				[b]Note:[/b] The return value is influenced by [theme_item line_spacing] and [theme_item font_size]. And it will not be less than [code]1[/code].
 			</description>
 		</method>
 		<method name="get_line_width" qualifiers="const">

+ 4 - 1
scene/gui/text_edit.cpp

@@ -3005,6 +3005,9 @@ void TextEdit::_update_theme_item_cache() {
 	theme_cache.outline_color = get_theme_color(SNAME("font_outline_color"));
 
 	theme_cache.line_spacing = get_theme_constant(SNAME("line_spacing"));
+	if (text.get_line_height() + theme_cache.line_spacing < 1) {
+		WARN_PRINT("Line height is too small, please increase font_size and/or line_spacing");
+	}
 
 	theme_cache.background_color = get_theme_color(SNAME("background_color"));
 	theme_cache.current_line_color = get_theme_color(SNAME("current_line_color"));
@@ -3476,7 +3479,7 @@ int TextEdit::get_line_width(int p_line, int p_wrap_index) const {
 }
 
 int TextEdit::get_line_height() const {
-	return text.get_line_height() + theme_cache.line_spacing;
+	return MAX(text.get_line_height() + theme_cache.line_spacing, 1);
 }
 
 int TextEdit::get_indent_level(int p_line) const {