WIP: create chat-messages from resources, calculate chat message size
This commit is contained in:
parent
ccd36d0d59
commit
5755b65545
|
|
@ -59,25 +59,35 @@ theme = SubResource("Theme_w8y7q")
|
||||||
layout_mode = 0
|
layout_mode = 0
|
||||||
offset_right = 582.0
|
offset_right = 582.0
|
||||||
offset_bottom = 1082.0
|
offset_bottom = 1082.0
|
||||||
|
theme = SubResource("Theme_w8y7q")
|
||||||
script = ExtResource("4_n65mw")
|
script = ExtResource("4_n65mw")
|
||||||
messages = Array[ExtResource("5_1hd2w")]([SubResource("Resource_iwd5k"), SubResource("Resource_1hd2w"), SubResource("Resource_w8y7q")])
|
messages = Array[ExtResource("5_1hd2w")]([SubResource("Resource_iwd5k"), SubResource("Resource_1hd2w"), SubResource("Resource_w8y7q")])
|
||||||
|
|
||||||
[node name="VBoxContainer" type="VBoxContainer" parent="ScrollContainer"]
|
[node name="Template" type="ScrollContainer" parent="."]
|
||||||
|
layout_mode = 2
|
||||||
|
offset_left = 1061.0
|
||||||
|
offset_top = 78.0
|
||||||
|
offset_right = 1643.0
|
||||||
|
offset_bottom = 702.0
|
||||||
|
|
||||||
|
[node name="VBoxContainer" type="VBoxContainer" parent="Template"]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 3
|
size_flags_horizontal = 3
|
||||||
|
|
||||||
[node name="RichTextLabel2" type="RichTextLabel" parent="ScrollContainer/VBoxContainer"]
|
[node name="RichTextLabel2" type="RichTextLabel" parent="Template/VBoxContainer"]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 0
|
size_flags_horizontal = 0
|
||||||
theme = SubResource("Theme_w8y7q")
|
theme = SubResource("Theme_w8y7q")
|
||||||
bbcode_enabled = true
|
bbcode_enabled = true
|
||||||
text = "Dies ist eine Telegram-Message
|
text = "Dies ist eine Telegram-Message.
|
||||||
|
Ich schreibe mal etwas länger, ob zu sehen,
|
||||||
|
ob der Bums irgendwann umbricht.
|
||||||
[i]8:12 PM[/i]"
|
[i]8:12 PM[/i]"
|
||||||
fit_content = true
|
fit_content = true
|
||||||
scroll_active = false
|
scroll_active = false
|
||||||
autowrap_mode = 0
|
autowrap_mode = 0
|
||||||
|
|
||||||
[node name="RichTextLabel3" type="RichTextLabel" parent="ScrollContainer/VBoxContainer"]
|
[node name="RichTextLabel3" type="RichTextLabel" parent="Template/VBoxContainer"]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
theme = SubResource("Theme_w8y7q")
|
theme = SubResource("Theme_w8y7q")
|
||||||
bbcode_enabled = true
|
bbcode_enabled = true
|
||||||
|
|
@ -85,7 +95,7 @@ text = "Dies ist eine Telegram-Message
|
||||||
[i]8:12 PM[/i]"
|
[i]8:12 PM[/i]"
|
||||||
fit_content = true
|
fit_content = true
|
||||||
|
|
||||||
[node name="RichTextLabel4" type="RichTextLabel" parent="ScrollContainer/VBoxContainer"]
|
[node name="RichTextLabel4" type="RichTextLabel" parent="Template/VBoxContainer"]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
theme = SubResource("Theme_w8y7q")
|
theme = SubResource("Theme_w8y7q")
|
||||||
bbcode_enabled = true
|
bbcode_enabled = true
|
||||||
|
|
@ -93,7 +103,7 @@ text = "Dies ist eine Telegram-Message
|
||||||
[i]8:12 PM[/i]"
|
[i]8:12 PM[/i]"
|
||||||
fit_content = true
|
fit_content = true
|
||||||
|
|
||||||
[node name="RichTextLabel5" type="RichTextLabel" parent="ScrollContainer/VBoxContainer"]
|
[node name="RichTextLabel5" type="RichTextLabel" parent="Template/VBoxContainer"]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
theme = SubResource("Theme_w8y7q")
|
theme = SubResource("Theme_w8y7q")
|
||||||
bbcode_enabled = true
|
bbcode_enabled = true
|
||||||
|
|
@ -102,7 +112,7 @@ text = "Dies ist eine Telegram-Message
|
||||||
fit_content = true
|
fit_content = true
|
||||||
horizontal_alignment = 2
|
horizontal_alignment = 2
|
||||||
|
|
||||||
[node name="RichTextLabel6" type="RichTextLabel" parent="ScrollContainer/VBoxContainer"]
|
[node name="RichTextLabel6" type="RichTextLabel" parent="Template/VBoxContainer"]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
theme = SubResource("Theme_w8y7q")
|
theme = SubResource("Theme_w8y7q")
|
||||||
bbcode_enabled = true
|
bbcode_enabled = true
|
||||||
|
|
@ -110,12 +120,11 @@ text = "Dies ist eine Telegram-Message
|
||||||
[i]8:12 PM[/i]"
|
[i]8:12 PM[/i]"
|
||||||
fit_content = true
|
fit_content = true
|
||||||
|
|
||||||
[node name="RichTextLabel" type="RichTextLabel" parent="ScrollContainer/VBoxContainer"]
|
[node name="RichTextLabel" type="RichTextLabel" parent="Template/VBoxContainer"]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 3
|
size_flags_horizontal = 3
|
||||||
theme = SubResource("Theme_w8y7q")
|
theme = SubResource("Theme_w8y7q")
|
||||||
bbcode_enabled = true
|
bbcode_enabled = true
|
||||||
text = "[] [] [] [] []
|
text = "Dies ist eine Telegram-Message, die deutlich länger ist, als die vorherige, um das mal abzuschätzen.
|
||||||
Dies ist eine Telegram-Message, die deutlich länger ist, als die vorherige, um das mal abzuschätzen.
|
|
||||||
[i]8:12 PM[/i]"
|
[i]8:12 PM[/i]"
|
||||||
fit_content = true
|
fit_content = true
|
||||||
|
|
|
||||||
|
|
@ -2,3 +2,30 @@
|
||||||
class_name ChatView extends ScrollContainer
|
class_name ChatView extends ScrollContainer
|
||||||
|
|
||||||
@export var messages: Array[ChatMessage]
|
@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)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue