godot-demo-projects/gui/bidi_and_font_features/bidi.gd

130 lines
5.5 KiB
GDScript

extends Control
@onready var variable_font_variation: FontVariation = $"TabContainer/Variable fonts/VariableFontPreview".get_theme_font("font")
func _ready() -> void:
var tree: Tree = $"TabContainer/Text direction/Tree"
var root := tree.create_item()
tree.set_hide_root(true)
var first := tree.create_item(root)
first.set_text(0, "רֵאשִׁית")
var second := tree.create_item(first)
second.set_text(0, "שֵׁנִי")
var third := tree.create_item(second)
third.set_text(0, "שְׁלִישִׁי")
var fourth := tree.create_item(third)
fourth.set_text(0, "fourth")
func _on_Tree_item_selected() -> void:
var tree: Tree = $"TabContainer/Text direction/Tree"
var path := ""
var item := tree.get_selected()
while item != null:
path = item.get_text(0) + "/" + path
item = item.get_parent()
$"TabContainer/Text direction/LineEditST".text = path
$"TabContainer/Text direction/LineEditNoST".text = path
func _on_LineEditCustomSTDst_text_changed(new_text: String) -> void:
$"TabContainer/Text direction/LineEditCustomSTSource".text = new_text
func _on_LineEditCustomSTSource_text_changed(new_text: String) -> void:
$"TabContainer/Text direction/LineEditCustomSTDst".text = new_text
func _on_LineEditCustomSTDst_tree_entered() -> void:
# Refresh text to apply custom script once it's loaded.
$"TabContainer/Text direction/LineEditCustomSTDst".text = $"TabContainer/Text direction/LineEditCustomSTSource".text
func _on_variable_size_value_changed(value: float) -> void:
$"TabContainer/Variable fonts/Variables/Size/Value".text = str(value)
# This is also available on non-variable fonts.
$"TabContainer/Variable fonts/VariableFontPreview".add_theme_font_size_override("font_size", value)
func _on_variable_weight_value_changed(value: float) -> void:
$"TabContainer/Variable fonts/Variables/Weight/Value".text = str(value)
# Workaround to make the variable font axis value effective. This requires duplicating the dictionary.
var dict := variable_font_variation.variation_opentype.duplicate()
dict["weight"] = value
variable_font_variation.variation_opentype = dict
func _on_variable_slant_value_changed(value: float) -> void:
$"TabContainer/Variable fonts/Variables/Slant/Value".text = str(value)
# Workaround to make the variable font axis value effective. This requires duplicating the dictionary.
var dict := variable_font_variation.variation_opentype.duplicate()
dict["slant"] = value
variable_font_variation.variation_opentype = dict
func _on_variable_cursive_toggled(button_pressed: bool) -> void:
$"TabContainer/Variable fonts/Variables/Cursive".button_pressed = button_pressed
# Workaround to make the variable font axis value effective. This requires duplicating the dictionary.
var dict := variable_font_variation.variation_opentype.duplicate()
dict["custom_CRSV"] = int(button_pressed)
variable_font_variation.variation_opentype = dict
func _on_variable_casual_toggled(button_pressed: bool) -> void:
$"TabContainer/Variable fonts/Variables/Casual".button_pressed = button_pressed
# Workaround to make the variable font axis value effective. This requires duplicating the dictionary.
var dict := variable_font_variation.variation_opentype.duplicate()
dict["custom_CASL"] = int(button_pressed)
variable_font_variation.variation_opentype = dict
func _on_variable_monospace_toggled(button_pressed: bool) -> void:
$"TabContainer/Variable fonts/Variables/Monospace".button_pressed = button_pressed
# Workaround to make the variable font axis value effective. This requires duplicating the dictionary.
var dict := variable_font_variation.variation_opentype.duplicate()
dict["custom_MONO"] = int(button_pressed)
variable_font_variation.variation_opentype = dict
func _on_system_font_value_text_changed(new_text: String) -> void:
for label: Label in [
$"TabContainer/System fonts/VBoxContainer/SansSerif/Value",
$"TabContainer/System fonts/VBoxContainer/Serif/Value",
$"TabContainer/System fonts/VBoxContainer/Monospace/Value",
$"TabContainer/System fonts/VBoxContainer/Cursive/Value",
$"TabContainer/System fonts/VBoxContainer/Fantasy/Value",
$"TabContainer/System fonts/VBoxContainer/Custom/Value"
]:
label.text = new_text
func _on_system_font_weight_value_changed(value: float) -> void:
$"TabContainer/System fonts/Weight/Value".text = str(value)
for label: Label in [
$"TabContainer/System fonts/VBoxContainer/SansSerif/Value",
$"TabContainer/System fonts/VBoxContainer/Serif/Value",
$"TabContainer/System fonts/VBoxContainer/Monospace/Value",
$"TabContainer/System fonts/VBoxContainer/Cursive/Value",
$"TabContainer/System fonts/VBoxContainer/Fantasy/Value",
$"TabContainer/System fonts/VBoxContainer/Custom/Value"
]:
var system_font: SystemFont = label.get_theme_font("font")
system_font.font_weight = int(value)
func _on_system_font_italic_toggled(button_pressed: bool) -> void:
for label: Label in [
$"TabContainer/System fonts/VBoxContainer/SansSerif/Value",
$"TabContainer/System fonts/VBoxContainer/Serif/Value",
$"TabContainer/System fonts/VBoxContainer/Monospace/Value",
$"TabContainer/System fonts/VBoxContainer/Cursive/Value",
$"TabContainer/System fonts/VBoxContainer/Fantasy/Value",
$"TabContainer/System fonts/VBoxContainer/Custom/Value"
]:
var system_font: SystemFont = label.get_theme_font("font")
system_font.font_italic = button_pressed
func _on_system_font_name_text_changed(new_text: String) -> void:
var system_font: SystemFont = $"TabContainer/System fonts/VBoxContainer/Custom/FontName".get_theme_font("font")
system_font.font_names[0] = new_text