image from code wooo
Diffstat (limited to 'ShrinkingTextEdit.gd')
-rw-r--r--ShrinkingTextEdit.gd52
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()