image from code wooo
Diffstat (limited to 'ShrinkingTextEdit.gd')
| -rw-r--r-- | ShrinkingTextEdit.gd | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/ShrinkingTextEdit.gd b/ShrinkingTextEdit.gd new file mode 100644 index 0000000..31bb96e --- /dev/null +++ b/ShrinkingTextEdit.gd @@ -0,0 +1,52 @@ +class_name ShrinkingTextEdit +extends TextEdit + +onready var font: DynamicFont = get_font("font") +var line_spacing +var line_height +var line_count = -1 setget set_line_count +var longest_line: String setget set_longest_line + +export(int) var min_line_count := 5 +onready var horizontal_min_size := rect_min_size.x - 57 + + +func _ready(): + line_spacing = get_constant("line_spacing") + line_height = font.get_height() + line_spacing + connect("text_changed", self, "_on_text_changed") + emit_signal("text_changed") + yield(get_tree(), "idle_frame") + update() + + +func set_line_count(count): + if line_count != max(min_line_count, count): + line_count = max(min_line_count, count) + rect_min_size.y = (line_count * line_height) + 20 + update() + + +func set_longest_line(new_longest_line): + if longest_line != new_longest_line: + longest_line = new_longest_line + rect_min_size.x = max(font.get_string_size(longest_line).x, horizontal_min_size) + 57 + update() + + +func _on_text_changed(): + self.line_count = get_line_count() + self.longest_line = get_longest_line() + + +func get_longest_line(): + var longest: String + for line in text.split("\n"): + if len(line) > len(longest): + longest = line + return longest + + +func update(): + rect_size = rect_min_size + .update() |