class_name UIStyle ## 위젯 UI의 색과 스타일박스를 한곳에서 정의한다. ## 테마 리소스(.tres) 대신 코드로 두어, 값 하나 바꾸면 전체가 따라오게 했다. const INK := Color(0.96, 0.99, 1.0) const INK_DIM := Color(0.78, 0.88, 0.94) const ACCENT := Color(0.62, 0.92, 1.0) const GOLD := Color(1.0, 0.85, 0.45) const PANEL_BG := Color(0.03, 0.10, 0.18, 0.82) const ROW_BG := Color(1, 1, 1, 0.06) const ROW_BG_HOVER := Color(1, 1, 1, 0.13) const ROW_BG_DISABLED := Color(0, 0, 0, 0.18) static func panel(bg: Color = PANEL_BG, radius: int = 14) -> StyleBoxFlat: var sb := StyleBoxFlat.new() sb.bg_color = bg sb.set_corner_radius_all(radius) sb.content_margin_left = 12 sb.content_margin_right = 12 sb.content_margin_top = 10 sb.content_margin_bottom = 10 return sb static func row(bg: Color, radius: int = 10) -> StyleBoxFlat: var sb := StyleBoxFlat.new() sb.bg_color = bg sb.set_corner_radius_all(radius) sb.content_margin_left = 10 sb.content_margin_right = 10 sb.content_margin_top = 8 sb.content_margin_bottom = 8 return sb ## 버튼의 네 가지 상태 스타일을 한 번에 입힌다. static func style_button(b: Button, radius: int = 10) -> void: b.add_theme_stylebox_override("normal", row(ROW_BG, radius)) b.add_theme_stylebox_override("hover", row(ROW_BG_HOVER, radius)) b.add_theme_stylebox_override("pressed", row(ROW_BG_HOVER, radius)) b.add_theme_stylebox_override("disabled", row(ROW_BG_DISABLED, radius)) b.add_theme_stylebox_override("focus", StyleBoxEmpty.new()) b.add_theme_color_override("font_color", INK) b.add_theme_color_override("font_hover_color", INK) b.add_theme_color_override("font_pressed_color", ACCENT) b.add_theme_color_override("font_disabled_color", Color(0.6, 0.66, 0.72, 0.7)) static func label(l: Label, size: int, color: Color = INK) -> void: l.add_theme_font_size_override("font_size", size) l.add_theme_color_override("font_color", color) # 물 위에서도 글씨가 읽히도록 옅은 외곽선을 준다. l.add_theme_color_override("font_shadow_color", Color(0, 0.05, 0.1, 0.55)) l.add_theme_constant_override("shadow_offset_x", 0) l.add_theme_constant_override("shadow_offset_y", 1) l.add_theme_constant_override("shadow_outline_size", 2) ## 잠긴 구역을 덮는 어두운 베일. static func veil(alpha: float) -> StyleBoxFlat: var sb := StyleBoxFlat.new() sb.bg_color = Color(0.01, 0.03, 0.07, alpha) return sb