52 lines
1.9 KiB
GDScript
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()
|