frame-of-mind/src/button_themer.gd

52 lines
1.9 KiB
GDScript

@tool
class_name ThemedButton extends Button
@export_tool_button("Rebuild") var rebuild_action = rebuild
@onready var side_decor: CompressedTexture2D = load("res://import/interface-elements/button_active.png")
@onready var top_corner_decor: CompressedTexture2D = load("res://import/interface-elements/top_corner.png")
@onready var lower_corner_decor: CompressedTexture2D = load("res://import/interface-elements/lower_corner.png")
func _ready() -> void:
rebuild()
theme_changed.connect(rebuild)
resized.connect(rebuild)
clip_contents = true
var container: PanelContainer
func rebuild():
for child in get_children(): child.free()
match theme_type_variation:
"H1Button":
var top_corner:= TextureRect.new()
top_corner.texture = top_corner_decor
add_child(top_corner)
top_corner.expand_mode = TextureRect.EXPAND_FIT_WIDTH_PROPORTIONAL
top_corner.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT
top_corner.size = Vector2(size.y, size.y)
focus_entered.connect(top_corner.show)
focus_exited.connect(top_corner.hide)
top_corner.visible = has_focus()
var lower_corner:= TextureRect.new()
lower_corner.texture = lower_corner_decor
add_child(lower_corner, true, Node.INTERNAL_MODE_DISABLED)
lower_corner.expand_mode = TextureRect.EXPAND_IGNORE_SIZE
lower_corner.stretch_mode = TextureRect.STRETCH_SCALE
lower_corner.size = Vector2(size.y * lower_corner_decor.get_width() / lower_corner_decor.get_height(), size.y)
lower_corner.set_anchors_preset(Control.PRESET_BOTTOM_RIGHT, true)
lower_corner.position = size-lower_corner.size
_:
var side_thing:= TextureRect.new()
side_thing.texture = side_decor
add_child(side_thing)
side_thing.expand_mode = TextureRect.EXPAND_IGNORE_SIZE
side_thing.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT
side_thing.size = Vector2(size.y, size.y)
focus_entered.connect(side_thing.show)
focus_exited.connect(side_thing.hide)
side_thing.hide()