added rich text label instead of regular label for terminal but there are bugs
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user