83 lines
1.9 KiB
GDScript3
83 lines
1.9 KiB
GDScript3
|
|
class_name NotepadInkAction
|
||
|
|
extends Button
|
||
|
|
|
||
|
|
@export var ink_color := Color(0.19, 0.16, 0.12, 1.0)
|
||
|
|
@export var disabled_ink_color := Color(0.31, 0.28, 0.23, 0.46)
|
||
|
|
@export var persistent_mark: bool = false:
|
||
|
|
set(value):
|
||
|
|
persistent_mark = value
|
||
|
|
_refresh_ink()
|
||
|
|
|
||
|
|
@onready var _ink_outline: NotepadInkOutline = %InkOutline
|
||
|
|
|
||
|
|
var _hovered: bool = false
|
||
|
|
var _focused: bool = false
|
||
|
|
var _pressed: bool = false
|
||
|
|
|
||
|
|
|
||
|
|
func _ready() -> void:
|
||
|
|
mouse_entered.connect(_set_hovered.bind(true))
|
||
|
|
mouse_exited.connect(_set_hovered.bind(false))
|
||
|
|
focus_entered.connect(_set_focused.bind(true))
|
||
|
|
focus_exited.connect(_set_focused.bind(false))
|
||
|
|
button_down.connect(_set_pressed.bind(true))
|
||
|
|
button_up.connect(_set_pressed.bind(false))
|
||
|
|
_apply_paper_style()
|
||
|
|
_refresh_ink()
|
||
|
|
|
||
|
|
|
||
|
|
func refresh_ink_state() -> void:
|
||
|
|
_apply_text_color()
|
||
|
|
_refresh_ink()
|
||
|
|
|
||
|
|
|
||
|
|
func _set_hovered(value: bool) -> void:
|
||
|
|
_hovered = value
|
||
|
|
_refresh_ink()
|
||
|
|
|
||
|
|
|
||
|
|
func _set_focused(value: bool) -> void:
|
||
|
|
_focused = value
|
||
|
|
_refresh_ink()
|
||
|
|
|
||
|
|
|
||
|
|
func _set_pressed(value: bool) -> void:
|
||
|
|
_pressed = value
|
||
|
|
_refresh_ink()
|
||
|
|
|
||
|
|
|
||
|
|
func _refresh_ink() -> void:
|
||
|
|
if not is_node_ready():
|
||
|
|
return
|
||
|
|
var strength: float = 0.0
|
||
|
|
if not disabled:
|
||
|
|
if persistent_mark:
|
||
|
|
strength = 0.78
|
||
|
|
if _hovered or _focused:
|
||
|
|
strength = maxf(strength, 0.92)
|
||
|
|
if _pressed:
|
||
|
|
strength = 1.0
|
||
|
|
_ink_outline.set_mark_strength(strength)
|
||
|
|
|
||
|
|
|
||
|
|
func _apply_paper_style() -> void:
|
||
|
|
var empty := StyleBoxEmpty.new()
|
||
|
|
for state: StringName in [
|
||
|
|
&"normal",
|
||
|
|
&"hover",
|
||
|
|
&"pressed",
|
||
|
|
&"focus",
|
||
|
|
&"disabled",
|
||
|
|
]:
|
||
|
|
add_theme_stylebox_override(state, empty)
|
||
|
|
_apply_text_color()
|
||
|
|
|
||
|
|
|
||
|
|
func _apply_text_color() -> void:
|
||
|
|
var color: Color = disabled_ink_color if disabled else ink_color
|
||
|
|
add_theme_color_override("font_color", color)
|
||
|
|
add_theme_color_override("font_hover_color", color.darkened(0.08))
|
||
|
|
add_theme_color_override("font_focus_color", color.darkened(0.08))
|
||
|
|
add_theme_color_override("font_pressed_color", color.darkened(0.16))
|
||
|
|
add_theme_color_override("font_disabled_color", disabled_ink_color)
|