added rich text label instead of regular label for terminal but there are bugs

This commit is contained in:
BrazlyBearWolf
2026-01-23 04:01:11 +00:00
parent d1d32aef84
commit 86fe0cad08
3 changed files with 76 additions and 21 deletions

View File

@@ -4,7 +4,7 @@ class_name TerminalControls
@onready var historyContainer = $MarginContainer/ScrollContainer/VBoxContainer
@onready var caret = $MarginContainer/ScrollContainer/VBoxContainer/Label/Caret
@onready var blink_timer = $MarginContainer/ScrollContainer/VBoxContainer/Label/CaretTimer
@export var terminalLine: Label
@export var terminalLine: RichTextLabel
var command: String
var directory: String = "~/"
@@ -24,9 +24,9 @@ var fileSystem: Dictionary = {
func _ready() -> void:
terminalLine.text = "user@work "+ directory + " "
UpdateCaretPos()
blink_timer.start()
Help()
UpdateCaretPos()
# --- Caret Blinking Logic ---
func _on_caret_timer_timeout() -> void:
@@ -110,19 +110,36 @@ func EnterCommand() -> void:
# --- History and FileSystem Helpers ---
func CreateHistoryEntry(content: String) -> void:
var label = Label.new()
label.text = content
label.label_settings = LabelSettings.new()
label.label_settings.font_size = 42
label.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART
label.custom_minimum_size = Vector2(1400, 0)
# var label = Label.new()
# label.text = content
# label.label_settings = LabelSettings.new()
# label.label_settings.font_size = 42
# label.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART
# label.custom_minimum_size = Vector2(1400, 0)
#
#if terminalLine.text.length() > 200:
#for child in historyContainer.get_children():
#if child != terminalLine:
#child.queue_free()
historyContainer.add_child(label)
historyContainer.move_child(label, historyContainer.get_child_count() - 2)
# historyContainer.add_child(label)
# historyContainer.move_child(label, historyContainer.get_child_count() - 2)
var rtl = RichTextLabel.new()
rtl.bbcode_enabled = true
rtl.fit_content = true # Important for VBoxContainer
rtl.text = content
rtl.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART
rtl.custom_minimum_size = Vector2(1400, 0)
rtl.add_theme_font_size_override("normal_font_size", 42)
# Optional: Set a theme or font override here
# rtl.add_theme_font_size_override("normal_font_size", 42)
historyContainer.add_child(rtl)
# Moves the entry above the input line
historyContainer.move_child(rtl, historyContainer.get_child_count() - 2)
func ResolvePath(current: String, target: String) -> String:
if target.begins_with("~/"):
@@ -194,11 +211,20 @@ help : Show this menu
-------------------------")
func ScrollUp():
var scroll: ScrollContainer = $MarginContainer/ScrollContainer
#var scroll: ScrollContainer = $MarginContainer/ScrollContainer
await get_tree().create_timer(.0001).timeout
scroll.set_deferred("scroll_vertical", scroll.get_v_scroll_bar().value - 10 )
call_deferred("ScrollUp")
#await get_tree().create_timer(.0001).timeout
#scroll.set_deferred("scroll_vertical", scroll.get_v_scroll_bar().value - 10 )
#call_deferred("ScrollUp")
var scrolli: RichTextLabel = $MarginContainer/ScrollContainer/VBoxContainer/Label
var scroll = scrolli.get_v_scroll_bar()
var tween: = create_tween()
tween.tween_property(scroll, "value", scroll.value - (scroll.page - scroll.page * 0.1), 0.1)
get_tree().get_root().set_input_as_handled()
func ScrollDown():
@@ -220,7 +246,22 @@ func GetBottomScroll():
call_deferred("GetBottomScroll")
func UpdateCaretPos():
var last_char_index = terminalLine.text.length() - 1
var char_rect = terminalLine.get_character_bounds(max(0, last_char_index))
caret.position.x = char_rect.end.x + 1
caret.position.y = char_rect.position.y
await get_tree().create_timer(.01).timeout
var font = terminalLine.get_theme_font("normal_font")
var font_size = terminalLine.get_theme_font_size("normal_font_size")
var visible_text = terminalLine.get_parsed_text()
var lines = visible_text.split("\n")
var last_line = lines[-1]
var char_rectY = terminalLine.get_content_height()
var text_line = TextLine.new()
text_line.width = terminalLine.size.x
text_line.flags = TextServer.JUSTIFICATION_NONE
text_line.alignment = HORIZONTAL_ALIGNMENT_LEFT
text_line.add_string(last_line, font, font_size)
caret.position.x = text_line.get_line_width()
caret.position.y = char_rectY - 50
pass