frame-of-mind/src/logic-scenes/chat_view/chat-view.gd

31 lines
981 B
GDScript3
Raw Normal View History

2025-04-26 21:33:44 +00:00
class_name ChatView extends ScrollContainer
@export var messages: Array[ChatMessage]
var v_box: VBoxContainer
func _ready() -> void:
v_box = VBoxContainer.new()
add_child(v_box, false, Node.INTERNAL_MODE_BACK)
rebuild()
func rebuild():
for child in v_box.get_children():
child.free()
var text_server: = TextServerManager.get_primary_interface()
for message in messages:
var shaped_tex: RID = text_server.create_shaped_text(TextServer.DIRECTION_AUTO, TextServer.ORIENTATION_HORIZONTAL)
text_server.shaped_text_add_string(shaped_tex, message.text, [theme.default_font.get_rid()], theme.default_base_scale)
text_server.shaped_text_fit_to_width(shaped_tex, size.x)
var label: = RichTextLabel.new()
label.custom_minimum_size = text_server.shaped_text_get_size(shaped_tex) + Vector2( 16, 16 )
label.text = message.text
label.size_flags_horizontal = Control.SIZE_SHRINK_END if message.is_own_message else Control.SIZE_SHRINK_BEGIN
v_box.add_child(label)