Files
nodewars/addons/curved_lines_2d/external_video_button.gd
2026-05-13 18:52:00 +02:00

52 lines
1.5 KiB
GDScript

@tool
extends PanelContainer
signal prop_updated()
@export var img : Texture2D:
set(_img):
img = _img
prop_updated.emit()
@export var uri : String:
set(_uri):
uri = _uri
prop_updated.emit()
@export var text : String:
set(_text):
text = _text
prop_updated.emit()
var stylebox : StyleBoxFlat = preload("res://addons/curved_lines_2d/external_video_button.stylebox")
var stylebox_hover : StyleBoxFlat = preload("res://addons/curved_lines_2d/external_video_button_hover.stylebox")
func _enter_tree() -> void:
if not prop_updated.is_connected(_on_prop_updated):
prop_updated.connect(_on_prop_updated)
_on_prop_updated()
func _on_prop_updated() -> void:
%LinkButtonWithCopyHint.uri = uri
%TextureButton.texture_normal = img
%LinkButtonWithCopyHint.text = text
%TextureButton.tooltip_text = %LinkButtonWithCopyHint.tooltip_text
tooltip_text = %LinkButtonWithCopyHint.tooltip_text
func _on_gui_input(event: InputEvent) -> void:
if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT and not Input.is_mouse_button_pressed(MOUSE_BUTTON_LEFT):
OS.shell_open(uri)
if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_RIGHT and not Input.is_mouse_button_pressed(MOUSE_BUTTON_RIGHT):
DisplayServer.clipboard_set(%LinkButtonWithCopyHint.uri)
if Engine.is_editor_hint():
EditorInterface.get_editor_toaster().push_toast("Link copied!")
func _on_mouse_entered() -> void:
add_theme_stylebox_override("panel", stylebox_hover)
func _on_mouse_exited() -> void:
add_theme_stylebox_override("panel", stylebox)