Put the whole look into one project theme
Build / test (pull_request) Successful in 31s
Build / build (pull_request) Skipped
Build / test (push) Successful in 31s
Build / build (push) Successful in 1m13s

themes/main_theme.tres is the project theme. It holds Godot's default look for
every control type the game uses, plus named styles for the game's own look
(popups, the background, spacers, list rows, title and text sizes, highlights)
and a palette for the popup dimming. Scenes and scripts name these styles
instead of setting colours, sizes or style boxes, and the five old theme files
are gone. themes/README.md explains the styles and how to make a new theme.

The screenshot tour now uses the real character pictures, so the layout
baseline is taken again. Screenshots are pixel-identical to before, and
test_theme.gd checks that the look stays in the theme.
This commit was merged in pull request #36.
This commit is contained in:
Sansan committed 2026-10-06 13:33:35 +02:00
1 parent a7bf38c5f9
commit 8b71723a34
39 files changed
+3283 -1869

No files matched your search

+8 -33
View File
@@ -2,58 +2,33 @@ class_name ListRow
extends PanelContainer extends PanelContainer
## One item in a list of names, such as the inspiration list or a sync result column. ## One item in a list of names, such as the inspiration list or a sync result column.
## ##
## Every row has its own background, alternating between two shades, so it is clear ## Every row has its own background, alternating between the theme's [code]ListRowEven[/code]
## where an item starts even when its text wraps over several lines. ## and [code]ListRowOdd[/code] styles, so it is clear where an item starts even when its
## text wraps over several lines.
const EVEN_BACKGROUND: Color = Color(1, 1, 1, 0.05)
const ODD_BACKGROUND: Color = Color(1, 1, 1, 0.11)
static var _even_style: StyleBoxFlat
static var _odd_style: StyleBoxFlat
## The label showing the item's text. ## The label showing the item's text.
var label: Label var label: Label
## The item's text. ## The item's text.
var text: String: var text: String:
get: get:
return label.text return label.text
## Creates the row for item number [param row] (counting from 0) in a list. ## Creates the row for item number [param row] (counting from 0) in a list. The text uses
## the theme's [param label_style], e.g. [code]TextLarge[/code].
static func create( static func create(
item_text: String, item_text: String,
row: int, row: int,
font_size: int, label_style: StringName,
alignment: HorizontalAlignment = HORIZONTAL_ALIGNMENT_LEFT, alignment: HorizontalAlignment = HORIZONTAL_ALIGNMENT_LEFT,
) -> ListRow: ) -> ListRow:
var list_row: ListRow = ListRow.new() var list_row: ListRow = ListRow.new()
list_row.add_theme_stylebox_override("panel", _style(row % 2 != 0)) list_row.theme_type_variation = &"ListRowOdd" if row % 2 != 0 else &"ListRowEven"
list_row.label = Label.new() list_row.label = Label.new()
list_row.label.add_theme_font_size_override("font_size", font_size) list_row.label.theme_type_variation = label_style
list_row.label.text = item_text list_row.label.text = item_text
list_row.label.horizontal_alignment = alignment list_row.label.horizontal_alignment = alignment
list_row.label.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART list_row.label.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART
list_row.add_child(list_row.label) list_row.add_child(list_row.label)
return list_row return list_row
# Rows share two styles instead of each creating its own
static func _style(odd: bool) -> StyleBoxFlat:
if _even_style == null:
_even_style = _make_style(EVEN_BACKGROUND)
_odd_style = _make_style(ODD_BACKGROUND)
return _odd_style if odd else _even_style
static func _make_style(background: Color) -> StyleBoxFlat:
var style: StyleBoxFlat = StyleBoxFlat.new()
style.bg_color = background
style.set_corner_radius_all(4)
style.content_margin_left = 8
style.content_margin_right = 8
style.content_margin_top = 2
style.content_margin_bottom = 2
return style
+10 -2
View File
@@ -8,7 +8,6 @@
[ext_resource type="PackedScene" uid="uid://bd1by80q1v27e" path="res://popups/ShortcutsPopup.tscn" id="13_8eebo"] [ext_resource type="PackedScene" uid="uid://bd1by80q1v27e" path="res://popups/ShortcutsPopup.tscn" id="13_8eebo"]
[ext_resource type="PackedScene" uid="uid://btupbowehiyyu" path="res://popups/QRPopup.tscn" id="15_qr_window"] [ext_resource type="PackedScene" uid="uid://btupbowehiyyu" path="res://popups/QRPopup.tscn" id="15_qr_window"]
[ext_resource type="PackedScene" uid="uid://cp54idaudb8dp" path="res://popups/AboutPopup.tscn" id="16_about_window"] [ext_resource type="PackedScene" uid="uid://cp54idaudb8dp" path="res://popups/AboutPopup.tscn" id="16_about_window"]
[ext_resource type="Theme" path="res://themes/popup_theme.tres" id="popup_theme"]
[ext_resource type="PackedScene" uid="uid://bijh5h5yrivm3" path="res://popups/LogPopup.tscn" id="14_26rwn"] [ext_resource type="PackedScene" uid="uid://bijh5h5yrivm3" path="res://popups/LogPopup.tscn" id="14_26rwn"]
[node name="MainWindow" type="Control" unique_id=407149696] [node name="MainWindow" type="Control" unique_id=407149696]
@@ -20,6 +19,16 @@ grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
script = ExtResource("1_eu0t5") script = ExtResource("1_eu0t5")
[node name="Background" type="Panel" parent="." unique_id=1093825566]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
theme_type_variation = &"WindowBackground"
[node name="TopBar" parent="." unique_id=1734261695 instance=ExtResource("top_bar_scene")] [node name="TopBar" parent="." unique_id=1734261695 instance=ExtResource("top_bar_scene")]
[node name="Quiz" parent="." unique_id=1357908642 instance=ExtResource("quiz_scene")] [node name="Quiz" parent="." unique_id=1357908642 instance=ExtResource("quiz_scene")]
@@ -60,7 +69,6 @@ offset_right = 1262.0
offset_bottom = 860.0 offset_bottom = 860.0
[node name="StatisticsPopupPanel" type="PopupPanel" parent="." unique_id=298311407] [node name="StatisticsPopupPanel" type="PopupPanel" parent="." unique_id=298311407]
theme = ExtResource("popup_theme")
oversampling_override = 1.0 oversampling_override = 1.0
initial_position = 2 initial_position = 2
size = Vector2i(450, 100) size = Vector2i(450, 100)
+1 -5
View File
@@ -2,9 +2,6 @@
[ext_resource type="Script" path="res://main/top_bar.gd" id="top_bar_script"] [ext_resource type="Script" path="res://main/top_bar.gd" id="top_bar_script"]
[sub_resource type="LabelSettings" id="LabelSettings_ychxr"]
font_size = 25
[sub_resource type="InputEventKey" id="InputEventKey_ujjlu"] [sub_resource type="InputEventKey" id="InputEventKey_ujjlu"]
device = -1 device = -1
alt_pressed = true alt_pressed = true
@@ -34,8 +31,8 @@ offset_top = 12.0
offset_right = 369.0 offset_right = 369.0
offset_bottom = 50.0 offset_bottom = 50.0
size_flags_horizontal = 0 size_flags_horizontal = 0
theme_type_variation = &"Title"
text = "Music Player Randomizer" text = "Music Player Randomizer"
label_settings = SubResource("LabelSettings_ychxr")
[node name="SyncButton" type="Button" parent="." unique_id=1228313556] [node name="SyncButton" type="Button" parent="." unique_id=1228313556]
layout_mode = 0 layout_mode = 0
@@ -97,4 +94,3 @@ offset_bottom = 48.0
focus_mode = 0 focus_mode = 0
action_mode = 0 action_mode = 0
text = "QR" text = "QR"
+1 -2
View File
@@ -1,10 +1,8 @@
[gd_scene format=3 uid="uid://cp54idaudb8dp"] [gd_scene format=3 uid="uid://cp54idaudb8dp"]
[ext_resource type="Script" uid="uid://b7bh0of7olbcb" path="res://popups/about_popup.gd" id="1_about_script"] [ext_resource type="Script" uid="uid://b7bh0of7olbcb" path="res://popups/about_popup.gd" id="1_about_script"]
[ext_resource type="Theme" path="res://themes/popup_theme.tres" id="popup_theme"]
[node name="AboutPopup" type="Control" unique_id=1626010355 node_paths=PackedStringArray("panel")] [node name="AboutPopup" type="Control" unique_id=1626010355 node_paths=PackedStringArray("panel")]
theme = ExtResource("popup_theme")
layout_mode = 3 layout_mode = 3
anchors_preset = 15 anchors_preset = 15
anchor_right = 1.0 anchor_right = 1.0
@@ -19,6 +17,7 @@ unique_name_in_owner = true
layout_mode = 0 layout_mode = 0
offset_right = 600.0 offset_right = 600.0
offset_bottom = 640.0 offset_bottom = 640.0
theme_type_variation = &"PopupBackground"
[node name="TitleLabel" type="Label" parent="AboutPanel" unique_id=200295721] [node name="TitleLabel" type="Label" parent="AboutPanel" unique_id=200295721]
layout_mode = 0 layout_mode = 0
+2 -5
View File
@@ -1,11 +1,8 @@
[gd_scene load_steps=4 format=3 uid="uid://c7ecjj2af6usf"] [gd_scene format=3 uid="uid://c7ecjj2af6usf"]
[ext_resource type="Script" uid="uid://i35b3scbpwpu" path="res://popups/character_card.gd" id="1_pjt0s"] [ext_resource type="Script" uid="uid://i35b3scbpwpu" path="res://popups/character_card.gd" id="1_pjt0s"]
[ext_resource type="Texture2D" uid="uid://cv3hdd6bsruau" path="res://icon.svg" id="2_pjt0s"] [ext_resource type="Texture2D" uid="uid://cv3hdd6bsruau" path="res://icon.svg" id="2_pjt0s"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_pjt0s"]
bg_color = Color(0.302, 0.302, 0.302, 1)
[node name="CharacterCard" type="Control"] [node name="CharacterCard" type="Control"]
layout_mode = 3 layout_mode = 3
anchors_preset = 0 anchors_preset = 0
@@ -15,7 +12,7 @@ script = ExtResource("1_pjt0s")
layout_mode = 0 layout_mode = 0
offset_right = 240.0 offset_right = 240.0
offset_bottom = 145.0 offset_bottom = 145.0
theme_override_styles/panel = SubResource("StyleBoxFlat_pjt0s") theme_type_variation = &"CharacterCard"
[node name="MarginContainer" type="MarginContainer" parent="Panel"] [node name="MarginContainer" type="MarginContainer" parent="Panel"]
layout_mode = 0 layout_mode = 0
+3 -7
View File
@@ -1,13 +1,8 @@
[gd_scene load_steps=3 format=3 uid="uid://cdy4kvemwaiom"] [gd_scene format=3 uid="uid://cdy4kvemwaiom"]
[ext_resource type="Script" uid="uid://cvffg87wr6r3y" path="res://popups/character_select_popup.gd" id="1_h4tdp"] [ext_resource type="Script" uid="uid://cvffg87wr6r3y" path="res://popups/character_select_popup.gd" id="1_h4tdp"]
[ext_resource type="Theme" path="res://themes/popup_theme.tres" id="popup_theme"]
[sub_resource type="LabelSettings" id="LabelSettings_p4iny"]
font_size = 25
[node name="CharacterSelectPopup" type="Control" node_paths=PackedStringArray("panel")] [node name="CharacterSelectPopup" type="Control" node_paths=PackedStringArray("panel")]
theme = ExtResource("popup_theme")
layout_mode = 3 layout_mode = 3
anchors_preset = 0 anchors_preset = 0
script = ExtResource("1_h4tdp") script = ExtResource("1_h4tdp")
@@ -18,6 +13,7 @@ unique_name_in_owner = true
layout_mode = 0 layout_mode = 0
offset_right = 1290.0 offset_right = 1290.0
offset_bottom = 665.0 offset_bottom = 665.0
theme_type_variation = &"PopupBackground"
[node name="VBoxContainer" type="VBoxContainer" parent="CharacterPanel"] [node name="VBoxContainer" type="VBoxContainer" parent="CharacterPanel"]
layout_mode = 0 layout_mode = 0
@@ -29,8 +25,8 @@ size_flags_horizontal = 3
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
size_flags_vertical = 0 size_flags_vertical = 0
theme_type_variation = &"Title"
text = "Character Select" text = "Character Select"
label_settings = SubResource("LabelSettings_p4iny")
horizontal_alignment = 1 horizontal_alignment = 1
[node name="MarginContainer" type="MarginContainer" parent="CharacterPanel/VBoxContainer"] [node name="MarginContainer" type="MarginContainer" parent="CharacterPanel/VBoxContainer"]
+3 -4
View File
@@ -1,10 +1,8 @@
[gd_scene load_steps=2 format=3 uid="uid://bijh5h5yrivm3"] [gd_scene format=3 uid="uid://bijh5h5yrivm3"]
[ext_resource type="Script" uid="uid://cw41y87l64qo7" path="res://popups/log_popup.gd" id="1_q72ua"] [ext_resource type="Script" uid="uid://cw41y87l64qo7" path="res://popups/log_popup.gd" id="1_q72ua"]
[ext_resource type="Theme" path="res://themes/popup_theme.tres" id="popup_theme"]
[node name="LogPopup" type="Control" node_paths=PackedStringArray("panel")] [node name="LogPopup" type="Control" node_paths=PackedStringArray("panel")]
theme = ExtResource("popup_theme")
custom_minimum_size = Vector2(700, 700) custom_minimum_size = Vector2(700, 700)
layout_mode = 3 layout_mode = 3
anchors_preset = 15 anchors_preset = 15
@@ -22,13 +20,14 @@ custom_minimum_size = Vector2(700, 700)
layout_mode = 0 layout_mode = 0
offset_right = 700.0 offset_right = 700.0
offset_bottom = 700.0 offset_bottom = 700.0
theme_type_variation = &"PopupBackground"
[node name="TitleLabel" type="Label" parent="LogPanel"] [node name="TitleLabel" type="Label" parent="LogPanel"]
layout_mode = 0 layout_mode = 0
offset_top = 8.0 offset_top = 8.0
offset_right = 700.0 offset_right = 700.0
offset_bottom = 48.0 offset_bottom = 48.0
theme_override_font_sizes/font_size = 25 theme_type_variation = &"Title"
text = "Log" text = "Log"
horizontal_alignment = 1 horizontal_alignment = 1
+1 -2
View File
@@ -2,10 +2,8 @@
[ext_resource type="Script" uid="uid://bsa6xg5xos6h7" path="res://popups/qr_popup.gd" id="1_qr_script"] [ext_resource type="Script" uid="uid://bsa6xg5xos6h7" path="res://popups/qr_popup.gd" id="1_qr_script"]
[ext_resource type="Script" uid="uid://dynulhnyq5hpq" path="res://addons/kenyoni/qr_code/qr_code_rect.gd" id="2_jpsxt"] [ext_resource type="Script" uid="uid://dynulhnyq5hpq" path="res://addons/kenyoni/qr_code/qr_code_rect.gd" id="2_jpsxt"]
[ext_resource type="Theme" path="res://themes/popup_theme.tres" id="popup_theme"]
[node name="QRPopup" type="Control" unique_id=1996957585 node_paths=PackedStringArray("panel")] [node name="QRPopup" type="Control" unique_id=1996957585 node_paths=PackedStringArray("panel")]
theme = ExtResource("popup_theme")
layout_mode = 3 layout_mode = 3
anchors_preset = 15 anchors_preset = 15
anchor_right = 1.0 anchor_right = 1.0
@@ -20,6 +18,7 @@ unique_name_in_owner = true
layout_mode = 0 layout_mode = 0
offset_right = 450.0 offset_right = 450.0
offset_bottom = 520.0 offset_bottom = 520.0
theme_type_variation = &"PopupBackground"
[node name="QRCodeRect" type="TextureRect" parent="QRPanel" unique_id=1054378438] [node name="QRCodeRect" type="TextureRect" parent="QRPanel" unique_id=1054378438]
unique_name_in_owner = true unique_name_in_owner = true
+1 -2
View File
@@ -1,10 +1,8 @@
[gd_scene format=3 uid="uid://bxydgil1yifps"] [gd_scene format=3 uid="uid://bxydgil1yifps"]
[ext_resource type="Script" uid="uid://bg5yo08638600" path="res://popups/search_popup.gd" id="1_m7bij"] [ext_resource type="Script" uid="uid://bg5yo08638600" path="res://popups/search_popup.gd" id="1_m7bij"]
[ext_resource type="Theme" path="res://themes/popup_theme.tres" id="popup_theme"]
[node name="SearchPopup" type="Control" unique_id=616238617 node_paths=PackedStringArray("panel")] [node name="SearchPopup" type="Control" unique_id=616238617 node_paths=PackedStringArray("panel")]
theme = ExtResource("popup_theme")
layout_mode = 3 layout_mode = 3
anchors_preset = 15 anchors_preset = 15
anchor_right = 1.0 anchor_right = 1.0
@@ -19,6 +17,7 @@ unique_name_in_owner = true
layout_mode = 0 layout_mode = 0
offset_right = 1152.0 offset_right = 1152.0
offset_bottom = 640.0 offset_bottom = 640.0
theme_type_variation = &"PopupBackground"
[node name="ClearButton" type="Button" parent="." unique_id=1549439398] [node name="ClearButton" type="Button" parent="." unique_id=1549439398]
layout_mode = 0 layout_mode = 0
+2 -6
View File
@@ -1,13 +1,8 @@
[gd_scene format=3 uid="uid://dldpeo5y3l5hq"] [gd_scene format=3 uid="uid://dldpeo5y3l5hq"]
[ext_resource type="Script" uid="uid://dukqyjoduf1af" path="res://popups/settings_popup.gd" id="1_bt55j"] [ext_resource type="Script" uid="uid://dukqyjoduf1af" path="res://popups/settings_popup.gd" id="1_bt55j"]
[ext_resource type="Theme" path="res://themes/popup_theme.tres" id="popup_theme"]
[sub_resource type="LabelSettings" id="LabelSettings_3xrlm"]
font_size = 25
[node name="SettingsPopup" type="Control" unique_id=1298840328 node_paths=PackedStringArray("panel")] [node name="SettingsPopup" type="Control" unique_id=1298840328 node_paths=PackedStringArray("panel")]
theme = ExtResource("popup_theme")
layout_mode = 3 layout_mode = 3
anchors_preset = 15 anchors_preset = 15
anchor_right = 1.0 anchor_right = 1.0
@@ -22,6 +17,7 @@ unique_name_in_owner = true
layout_mode = 0 layout_mode = 0
offset_right = 500.0 offset_right = 500.0
offset_bottom = 640.0 offset_bottom = 640.0
theme_type_variation = &"PopupBackground"
[node name="ScrollContainer" type="ScrollContainer" parent="SettingsPanel" unique_id=1325795358] [node name="ScrollContainer" type="ScrollContainer" parent="SettingsPanel" unique_id=1325795358]
layout_mode = 0 layout_mode = 0
@@ -39,8 +35,8 @@ size_flags_horizontal = 3
[node name="Label" type="Label" parent="SettingsPanel/ScrollContainer/VBoxContainer" unique_id=1111531402] [node name="Label" type="Label" parent="SettingsPanel/ScrollContainer/VBoxContainer" unique_id=1111531402]
layout_mode = 2 layout_mode = 2
size_flags_vertical = 0 size_flags_vertical = 0
theme_type_variation = &"Title"
text = "Settings" text = "Settings"
label_settings = SubResource("LabelSettings_3xrlm")
horizontal_alignment = 1 horizontal_alignment = 1
[node name="StopAfterCurrentCheckButton" type="CheckButton" parent="SettingsPanel/ScrollContainer/VBoxContainer" unique_id=508305575] [node name="StopAfterCurrentCheckButton" type="CheckButton" parent="SettingsPanel/ScrollContainer/VBoxContainer" unique_id=508305575]
+2 -3
View File
@@ -1,10 +1,8 @@
[gd_scene load_steps=2 format=3 uid="uid://bd1by80q1v27e"] [gd_scene format=3 uid="uid://bd1by80q1v27e"]
[ext_resource type="Script" uid="uid://rolypd0cqd6h" path="res://popups/shortcuts_popup.gd" id="1_12pxi"] [ext_resource type="Script" uid="uid://rolypd0cqd6h" path="res://popups/shortcuts_popup.gd" id="1_12pxi"]
[ext_resource type="Theme" path="res://themes/popup_theme.tres" id="popup_theme"]
[node name="ShortcutsPopup" type="Control" node_paths=PackedStringArray("panel")] [node name="ShortcutsPopup" type="Control" node_paths=PackedStringArray("panel")]
theme = ExtResource("popup_theme")
custom_minimum_size = Vector2(700, 700) custom_minimum_size = Vector2(700, 700)
layout_mode = 3 layout_mode = 3
anchors_preset = 15 anchors_preset = 15
@@ -21,6 +19,7 @@ custom_minimum_size = Vector2(700, 700)
layout_mode = 0 layout_mode = 0
offset_right = 40.0 offset_right = 40.0
offset_bottom = 40.0 offset_bottom = 40.0
theme_type_variation = &"PopupBackground"
[node name="ScrollContainer" type="ScrollContainer" parent="ShortcutsPanel"] [node name="ScrollContainer" type="ScrollContainer" parent="ShortcutsPanel"]
custom_minimum_size = Vector2(700, 700) custom_minimum_size = Vector2(700, 700)
+3 -7
View File
@@ -1,13 +1,8 @@
[gd_scene format=3 uid="uid://dpdem7pdxweb5"] [gd_scene format=3 uid="uid://dpdem7pdxweb5"]
[ext_resource type="Script" uid="uid://c3ejukwth512a" path="res://popups/sync_popup.gd" id="1_8ba47"] [ext_resource type="Script" uid="uid://c3ejukwth512a" path="res://popups/sync_popup.gd" id="1_8ba47"]
[ext_resource type="Theme" path="res://themes/popup_theme.tres" id="popup_theme"]
[sub_resource type="LabelSettings" id="LabelSettings_anbfi"]
font_size = 25
[node name="SyncPopup" type="Control" unique_id=1302914356 node_paths=PackedStringArray("panel")] [node name="SyncPopup" type="Control" unique_id=1302914356 node_paths=PackedStringArray("panel")]
theme = ExtResource("popup_theme")
layout_mode = 3 layout_mode = 3
anchors_preset = 15 anchors_preset = 15
anchor_right = 1.0 anchor_right = 1.0
@@ -22,6 +17,7 @@ unique_name_in_owner = true
layout_mode = 0 layout_mode = 0
offset_right = 1500.0 offset_right = 1500.0
offset_bottom = 640.0 offset_bottom = 640.0
theme_type_variation = &"PopupBackground"
[node name="ScrollContainer" type="ScrollContainer" parent="SyncPanel" unique_id=1289116349] [node name="ScrollContainer" type="ScrollContainer" parent="SyncPanel" unique_id=1289116349]
layout_mode = 0 layout_mode = 0
@@ -40,8 +36,8 @@ theme_override_constants/separation = 12
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
size_flags_vertical = 0 size_flags_vertical = 0
theme_type_variation = &"Title"
text = "Sync" text = "Sync"
label_settings = SubResource("LabelSettings_anbfi")
horizontal_alignment = 1 horizontal_alignment = 1
[node name="SyncTime" type="Label" parent="SyncPanel/ScrollContainer/SyncVBoxContainer" unique_id=1344333200] [node name="SyncTime" type="Label" parent="SyncPanel/ScrollContainer/SyncVBoxContainer" unique_id=1344333200]
@@ -55,8 +51,8 @@ unique_name_in_owner = true
visible = false visible = false
layout_mode = 2 layout_mode = 2
size_flags_vertical = 0 size_flags_vertical = 0
theme_type_variation = &"Title"
text = "No changes since last sync" text = "No changes since last sync"
label_settings = SubResource("LabelSettings_anbfi")
horizontal_alignment = 1 horizontal_alignment = 1
[node name="ProgressHBoxContainer" type="HBoxContainer" parent="SyncPanel/ScrollContainer/SyncVBoxContainer" unique_id=196414805] [node name="ProgressHBoxContainer" type="HBoxContainer" parent="SyncPanel/ScrollContainer/SyncVBoxContainer" unique_id=196414805]
+2 -6
View File
@@ -2,13 +2,8 @@
[ext_resource type="Script" uid="uid://dxpb22xbwf3t1" path="res://popups/winner_popup.gd" id="1_winner_script"] [ext_resource type="Script" uid="uid://dxpb22xbwf3t1" path="res://popups/winner_popup.gd" id="1_winner_script"]
[ext_resource type="Texture2D" uid="uid://r4as0nmtoa7p" path="res://noCharacter.png" id="2_no_character"] [ext_resource type="Texture2D" uid="uid://r4as0nmtoa7p" path="res://noCharacter.png" id="2_no_character"]
[ext_resource type="Theme" path="res://themes/popup_theme.tres" id="popup_theme"]
[sub_resource type="LabelSettings" id="LabelSettings_hr75l"]
font_size = 35
[node name="WinnerPopup" type="Control" unique_id=1111111111 node_paths=PackedStringArray("panel")] [node name="WinnerPopup" type="Control" unique_id=1111111111 node_paths=PackedStringArray("panel")]
theme = ExtResource("popup_theme")
layout_mode = 3 layout_mode = 3
anchors_preset = 15 anchors_preset = 15
anchor_right = 1.0 anchor_right = 1.0
@@ -23,6 +18,7 @@ unique_name_in_owner = true
layout_mode = 0 layout_mode = 0
offset_right = 500.0 offset_right = 500.0
offset_bottom = 600.0 offset_bottom = 600.0
theme_type_variation = &"PopupBackground"
[node name="VBoxContainer" type="VBoxContainer" parent="WinnerPanel" unique_id=471159349] [node name="VBoxContainer" type="VBoxContainer" parent="WinnerPanel" unique_id=471159349]
layout_mode = 0 layout_mode = 0
@@ -44,8 +40,8 @@ stretch_mode = 5
[node name="WinnerLabel" type="Label" parent="WinnerPanel/VBoxContainer" unique_id=1437597286] [node name="WinnerLabel" type="Label" parent="WinnerPanel/VBoxContainer" unique_id=1437597286]
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
theme_type_variation = &"TitleMedium"
text = "Winner!" text = "Winner!"
label_settings = SubResource("LabelSettings_hr75l")
horizontal_alignment = 1 horizontal_alignment = 1
vertical_alignment = 2 vertical_alignment = 2
+1 -1
View File
@@ -17,7 +17,7 @@ func add_log_row(text: String) -> void:
func make_log_label(row: String) -> Label: func make_log_label(row: String) -> Label:
var log_label: Label = Label.new() var log_label: Label = Label.new()
log_label.add_theme_font_size_override("font_size", 20) log_label.theme_type_variation = &"TextLarge"
log_label.text = row log_label.text = row
log_label.autowrap_mode = TextServer.AUTOWRAP_WORD log_label.autowrap_mode = TextServer.AUTOWRAP_WORD
return log_label return log_label
+1 -1
View File
@@ -15,10 +15,10 @@ var _popups: Array[BasePopup] = []
static func add_to(parent: Control, popups: Array[BasePopup]) -> PopupBackdrop: static func add_to(parent: Control, popups: Array[BasePopup]) -> PopupBackdrop:
var backdrop: PopupBackdrop = PopupBackdrop.new() var backdrop: PopupBackdrop = PopupBackdrop.new()
backdrop.name = "PopupBackdrop" backdrop.name = "PopupBackdrop"
backdrop.color = Color(0, 0, 0, 0.55)
backdrop.mouse_filter = Control.MOUSE_FILTER_STOP backdrop.mouse_filter = Control.MOUSE_FILTER_STOP
backdrop._popups = popups backdrop._popups = popups
parent.add_child(backdrop) parent.add_child(backdrop)
backdrop.color = backdrop.get_theme_color(&"backdrop", &"Palette")
backdrop.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT) backdrop.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)
for popup: BasePopup in popups: for popup: BasePopup in popups:
parent.move_child(popup, -1) parent.move_child(popup, -1)
+4 -9
View File
@@ -25,15 +25,12 @@ var shortcuts_dic: Dictionary = {
@onready var shortcuts_panel: Panel = %ShortcutsPanel @onready var shortcuts_panel: Panel = %ShortcutsPanel
#Color(0.18, 0.18, 0.18)
#Color(0.302, 0.302, 0.302)
#Color(0.259, 0.259, 0.259)
func _ready() -> void: func _ready() -> void:
shortcuts_dic.sort() shortcuts_dic.sort()
Settings.delete_children(shortcuts_vbox) Settings.delete_children(shortcuts_vbox)
var title: Label = Label.new() var title: Label = Label.new()
title.add_theme_font_size_override("font_size", 20) title.theme_type_variation = &"TextLarge"
title.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER title.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
title.text = "Shortcuts" title.text = "Shortcuts"
shortcuts_vbox.add_child(title) shortcuts_vbox.add_child(title)
@@ -45,23 +42,21 @@ func _ready() -> void:
hbox.alignment = BoxContainer.ALIGNMENT_CENTER hbox.alignment = BoxContainer.ALIGNMENT_CENTER
var label: Label = Label.new() var label: Label = Label.new()
label.add_theme_font_size_override("font_size", 20) label.theme_type_variation = &"TextLarge"
label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
label.text = shortcut label.text = shortcut
label.autowrap_mode = TextServer.AUTOWRAP_WORD label.autowrap_mode = TextServer.AUTOWRAP_WORD
label.size_flags_horizontal = Control.SIZE_EXPAND_FILL label.size_flags_horizontal = Control.SIZE_EXPAND_FILL
var label2: Label = Label.new() var label2: Label = Label.new()
label2.add_theme_font_size_override("font_size", 20) label2.theme_type_variation = &"TextLarge"
label2.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER label2.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
label2.text = shortcuts_dic[shortcut] label2.text = shortcuts_dic[shortcut]
label2.autowrap_mode = TextServer.AUTOWRAP_WORD label2.autowrap_mode = TextServer.AUTOWRAP_WORD
label2.size_flags_horizontal = Control.SIZE_EXPAND_FILL label2.size_flags_horizontal = Control.SIZE_EXPAND_FILL
if count % 2 == 0: if count % 2 == 0:
var new_stylebox_normal: Resource = panel.get_theme_stylebox("panel").duplicate() panel.theme_type_variation = &"ShortcutRowDark"
new_stylebox_normal.bg_color = Color(0.18, 0.18, 0.18)
panel.add_theme_stylebox_override("panel", new_stylebox_normal)
hbox.add_child(label) hbox.add_child(label)
hbox.add_child(label2) hbox.add_child(label2)
+3 -6
View File
@@ -171,19 +171,16 @@ func list_visible(vbox: VBoxContainer, separator: VSeparator) -> void:
func make_header_label(vbox: VBoxContainer, text: String) -> void: func make_header_label(vbox: VBoxContainer, text: String) -> void:
var label: Label = Label.new() var label: Label = Label.new()
label.add_theme_font_size_override("font_size", 20) label.theme_type_variation = &"HighlightLarge"
label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
label.add_theme_color_override("font_color", Color(1, 0.5, 0))
label.text = text label.text = text
vbox.add_child(label) vbox.add_child(label)
# Items alternate between white and orange text as well as background shade # Items alternate between white and orange text as well as background shade
func make_soundtrack_row(text: String, row: int) -> ListRow: func make_soundtrack_row(text: String, row: int) -> ListRow:
var list_row: ListRow = ListRow.create(text, row, 18, HORIZONTAL_ALIGNMENT_CENTER) var label_style: StringName = &"HighlightMedium" if row % 2 != 0 else &"TextMedium"
if row % 2 != 0: return ListRow.create(text, row, label_style, HORIZONTAL_ALIGNMENT_CENTER)
list_row.label.add_theme_color_override("font_color", Color(1, 0.5, 0))
return list_row
func reset_sync_result() -> void: func reset_sync_result() -> void:
+4
View File
@@ -48,6 +48,10 @@ project/assembly_name="MusicPlayer"
enabled=PackedStringArray("res://addons/kenyoni/qr_code/plugin.cfg", "res://addons/gdUnit4/plugin.cfg") enabled=PackedStringArray("res://addons/kenyoni/qr_code/plugin.cfg", "res://addons/gdUnit4/plugin.cfg")
[gui]
theme/custom="res://themes/main_theme.tres"
[input] [input]
ui_accept={ ui_accept={
+1 -2
View File
@@ -2,13 +2,12 @@
[ext_resource type="Script" path="res://quiz/music_list_panel.gd" id="part_script"] [ext_resource type="Script" path="res://quiz/music_list_panel.gd" id="part_script"]
[ext_resource type="Script" uid="uid://gf1bk6xbe3j" path="res://quiz/scroll_to_end_container.gd" id="7_dj026"] [ext_resource type="Script" uid="uid://gf1bk6xbe3j" path="res://quiz/scroll_to_end_container.gd" id="7_dj026"]
[ext_resource type="Theme" uid="uid://rxexo3ur85as" path="res://themes/light_gray_theme.tres" id="7_wxbv6"]
[node name="MusicListPanel" type="PanelContainer" unique_id=2011292375] [node name="MusicListPanel" type="PanelContainer" unique_id=2011292375]
layout_mode = 3 layout_mode = 3
theme = ExtResource("7_wxbv6")
offset_right = 1088.0 offset_right = 1088.0
offset_bottom = 512.0 offset_bottom = 512.0
theme_type_variation = &"MusicList"
script = ExtResource("part_script") script = ExtResource("part_script")
[node name="ScrollContainer" type="ScrollContainer" parent="." unique_id=707750459] [node name="ScrollContainer" type="ScrollContainer" parent="." unique_id=707750459]
+2 -8
View File
@@ -2,12 +2,6 @@
[ext_resource type="Script" path="res://quiz/now_playing.gd" id="part_script"] [ext_resource type="Script" path="res://quiz/now_playing.gd" id="part_script"]
[sub_resource type="LabelSettings" id="LabelSettings_qspbu"]
font_size = 50
[sub_resource type="LabelSettings" id="LabelSettings_3m52w"]
font_size = 35
[node name="NowPlaying" type="VBoxContainer" unique_id=42468498] [node name="NowPlaying" type="VBoxContainer" unique_id=42468498]
layout_mode = 3 layout_mode = 3
offset_right = 1088.0 offset_right = 1088.0
@@ -17,13 +11,13 @@ script = ExtResource("part_script")
[node name="SoundtrackLabel" type="Label" parent="." unique_id=173147793] [node name="SoundtrackLabel" type="Label" parent="." unique_id=173147793]
custom_minimum_size = Vector2(1, 1) custom_minimum_size = Vector2(1, 1)
layout_mode = 2 layout_mode = 2
label_settings = SubResource("LabelSettings_qspbu") theme_type_variation = &"TitleLarge"
horizontal_alignment = 1 horizontal_alignment = 1
autowrap_mode = 2 autowrap_mode = 2
[node name="SongLabel" type="Label" parent="." unique_id=1687490027] [node name="SongLabel" type="Label" parent="." unique_id=1687490027]
custom_minimum_size = Vector2(1, 1) custom_minimum_size = Vector2(1, 1)
layout_mode = 2 layout_mode = 2
label_settings = SubResource("LabelSettings_3m52w") theme_type_variation = &"TitleMedium"
horizontal_alignment = 1 horizontal_alignment = 1
autowrap_mode = 2 autowrap_mode = 2
+6 -21
View File
@@ -1,24 +1,9 @@
[gd_scene load_steps=9 format=3 uid="uid://cslogy2csnd7a"] [gd_scene format=3 uid="uid://cslogy2csnd7a"]
[ext_resource type="Script" uid="uid://dl6no2wr2c86y" path="res://quiz/player_row.gd" id="1_if4kc"] [ext_resource type="Script" uid="uid://dl6no2wr2c86y" path="res://quiz/player_row.gd" id="1_if4kc"]
[ext_resource type="Texture2D" uid="uid://r4as0nmtoa7p" path="res://noCharacter.png" id="2_hpj3s"] [ext_resource type="Texture2D" uid="uid://r4as0nmtoa7p" path="res://noCharacter.png" id="2_hpj3s"]
[ext_resource type="Texture2D" uid="uid://b2kj6m8qpsgb1" path="res://icons/person_remove_light.svg" id="3_j3uxe"] [ext_resource type="Texture2D" uid="uid://b2kj6m8qpsgb1" path="res://icons/person_remove_light.svg" id="3_j3uxe"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_821k2"]
bg_color = Color(0.180392, 0.180392, 0.180392, 1)
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_w10e8"]
bg_color = Color(0.180392, 0.180392, 0.180392, 1)
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_78a8g"]
bg_color = Color(0.180392, 0.180392, 0.180392, 1)
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_i56hb"]
bg_color = Color(0.180392, 0.180392, 0.180392, 1)
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_b2crt"]
bg_color = Color(0.180392, 0.180392, 0.180392, 1)
[node name="PlayerRow" type="Control"] [node name="PlayerRow" type="Control"]
custom_minimum_size = Vector2(2.08165e-12, 40) custom_minimum_size = Vector2(2.08165e-12, 40)
layout_mode = 3 layout_mode = 3
@@ -39,7 +24,7 @@ grow_vertical = 2
[node name="Panel4" type="Panel" parent="HBoxContainer"] [node name="Panel4" type="Panel" parent="HBoxContainer"]
custom_minimum_size = Vector2(5, 40) custom_minimum_size = Vector2(5, 40)
layout_mode = 2 layout_mode = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_821k2") theme_type_variation = &"DarkSpacer"
[node name="Name" type="Label" parent="HBoxContainer"] [node name="Name" type="Label" parent="HBoxContainer"]
unique_name_in_owner = true unique_name_in_owner = true
@@ -55,7 +40,7 @@ text_overrun_behavior = 3
[node name="Panel3" type="Panel" parent="HBoxContainer"] [node name="Panel3" type="Panel" parent="HBoxContainer"]
custom_minimum_size = Vector2(16, 2.08165e-12) custom_minimum_size = Vector2(16, 2.08165e-12)
layout_mode = 2 layout_mode = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_w10e8") theme_type_variation = &"DarkSpacer"
[node name="Character" type="TextureButton" parent="HBoxContainer"] [node name="Character" type="TextureButton" parent="HBoxContainer"]
unique_name_in_owner = true unique_name_in_owner = true
@@ -70,7 +55,7 @@ stretch_mode = 5
[node name="Panel2" type="Panel" parent="HBoxContainer"] [node name="Panel2" type="Panel" parent="HBoxContainer"]
custom_minimum_size = Vector2(30, 40) custom_minimum_size = Vector2(30, 40)
layout_mode = 2 layout_mode = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_78a8g") theme_type_variation = &"DarkSpacer"
[node name="AddPoint" type="Button" parent="HBoxContainer"] [node name="AddPoint" type="Button" parent="HBoxContainer"]
unique_name_in_owner = true unique_name_in_owner = true
@@ -83,7 +68,7 @@ text = "+1"
[node name="Panel5" type="Panel" parent="HBoxContainer"] [node name="Panel5" type="Panel" parent="HBoxContainer"]
custom_minimum_size = Vector2(3, 40) custom_minimum_size = Vector2(3, 40)
layout_mode = 2 layout_mode = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_i56hb") theme_type_variation = &"DarkSpacer"
[node name="RemovePoint" type="Button" parent="HBoxContainer"] [node name="RemovePoint" type="Button" parent="HBoxContainer"]
unique_name_in_owner = true unique_name_in_owner = true
@@ -96,7 +81,7 @@ text = "-1"
[node name="Panel" type="Panel" parent="HBoxContainer"] [node name="Panel" type="Panel" parent="HBoxContainer"]
custom_minimum_size = Vector2(30, 40) custom_minimum_size = Vector2(30, 40)
layout_mode = 2 layout_mode = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_b2crt") theme_type_variation = &"DarkSpacer"
[node name="RemovePlayer" type="TextureButton" parent="HBoxContainer"] [node name="RemovePlayer" type="TextureButton" parent="HBoxContainer"]
unique_name_in_owner = true unique_name_in_owner = true
+2 -8
View File
@@ -13,12 +13,6 @@ unicode = 63743
[sub_resource type="Shortcut" id="Shortcut_jafqj"] [sub_resource type="Shortcut" id="Shortcut_jafqj"]
events = [SubResource("InputEventKey_03bm3")] events = [SubResource("InputEventKey_03bm3")]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_qk7sj"]
bg_color = Color(0.180392, 0.180392, 0.180392, 1)
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_k1ygi"]
bg_color = Color(0.180392, 0.180392, 0.180392, 1)
[node name="PlayersPanel" type="PanelContainer" unique_id=1708375945] [node name="PlayersPanel" type="PanelContainer" unique_id=1708375945]
layout_mode = 3 layout_mode = 3
offset_right = 641.0 offset_right = 641.0
@@ -60,7 +54,7 @@ layout_mode = 2
[node name="Panel" type="Panel" parent="VBoxContainer/AddPlayerContainer" unique_id=1569854056] [node name="Panel" type="Panel" parent="VBoxContainer/AddPlayerContainer" unique_id=1569854056]
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
theme_override_styles/panel = SubResource("StyleBoxFlat_qk7sj") theme_type_variation = &"DarkSpacer"
[node name="PlayerNameField" type="TextEdit" parent="VBoxContainer/AddPlayerContainer" unique_id=332535327] [node name="PlayerNameField" type="TextEdit" parent="VBoxContainer/AddPlayerContainer" unique_id=332535327]
unique_name_in_owner = true unique_name_in_owner = true
@@ -80,7 +74,7 @@ text = "Add"
custom_minimum_size = Vector2(2.08165e-12, 40) custom_minimum_size = Vector2(2.08165e-12, 40)
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
theme_override_styles/panel = SubResource("StyleBoxFlat_k1ygi") theme_type_variation = &"DarkSpacer"
[node name="ScrollContainer" type="ScrollContainer" parent="VBoxContainer" unique_id=1000000001] [node name="ScrollContainer" type="ScrollContainer" parent="VBoxContainer" unique_id=1000000001]
layout_mode = 2 layout_mode = 2
+3 -7
View File
@@ -1,15 +1,13 @@
[gd_scene load_steps=5 format=3 uid="uid://1jbtmhbqolqe"] [gd_scene format=3 uid="uid://1jbtmhbqolqe"]
[ext_resource type="Texture2D" uid="uid://c8r7ykphss4c2" path="res://characters/Link.png" id="1_ll28s"] [ext_resource type="Texture2D" uid="uid://c8r7ykphss4c2" path="res://characters/Link.png" id="1_ll28s"]
[ext_resource type="Script" uid="uid://cjo13wixip8mq" path="res://quiz/song_row.gd" id="1_lspki"] [ext_resource type="Script" uid="uid://cjo13wixip8mq" path="res://quiz/song_row.gd" id="1_lspki"]
[ext_resource type="Theme" uid="uid://8bllart6xn1f" path="res://themes/default_theme.tres" id="1_x7fq8"]
[ext_resource type="StyleBox" uid="uid://bsv6yb0yir04l" path="res://themes/style_box_flat.tres" id="3_5h84f"]
[node name="SongRow" type="PanelContainer"] [node name="SongRow" type="PanelContainer"]
custom_minimum_size = Vector2(1000, 0) custom_minimum_size = Vector2(1000, 0)
offset_right = 1088.0 offset_right = 1088.0
offset_bottom = 59.0 offset_bottom = 59.0
theme = ExtResource("1_x7fq8") theme_type_variation = &"SongRow"
script = ExtResource("1_lspki") script = ExtResource("1_lspki")
[node name="HBoxContainer" type="HBoxContainer" parent="."] [node name="HBoxContainer" type="HBoxContainer" parent="."]
@@ -23,9 +21,7 @@ custom_minimum_size = Vector2(865, 28)
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
mouse_filter = 1 mouse_filter = 1
theme = ExtResource("1_x7fq8") theme_type_variation = &"SongRowLabel"
theme_override_font_sizes/font_size = 20
theme_override_styles/normal = ExtResource("3_5h84f")
text = "Final Fantasy Dissidia 012 Duodecim (Sista Fantasin Meningsskiljaktigheter 012 Tolv) - 'Crystal Cave -arrange-'' from FINAL FANTASY III" text = "Final Fantasy Dissidia 012 Duodecim (Sista Fantasin Meningsskiljaktigheter 012 Tolv) - 'Crystal Cave -arrange-'' from FINAL FANTASY III"
autowrap_mode = 2 autowrap_mode = 2
+1 -1
View File
@@ -65,4 +65,4 @@ func show_soundtracks(list: Array) -> void:
soundtracks.append_array(list) soundtracks.append_array(list)
Settings.delete_children(_rows) Settings.delete_children(_rows)
for i: int in soundtracks.size(): for i: int in soundtracks.size():
_rows.add_child(ListRow.create(soundtracks[i], i, 20)) _rows.add_child(ListRow.create(soundtracks[i], i, &"TextLarge"))
+1 -1
View File
@@ -19,7 +19,7 @@ func set_label() -> void:
var size_to_change: int = song_object.players_given_point.size() * 50 var size_to_change: int = song_object.players_given_point.size() * 50
song_list_label.custom_minimum_size = Vector2(1000 - size_to_change, 28) song_list_label.custom_minimum_size = Vector2(1000 - size_to_change, 28)
if song_object.is_playing: if song_object.is_playing:
song_list_label.add_theme_color_override("font_color", Color(1, 0.5, 0)) song_list_label.theme_type_variation = &"SongRowLabelPlaying"
song_list_label.text = song_object.get_song_info() song_list_label.text = song_object.get_song_info()
File diff suppressed because it is too large. Load diff
+22 -1
View File
@@ -27,6 +27,9 @@ const SYNC_RESULT: Dictionary = {
"total_time": "00:00:03", "total_time": "00:00:03",
} }
## The character pictures the fake server hands out.
const CHARACTERS_DIR: String = "res://characters"
## Popups in the order the tour opens them: the state name, then the popup's node. The ## Popups in the order the tour opens them: the state name, then the popup's node. The
## state names are what the popups were first called, so screenshots taken before they ## state names are what the popups were first called, so screenshots taken before they
## were renamed can still be compared with new ones. ## were renamed can still be compared with new ones.
@@ -53,7 +56,11 @@ static func make_server() -> FakeHttpTransport:
server.respond_json("/music/all", SOUNDTRACKS) server.respond_json("/music/all", SOUNDTRACKS)
server.respond_json("/music/all/order", SOUNDTRACKS) server.respond_json("/music/all/order", SOUNDTRACKS)
server.respond_json("/music/list", []) server.respond_json("/music/list", [])
server.respond_json("/characters", []) var characters: Array[String] = character_names()
server.respond_json("/characters", characters)
for character_name: String in characters:
server.respond_bytes("/character?name=" + character_name.uri_encode(),
FileAccess.get_file_as_bytes(CHARACTERS_DIR.path_join(character_name)))
server.respond_bytes("/music/rand", mp3) server.respond_bytes("/music/rand", mp3)
server.respond_bytes("/music/addQue", PackedByteArray()) server.respond_bytes("/music/addQue", PackedByteArray())
server.respond_json("/music/info", SONG_INFO) server.respond_json("/music/info", SONG_INFO)
@@ -64,6 +71,16 @@ static func make_server() -> FakeHttpTransport:
return server return server
## The pictures in [constant CHARACTERS_DIR], sorted by name.
static func character_names() -> Array[String]:
var names: Array[String] = []
for file_name: String in DirAccess.get_files_at(CHARACTERS_DIR):
if file_name.ends_with(".png"):
names.append(file_name)
names.sort()
return names
## Puts Settings and Playlist in the state the tour expects. Call it before the main ## Puts Settings and Playlist in the state the tour expects. Call it before the main
## window is created. ## window is created.
static func prepare_autoloads() -> void: static func prepare_autoloads() -> void:
@@ -104,6 +121,10 @@ func run(on_state: Callable) -> void:
_call("play_next_song") _call("play_next_song")
await _settle() await _settle()
_freeze_music_player() _freeze_music_player()
var picture: Image = Image.new()
picture.load_png_from_buffer(
FileAccess.get_file_as_bytes(CHARACTERS_DIR.path_join(character_names()[0])))
_player_row(0).new_character_selected(ImageTexture.create_from_image(picture))
_player_row(0).add_point() _player_row(0).add_point()
_player_row(0).add_point() _player_row(0).add_point()
_player_row(1).add_point() _player_row(1).add_point()
+9 -84
View File
@@ -1,73 +1,14 @@
extends GdUnitTestSuite extends GdUnitTestSuite
## Checks that every node of the main window is where it was before the window was ## Checks that every node of the main window is where it was when the baseline was taken.
## split into scenes.
## ##
## [code]tests/data/layout_baseline.json[/code] was written by ## [code]tests/data/layout_baseline.json[/code] is written by
## [code]tools/take_screenshots.gd[/code] before the split. It holds the position, size ## [code]tools/take_screenshots.gd[/code] (run it with --headless and copy its layout.json).
## and visibility of every node in each UiTour state, keyed by the node's old path. This ## It holds the position, size and visibility of every node in each UiTour state, keyed
## test runs the same tour and compares, after moving each old path to where the node ## by the node's path from the main window. Take a new baseline when the layout is
## lives now. ## meant to change, e.g. after moving a button.
const BASELINE_PATH: String = "res://tests/data/layout_baseline.json" const BASELINE_PATH: String = "res://tests/data/layout_baseline.json"
## Where each node of the old main window lives now: its old name, and the path that
## replaces it. Nodes that are not listed are still where they were.
const MOVED: Dictionary = {
# The top bar
"TopPanelContainer": "TopBar/TopPanelContainer",
"Title": "TopBar/Title",
"SearchButton": "TopBar/SearchButton",
"SyncButton": "TopBar/SyncButton",
"StatisticsButton": "TopBar/StatisticsButton",
"ShortcutsButton": "TopBar/ShortcutsButton",
"AboutButton": "TopBar/AboutButton",
"QRButton": "TopBar/QRButton",
# The popups of the main window, renamed from *Window to *Popup
"Search": "SearchPopup",
"SyncWindow": "SyncPopup",
"QRWindow": "QRPopup",
"ShortcutsWindow": "ShortcutsPopup",
"AboutWindow": "AboutPopup",
"Log": "LogPopup",
# The quiz and its parts
"Open": "Quiz/Open",
"FileDialog": "Quiz/FileDialog",
"DebugLabel": "Quiz/DebugLabel",
"MusicListPanel": "Quiz/MusicListPanel",
"Players": "Quiz/PlayersPanel",
"ScrollContainer": "Quiz/InspirationList",
"VBoxContainer": "Quiz/NowPlaying",
"MusicPlayer": "Quiz/MusicPlayer/PlayerBar",
"RepeatSongCheckButton": "Quiz/MusicPlayer/RepeatSongCheckButton",
"ResetPlaylistButton": "Quiz/QuizToolbar/ResetPlaylistButton",
"ResetPointsButton": "Quiz/QuizToolbar/ResetPointsButton",
"SettingsButton": "Quiz/QuizToolbar/SettingsButton",
"SoundTestButton": "Quiz/QuizToolbar/SoundTestButton",
"ShowAnswerButton": "Quiz/SongControls/ShowAnswerButton",
"NextButton": "Quiz/SongControls/NextButton",
"SettingsWindow": "Quiz/SettingsPopup",
"NewCharacterSelect": "Quiz/CharacterSelectPopup",
"WinnerWindow": "Quiz/WinnerPopup",
}
## Scenes that were renamed, by their old and new root name. A row added to a list is
## named after its scene's root when the name is still free, so these show up deeper in a
## path.
const RENAMED_SCENES: Dictionary = {
"SongListObject": "SongRow",
"Player": "PlayerRow",
}
const SYNC_COLUMNS: String = "SyncPopup/SyncPanel/ScrollContainer/SyncVBoxContainer"
## Nodes renamed inside a popup: the path after the moves above, and the new path.
const RENAMED_PATHS: Dictionary = {
"SearchPopup/ScrollContainer/VBoxContainer": "SearchPopup/ScrollContainer/SearchResults",
SYNC_COLUMNS + "/CatchedErrorsVBox": SYNC_COLUMNS + "/CaughtErrorsVBox",
SYNC_COLUMNS + "/CaughtErrorsVBox/CatchedErrorsLabel":
SYNC_COLUMNS + "/CaughtErrorsVBox/CaughtErrorsLabel",
}
## Nodes whose height follows text that changes between versions, such as the changelog. ## Nodes whose height follows text that changes between versions, such as the changelog.
## Their position and width are still checked. ## Their position and width are still checked.
const HEIGHT_FOLLOWS_TEXT: Array[String] = [ const HEIGHT_FOLLOWS_TEXT: Array[String] = [
@@ -105,21 +46,6 @@ func after() -> void:
_snapshot.restore() _snapshot.restore()
## Where the node that used to be at [param old_path] in the main window is now.
static func new_path(old_path: String) -> String:
var parts: PackedStringArray = old_path.split("/")
for i: int in parts.size():
parts[i] = RENAMED_SCENES.get(parts[i], parts[i])
var first: String = parts[0]
parts[0] = MOVED.get(first, first)
var path: String = "/".join(parts)
# In order, so a node inside a renamed node is found after its parent's rename
for renamed: String in RENAMED_PATHS:
if path == renamed || path.begins_with(renamed + "/"):
path = RENAMED_PATHS[renamed] + path.trim_prefix(renamed)
return path
func _baseline() -> Dictionary: func _baseline() -> Dictionary:
return JSON.parse_string(FileAccess.get_file_as_string(BASELINE_PATH)) return JSON.parse_string(FileAccess.get_file_as_string(BASELINE_PATH))
@@ -133,11 +59,10 @@ func test_every_node_is_where_it_was() -> void:
var baseline: Dictionary = _baseline() var baseline: Dictionary = _baseline()
for state: String in baseline: for state: String in baseline:
var actual: Dictionary = _layout.get(state, {}) var actual: Dictionary = _layout.get(state, {})
for old_path: String in baseline[state]: for path: String in baseline[state]:
var path: String = new_path(old_path) var expected: Dictionary = baseline[state][path]
var expected: Dictionary = baseline[state][old_path]
if !actual.has(path): if !actual.has(path):
problems.append("%s: %s is missing (was %s)" % [state, path, old_path]) problems.append("%s: %s is missing" % [state, path])
continue continue
var rect: Array = actual[path].rect var rect: Array = actual[path].rect
var sides: int = 3 if _height_follows_text(path) else 4 var sides: int = 3 if _height_follows_text(path) else 4
+1 -1
View File
@@ -5,7 +5,7 @@ extends MainWindowTestSuite
## server and the keyboard shortcuts reach both the main window and the quiz. ## server and the keyboard shortcuts reach both the main window and the quiz.
const MAIN_WINDOW_CHILDREN: Array[String] = [ const MAIN_WINDOW_CHILDREN: Array[String] = [
"TopBar", "Quiz", "PopupBackdrop", "SearchPopup", "SyncPopup", "QRPopup", "Background", "TopBar", "Quiz", "PopupBackdrop", "SearchPopup", "SyncPopup", "QRPopup",
"ShortcutsPopup", "StatisticsPopupPanel", "AboutPopup", "LogPopup", "ShortcutsPopup", "StatisticsPopupPanel", "AboutPopup", "LogPopup",
] ]
+117
View File
@@ -0,0 +1,117 @@
extends GdUnitTestSuite
## The whole look comes from the project theme, themes/main_theme.tres: scenes and
## scripts name its styles instead of setting colours, sizes or style boxes themselves.
const THEME_PATH: String = "res://themes/main_theme.tres"
## Folders with the game's scenes and scripts.
const GAME_FOLDERS: Array[String] = [
"res://main", "res://quiz", "res://player", "res://popups", "res://common", "res://data",
"res://server",
]
## The named styles the game uses, and the type each one is based on.
const STYLES: Dictionary = {
"WindowBackground": "Panel",
"PopupBackground": "Panel",
"DarkSpacer": "Panel",
"CharacterCard": "Panel",
"MusicList": "PanelContainer",
"SongRow": "PanelContainer",
"ShortcutRowDark": "PanelContainer",
"ListRowEven": "PanelContainer",
"ListRowOdd": "PanelContainer",
"TitleLarge": "Label",
"TitleMedium": "Label",
"Title": "Label",
"TextLarge": "Label",
"TextMedium": "Label",
"HighlightLarge": "Label",
"HighlightMedium": "Label",
"SongRowLabel": "Label",
"SongRowLabelPlaying": "Label",
}
var _theme: Theme = load(THEME_PATH)
## Every file in [param folder] and its subfolders whose name ends with [param extension].
func _files(folder: String, extension: String) -> Array[String]:
var found: Array[String] = []
for file_name: String in DirAccess.get_files_at(folder):
if file_name.ends_with(extension):
found.append(folder.path_join(file_name))
for subfolder: String in DirAccess.get_directories_at(folder):
found.append_array(_files(folder.path_join(subfolder), extension))
return found
func _game_files(extension: String) -> Array[String]:
var found: Array[String] = []
for folder: String in GAME_FOLDERS:
found.append_array(_files(folder, extension))
return found
func _lines_matching(files: Array[String], pattern: String) -> Array[String]:
var regex: RegEx = RegEx.create_from_string(pattern)
var hits: Array[String] = []
for path: String in files:
var lines: PackedStringArray = FileAccess.get_file_as_string(path).split("\n")
for i: int in lines.size():
if regex.search(lines[i]) != null:
hits.append("%s:%d: %s" % [path, i + 1, lines[i].strip_edges()])
return hits
func test_project_uses_the_main_theme() -> void:
assert_str(ProjectSettings.get_setting("gui/theme/custom")).is_equal(THEME_PATH)
func test_theme_has_every_named_style() -> void:
for style: String in STYLES:
assert_str(String(_theme.get_type_variation_base(style))) \
.override_failure_message(style + " is missing or has the wrong base") \
.is_equal(STYLES[style])
func test_theme_has_the_palette() -> void:
assert_bool(_theme.has_color("backdrop", "Palette")).is_true()
func test_every_style_named_in_scenes_and_scripts_exists() -> void:
var regex: RegEx = RegEx.create_from_string('&"([A-Z][A-Za-z]+)"')
var missing: Array[String] = []
for path: String in _game_files(".tscn") + _game_files(".gd"):
for found: RegExMatch in regex.search_all(FileAccess.get_file_as_string(path)):
var style: String = found.get_string(1)
if !(style in STYLES) && style != "Palette":
missing.append("%s: %s" % [path, style])
assert_array(missing).override_failure_message(
"Styles not in the theme:\n" + "\n".join(missing)).is_empty()
func test_scenes_take_their_look_from_the_theme() -> void:
var hits: Array[String] = _lines_matching(_game_files(".tscn"),
"^(theme = |label_settings = |theme_override_(styles|colors|font_sizes|fonts)/)" \
+ "|^\\[sub_resource type=\"(StyleBoxFlat|LabelSettings|Theme)\"")
assert_array(hits).override_failure_message(
"Look set in a scene instead of the theme:\n" + "\n".join(hits)).is_empty()
func test_scripts_take_their_look_from_the_theme() -> void:
var hits: Array[String] = _lines_matching(_game_files(".gd"),
"add_theme_[a-z_]+_override|StyleBoxFlat\\.new|Color\\(")
assert_array(hits).override_failure_message(
"Look set in a script instead of the theme:\n" + "\n".join(hits)).is_empty()
func test_main_window_background_comes_from_the_theme_and_lets_clicks_through() -> void:
var main: Control = auto_free(load("res://main/MainWindow.tscn").instantiate())
var background: Panel = main.get_child(0)
assert_str(background.name).is_equal("Background")
assert_str(String(background.theme_type_variation)).is_equal("WindowBackground")
assert_int(background.mouse_filter).is_equal(Control.MOUSE_FILTER_IGNORE)
assert_float(background.anchor_right).is_equal(1.0)
assert_float(background.anchor_bottom).is_equal(1.0)
+1
View File
@@ -0,0 +1 @@
uid://b2wva7kaaq8ua
+12 -5
View File
@@ -6,22 +6,29 @@ func _background(list_row: ListRow) -> Color:
return (list_row.get_theme_stylebox("panel") as StyleBoxFlat).bg_color return (list_row.get_theme_stylebox("panel") as StyleBoxFlat).bg_color
## Adds [param list_row] to the tree, where it gets its look from the project theme.
func _shown(list_row: ListRow) -> ListRow:
add_child(auto_free(list_row))
return list_row
func test_row_shows_text() -> void: func test_row_shows_text() -> void:
var list_row: ListRow = auto_free(ListRow.create("Chrono Trigger", 0, 20)) var list_row: ListRow = auto_free(ListRow.create("Chrono Trigger", 0, &"TextLarge"))
assert_str(list_row.text).is_equal("Chrono Trigger") assert_str(list_row.text).is_equal("Chrono Trigger")
func test_neighbouring_rows_have_different_backgrounds() -> void: func test_neighbouring_rows_have_different_backgrounds() -> void:
var first: ListRow = auto_free(ListRow.create("Chrono Trigger", 0, 20)) var first: ListRow = _shown(ListRow.create("Chrono Trigger", 0, &"TextLarge"))
var second: ListRow = auto_free(ListRow.create("Chrono Cross", 1, 20)) var second: ListRow = _shown(ListRow.create("Chrono Cross", 1, &"TextLarge"))
var third: ListRow = auto_free(ListRow.create("Xenogears", 2, 20)) var third: ListRow = _shown(ListRow.create("Xenogears", 2, &"TextLarge"))
assert_that(_background(first)).is_not_equal(_background(second)) assert_that(_background(first)).is_not_equal(_background(second))
assert_that(_background(first)).is_equal(_background(third)) assert_that(_background(first)).is_equal(_background(third))
func test_long_text_wraps() -> void: func test_long_text_wraps() -> void:
var list_row: ListRow = auto_free(ListRow.create("Castlevania: Symphony of the Night", 0, 20)) var list_row: ListRow = auto_free(
ListRow.create("Castlevania: Symphony of the Night", 0, &"TextLarge"))
assert_int(list_row.label.autowrap_mode).is_equal(TextServer.AUTOWRAP_WORD_SMART) assert_int(list_row.label.autowrap_mode).is_equal(TextServer.AUTOWRAP_WORD_SMART)
+52
View File
@@ -0,0 +1,52 @@
# Themes
The whole look of the game comes from one theme, `main_theme.tres`. It is the project
theme (Project Settings → GUI → Theme → Custom), so every scene uses it without setting
anything. Scenes and scripts never set colours, font sizes or style boxes themselves;
they name one of the theme's styles instead, and `tests/integration/test_theme.gd`
checks that it stays that way.
## Making a new theme
1. Copy `main_theme.tres`, e.g. to `dark_blue_theme.tres`.
2. Open the copy in Godot (double-click it) and change its colours, style boxes and font
sizes in the theme editor. Keep every style's name.
3. Point Project Settings → GUI → Theme → Custom at the copy.
Icons (play, restart, add player, the slider and switch knobs) are not part of the theme;
they come from the image files in `icons/` and Godot's built-in theme.
## What is in the theme
**Godot's default look** for every kind of control the game uses (Button, Label, Panel,
CheckButton, sliders, scroll bars, text fields and so on), copied in so it can be changed
here.
**Named styles** (theme type variations), picked with *Theme Type Variation* in a node's
inspector or `theme_type_variation` in code:
| Style | Based on | Used for |
|---|---|---|
| `WindowBackground` | Panel | The background behind everything in the main window |
| `PopupBackground` | Panel | The panel of every popup: dark, bordered and rounded |
| `DarkSpacer` | Panel | The dark gaps in the player list and the add player row |
| `CharacterCard` | Panel | A character in the character select popup |
| `MusicList` | PanelContainer | The list of songs in the quiz |
| `SongRow` | PanelContainer | One song in that list |
| `ShortcutRowDark` | PanelContainer | Every other row in the shortcuts popup |
| `ListRowEven`, `ListRowOdd` | PanelContainer | Alternating rows in the inspiration and sync lists |
| `TitleLarge` | Label | The soundtrack that is playing (50) |
| `TitleMedium` | Label | The song that is playing, and the winner (35) |
| `Title` | Label | The window title and popup titles (25) |
| `TextLarge` | Label | Log rows, shortcuts and the inspiration list (20) |
| `TextMedium` | Label | Rows in the sync result (18) |
| `HighlightLarge`, `HighlightMedium` | Label | Orange text: sync headers and every other sync row |
| `SongRowLabel`, `SongRowLabelPlaying` | Label | A song's text, and the one that is playing |
The **PopupPanel** type itself is styled too, for the Statistics popup.
**Palette**: colours used from code.
| Colour | Used for |
|---|---|
| `backdrop` | The dimming behind an open popup |
-6
View File
@@ -1,6 +0,0 @@
[gd_resource type="Theme" load_steps=2 format=3 uid="uid://8bllart6xn1f"]
[ext_resource type="StyleBox" uid="uid://bsv6yb0yir04l" path="res://themes/style_box_flat.tres" id="1_uierc"]
[resource]
PanelContainer/styles/panel = ExtResource("1_uierc")
-7
View File
@@ -1,7 +0,0 @@
[gd_resource type="Theme" load_steps=2 format=3 uid="uid://rxexo3ur85as"]
[ext_resource type="StyleBox" uid="uid://blf3g88mugovr" path="res://themes/neutral_gray.tres" id="1_alhp2"]
[resource]
Label/styles/normal = ExtResource("1_alhp2")
PanelContainer/styles/panel = ExtResource("1_alhp2")
+916
View File
@@ -0,0 +1,916 @@
[gd_resource type="Theme" format=3]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_vxwtt"]
content_margin_left = 4.0
content_margin_top = 4.0
content_margin_right = 4.0
content_margin_bottom = 4.0
bg_color = Color(0.1, 0.1, 0.1, 0.3)
corner_radius_top_left = 3
corner_radius_top_right = 3
corner_radius_bottom_right = 3
corner_radius_bottom_left = 3
corner_detail = 5
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_rjgu6"]
content_margin_left = 4.0
content_margin_top = 4.0
content_margin_right = 4.0
content_margin_bottom = 4.0
bg_color = Color(1, 1, 1, 0.75)
draw_center = false
border_width_left = 2
border_width_top = 2
border_width_right = 2
border_width_bottom = 2
corner_radius_top_left = 3
corner_radius_top_right = 3
corner_radius_bottom_right = 3
corner_radius_bottom_left = 3
corner_detail = 5
expand_margin_left = 2.0
expand_margin_top = 2.0
expand_margin_right = 2.0
expand_margin_bottom = 2.0
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_vu6l5"]
content_margin_left = 4.0
content_margin_top = 4.0
content_margin_right = 4.0
content_margin_bottom = 4.0
bg_color = Color(0.225, 0.225, 0.225, 0.6)
corner_radius_top_left = 3
corner_radius_top_right = 3
corner_radius_bottom_right = 3
corner_radius_bottom_left = 3
corner_detail = 5
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ydht1"]
content_margin_left = 4.0
content_margin_top = 4.0
content_margin_right = 4.0
content_margin_bottom = 4.0
bg_color = Color(0.1, 0.1, 0.1, 0.6)
corner_radius_top_left = 3
corner_radius_top_right = 3
corner_radius_bottom_right = 3
corner_radius_bottom_left = 3
corner_detail = 5
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_8gw6x"]
content_margin_left = 4.0
content_margin_top = 4.0
content_margin_right = 4.0
content_margin_bottom = 4.0
bg_color = Color(0, 0, 0, 0.6)
corner_radius_top_left = 3
corner_radius_top_right = 3
corner_radius_bottom_right = 3
corner_radius_bottom_left = 3
corner_detail = 5
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_g21io"]
bg_color = Color(0.302, 0.302, 0.302, 1)
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_7ceur"]
content_margin_left = 6.0
content_margin_top = 4.0
content_margin_right = 6.0
content_margin_bottom = 4.0
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_uobgu"]
content_margin_left = 4.0
content_margin_top = 4.0
content_margin_right = 4.0
content_margin_bottom = 4.0
bg_color = Color(1, 1, 1, 0.75)
draw_center = false
border_width_left = 2
border_width_top = 2
border_width_right = 2
border_width_bottom = 2
corner_radius_top_left = 3
corner_radius_top_right = 3
corner_radius_bottom_right = 3
corner_radius_bottom_left = 3
corner_detail = 5
expand_margin_left = 2.0
expand_margin_top = 2.0
expand_margin_right = 2.0
expand_margin_bottom = 2.0
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_puucq"]
content_margin_left = 6.0
content_margin_top = 4.0
content_margin_right = 6.0
content_margin_bottom = 4.0
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_1mjdo"]
content_margin_left = 6.0
content_margin_top = 4.0
content_margin_right = 6.0
content_margin_bottom = 4.0
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_s5e0q"]
content_margin_left = 6.0
content_margin_top = 4.0
content_margin_right = 6.0
content_margin_bottom = 4.0
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_0x86e"]
content_margin_left = 6.0
content_margin_top = 4.0
content_margin_right = 6.0
content_margin_bottom = 4.0
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_f5ubn"]
bg_color = Color(0.180392, 0.180392, 0.180392, 1)
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_7qy2x"]
content_margin_left = 4.0
content_margin_top = 4.0
content_margin_right = 4.0
content_margin_bottom = 4.0
bg_color = Color(1, 1, 1, 0.4)
corner_radius_top_left = 10
corner_radius_top_right = 10
corner_radius_bottom_right = 10
corner_radius_bottom_left = 10
corner_detail = 6
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_myxx4"]
content_margin_left = 4.0
content_margin_top = 4.0
content_margin_right = 4.0
content_margin_bottom = 4.0
bg_color = Color(1, 1, 1, 0.75)
corner_radius_top_left = 10
corner_radius_top_right = 10
corner_radius_bottom_right = 10
corner_radius_bottom_left = 10
corner_detail = 6
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_3kvey"]
content_margin_left = 4.0
content_margin_top = 4.0
content_margin_right = 4.0
content_margin_bottom = 4.0
bg_color = Color(0.75, 0.75, 0.75, 0.75)
corner_radius_top_left = 10
corner_radius_top_right = 10
corner_radius_bottom_right = 10
corner_radius_bottom_left = 10
corner_detail = 6
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_5iri2"]
content_margin_left = 0.0
content_margin_top = 4.0
content_margin_right = 0.0
content_margin_bottom = 4.0
bg_color = Color(0.1, 0.1, 0.1, 0.6)
corner_radius_top_left = 10
corner_radius_top_right = 10
corner_radius_bottom_right = 10
corner_radius_bottom_left = 10
corner_detail = 6
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_3scot"]
content_margin_left = 4.0
content_margin_top = 4.0
content_margin_right = 4.0
content_margin_bottom = 4.0
bg_color = Color(1, 1, 1, 0.75)
draw_center = false
border_width_left = 2
border_width_top = 2
border_width_right = 2
border_width_bottom = 2
corner_radius_top_left = 3
corner_radius_top_right = 3
corner_radius_bottom_right = 3
corner_radius_bottom_left = 3
corner_detail = 5
expand_margin_left = 2.0
expand_margin_top = 2.0
expand_margin_right = 2.0
expand_margin_bottom = 2.0
[sub_resource type="StyleBoxLine" id="StyleBoxLine_puicy"]
content_margin_left = 4.0
content_margin_top = 0.0
content_margin_right = 4.0
content_margin_bottom = 0.0
color = Color(0.5, 0.5, 0.5, 1)
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_quqgn"]
content_margin_left = 4.0
content_margin_top = 4.0
content_margin_right = 4.0
content_margin_bottom = 4.0
bg_color = Color(1, 1, 1, 0.4)
corner_radius_top_left = 4
corner_radius_top_right = 4
corner_radius_bottom_right = 4
corner_radius_bottom_left = 4
corner_detail = 6
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_m01q4"]
content_margin_left = 4.0
content_margin_top = 4.0
content_margin_right = 4.0
content_margin_bottom = 4.0
bg_color = Color(1, 1, 1, 0.75)
corner_radius_top_left = 4
corner_radius_top_right = 4
corner_radius_bottom_right = 4
corner_radius_bottom_left = 4
corner_detail = 6
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_k36pm"]
content_margin_left = 4.0
content_margin_top = 4.0
content_margin_right = 4.0
content_margin_bottom = 4.0
bg_color = Color(0.1, 0.1, 0.1, 0.6)
corner_radius_top_left = 4
corner_radius_top_right = 4
corner_radius_bottom_right = 4
corner_radius_bottom_left = 4
corner_detail = 6
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_6h40v"]
content_margin_left = 4.0
content_margin_top = 4.0
content_margin_right = 4.0
content_margin_bottom = 4.0
bg_color = Color(1, 1, 1, 0.75)
draw_center = false
border_width_left = 2
border_width_top = 2
border_width_right = 2
border_width_bottom = 2
corner_radius_top_left = 3
corner_radius_top_right = 3
corner_radius_bottom_right = 3
corner_radius_bottom_left = 3
corner_detail = 5
expand_margin_left = 2.0
expand_margin_top = 2.0
expand_margin_right = 2.0
expand_margin_bottom = 2.0
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_s47sh"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_u5sc5"]
content_margin_left = 8.0
content_margin_top = 2.0
content_margin_right = 8.0
content_margin_bottom = 2.0
bg_color = Color(1, 1, 1, 0.05)
corner_radius_top_left = 4
corner_radius_top_right = 4
corner_radius_bottom_right = 4
corner_radius_bottom_left = 4
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_mxy8k"]
content_margin_left = 8.0
content_margin_top = 2.0
content_margin_right = 8.0
content_margin_bottom = 2.0
bg_color = Color(1, 1, 1, 0.11)
corner_radius_top_left = 4
corner_radius_top_right = 4
corner_radius_bottom_right = 4
corner_radius_bottom_left = 4
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_33f1l"]
bg_color = Color(0.257813, 0.257813, 0.257813, 1)
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_wbnll"]
content_margin_left = 8.0
content_margin_top = 4.0
content_margin_right = 8.0
content_margin_bottom = 4.0
bg_color = Color(0.1, 0.1, 0.1, 0.3)
corner_radius_top_left = 3
corner_radius_top_right = 3
corner_radius_bottom_right = 3
corner_radius_bottom_left = 3
corner_detail = 5
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_bmtpa"]
content_margin_left = 8.0
content_margin_top = 4.0
content_margin_right = 8.0
content_margin_bottom = 4.0
bg_color = Color(0.1, 0.1, 0.1, 0.3)
corner_radius_top_left = 3
corner_radius_top_right = 3
corner_radius_bottom_right = 3
corner_radius_bottom_left = 3
corner_detail = 5
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_f5lmb"]
content_margin_left = 4.0
content_margin_top = 4.0
content_margin_right = 4.0
content_margin_bottom = 4.0
bg_color = Color(1, 1, 1, 0.75)
draw_center = false
border_width_left = 2
border_width_top = 2
border_width_right = 2
border_width_bottom = 2
corner_radius_top_left = 3
corner_radius_top_right = 3
corner_radius_bottom_right = 3
corner_radius_bottom_left = 3
corner_detail = 5
expand_margin_left = 2.0
expand_margin_top = 2.0
expand_margin_right = 2.0
expand_margin_bottom = 2.0
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_qtlom"]
content_margin_left = 8.0
content_margin_top = 4.0
content_margin_right = 8.0
content_margin_bottom = 4.0
bg_color = Color(0.225, 0.225, 0.225, 0.6)
corner_radius_top_left = 3
corner_radius_top_right = 3
corner_radius_bottom_right = 3
corner_radius_bottom_left = 3
corner_detail = 5
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_t2i82"]
content_margin_left = 8.0
content_margin_top = 4.0
content_margin_right = 8.0
content_margin_bottom = 4.0
bg_color = Color(0.225, 0.225, 0.225, 0.6)
corner_radius_top_left = 3
corner_radius_top_right = 3
corner_radius_bottom_right = 3
corner_radius_bottom_left = 3
corner_detail = 5
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_a4gt2"]
content_margin_left = 8.0
content_margin_top = 4.0
content_margin_right = 8.0
content_margin_bottom = 4.0
bg_color = Color(0.1, 0.1, 0.1, 0.6)
corner_radius_top_left = 3
corner_radius_top_right = 3
corner_radius_bottom_right = 3
corner_radius_bottom_left = 3
corner_detail = 5
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_uisqs"]
content_margin_left = 8.0
content_margin_top = 4.0
content_margin_right = 8.0
content_margin_bottom = 4.0
bg_color = Color(0.1, 0.1, 0.1, 0.6)
corner_radius_top_left = 3
corner_radius_top_right = 3
corner_radius_bottom_right = 3
corner_radius_bottom_left = 3
corner_detail = 5
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_dinf2"]
content_margin_left = 8.0
content_margin_top = 4.0
content_margin_right = 8.0
content_margin_bottom = 4.0
bg_color = Color(0, 0, 0, 0.6)
corner_radius_top_left = 3
corner_radius_top_right = 3
corner_radius_bottom_right = 3
corner_radius_bottom_left = 3
corner_detail = 5
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_a0ksy"]
content_margin_left = 8.0
content_margin_top = 4.0
content_margin_right = 8.0
content_margin_bottom = 4.0
bg_color = Color(0, 0, 0, 0.6)
corner_radius_top_left = 3
corner_radius_top_right = 3
corner_radius_bottom_right = 3
corner_radius_bottom_left = 3
corner_detail = 5
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_hwwyi"]
content_margin_left = 0.0
content_margin_top = 0.0
content_margin_right = 0.0
content_margin_bottom = 0.0
bg_color = Color(0.1, 0.1, 0.1, 0.6)
corner_radius_top_left = 3
corner_radius_top_right = 3
corner_radius_bottom_right = 3
corner_radius_bottom_left = 3
corner_detail = 5
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_wl3gy"]
content_margin_left = 0.0
content_margin_top = 0.0
content_margin_right = 0.0
content_margin_bottom = 0.0
bg_color = Color(0.1, 0.1, 0.1, 0.6)
corner_radius_top_left = 3
corner_radius_top_right = 3
corner_radius_bottom_right = 3
corner_radius_bottom_left = 3
corner_detail = 5
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_vputg"]
content_margin_left = 12.0
content_margin_top = 12.0
content_margin_right = 12.0
content_margin_bottom = 12.0
bg_color = Color(0.180392, 0.180392, 0.180392, 1)
border_width_left = 2
border_width_top = 2
border_width_right = 2
border_width_bottom = 2
border_color = Color(0.36, 0.36, 0.36, 1)
corner_radius_top_left = 6
corner_radius_top_right = 6
corner_radius_bottom_right = 6
corner_radius_bottom_left = 6
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_1de2m"]
content_margin_left = 4.0
content_margin_top = 4.0
content_margin_right = 4.0
content_margin_bottom = 4.0
bg_color = Color(0.4, 0.4, 0.4, 1)
corner_radius_top_left = 3
corner_radius_top_right = 3
corner_radius_bottom_right = 3
corner_radius_bottom_left = 3
corner_detail = 5
[sub_resource type="StyleBoxLine" id="StyleBoxLine_bacd5"]
content_margin_left = 4.0
content_margin_top = 0.0
content_margin_right = 4.0
content_margin_bottom = 0.0
color = Color(0.5, 0.5, 0.5, 1)
[sub_resource type="StyleBoxLine" id="StyleBoxLine_k3nwn"]
content_margin_left = 4.0
content_margin_top = 0.0
content_margin_right = 4.0
content_margin_bottom = 0.0
color = Color(0.5, 0.5, 0.5, 1)
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_axpob"]
content_margin_left = 4.0
content_margin_top = 4.0
content_margin_right = 4.0
content_margin_bottom = 4.0
bg_color = Color(0.25, 0.25, 0.25, 1)
border_width_left = 2
border_width_top = 2
border_width_right = 2
border_width_bottom = 2
border_color = Color(0.175, 0.175, 0.175, 1)
corner_radius_top_left = 3
corner_radius_top_right = 3
corner_radius_bottom_right = 3
corner_radius_bottom_left = 3
corner_detail = 5
[sub_resource type="StyleBoxLine" id="StyleBoxLine_cl37w"]
content_margin_left = 4.0
content_margin_top = 0.0
content_margin_right = 4.0
content_margin_bottom = 0.0
color = Color(0.5, 0.5, 0.5, 1)
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_07kyi"]
content_margin_left = 2.0
content_margin_top = 2.0
content_margin_right = 2.0
content_margin_bottom = 2.0
bg_color = Color(0.1, 0.1, 0.1, 0.3)
corner_radius_top_left = 6
corner_radius_top_right = 6
corner_radius_bottom_right = 6
corner_radius_bottom_left = 6
corner_detail = 6
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ouuwv"]
content_margin_left = 2.0
content_margin_top = 2.0
content_margin_right = 2.0
content_margin_bottom = 2.0
bg_color = Color(1, 1, 1, 0.4)
corner_radius_top_left = 6
corner_radius_top_right = 6
corner_radius_bottom_right = 6
corner_radius_bottom_left = 6
corner_detail = 6
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_35dwi"]
content_margin_left = 4.0
content_margin_top = 4.0
content_margin_right = 4.0
content_margin_bottom = 4.0
bg_color = Color(1, 1, 1, 0.75)
draw_center = false
border_width_left = 2
border_width_top = 2
border_width_right = 2
border_width_bottom = 2
border_color = Color(1, 1, 1, 0.75)
corner_radius_top_left = 3
corner_radius_top_right = 3
corner_radius_bottom_right = 3
corner_radius_bottom_left = 3
corner_detail = 5
expand_margin_left = 4.0
expand_margin_top = 4.0
expand_margin_right = 4.0
expand_margin_bottom = 4.0
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_r3gy8"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_anjdx"]
content_margin_left = 0.0
content_margin_top = 0.0
content_margin_right = 0.0
content_margin_bottom = 0.0
bg_color = Color(0.18, 0.18, 0.18, 1)
corner_radius_top_left = 3
corner_radius_top_right = 3
corner_radius_bottom_right = 3
corner_radius_bottom_left = 3
corner_detail = 5
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_oxgwg"]
bg_color = Color(0.180392, 0.180392, 0.180392, 1)
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_r1nnu"]
bg_color = Color(0.180392, 0.180392, 0.180392, 1)
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_lkqs8"]
bg_color = Color(0.180392, 0.180392, 0.180392, 1)
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_1tv07"]
content_margin_left = 4.0
content_margin_top = 4.0
content_margin_right = 4.0
content_margin_bottom = 4.0
bg_color = Color(1, 1, 1, 0.75)
draw_center = false
border_width_left = 2
border_width_top = 2
border_width_right = 2
border_width_bottom = 2
corner_radius_top_left = 3
corner_radius_top_right = 3
corner_radius_bottom_right = 3
corner_radius_bottom_left = 3
corner_detail = 5
expand_margin_left = 2.0
expand_margin_top = 2.0
expand_margin_right = 2.0
expand_margin_bottom = 2.0
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_0ly2h"]
content_margin_left = 4.0
content_margin_top = 4.0
content_margin_right = 4.0
content_margin_bottom = 4.0
bg_color = Color(0.1, 0.1, 0.1, 0.6)
border_width_bottom = 2
border_color = Color(0, 0, 0, 0.6)
corner_radius_top_left = 3
corner_radius_top_right = 3
corner_radius_bottom_right = 3
corner_radius_bottom_left = 3
corner_detail = 5
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_o0qds"]
content_margin_left = 4.0
content_margin_top = 4.0
content_margin_right = 4.0
content_margin_bottom = 4.0
bg_color = Color(0.1, 0.1, 0.1, 0.3)
border_width_bottom = 2
border_color = Color(0, 0, 0, 0.3)
corner_radius_top_left = 3
corner_radius_top_right = 3
corner_radius_bottom_right = 3
corner_radius_bottom_left = 3
corner_detail = 5
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ogk6w"]
content_margin_left = 8.0
content_margin_top = 2.0
content_margin_right = 8.0
content_margin_bottom = 2.0
bg_color = Color(0, 0, 0, 0.5)
corner_radius_top_left = 3
corner_radius_top_right = 3
corner_radius_bottom_right = 3
corner_radius_bottom_left = 3
corner_detail = 5
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_dwgvb"]
content_margin_left = 4.0
content_margin_top = 4.0
content_margin_right = 4.0
content_margin_bottom = 4.0
bg_color = Color(1, 1, 1, 0.4)
corner_radius_top_left = 10
corner_radius_top_right = 10
corner_radius_bottom_right = 10
corner_radius_bottom_left = 10
corner_detail = 6
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_uoaln"]
content_margin_left = 4.0
content_margin_top = 4.0
content_margin_right = 4.0
content_margin_bottom = 4.0
bg_color = Color(1, 1, 1, 0.75)
corner_radius_top_left = 10
corner_radius_top_right = 10
corner_radius_bottom_right = 10
corner_radius_bottom_left = 10
corner_detail = 6
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_x5u8n"]
content_margin_left = 4.0
content_margin_top = 4.0
content_margin_right = 4.0
content_margin_bottom = 4.0
bg_color = Color(0.75, 0.75, 0.75, 0.75)
corner_radius_top_left = 10
corner_radius_top_right = 10
corner_radius_bottom_right = 10
corner_radius_bottom_left = 10
corner_detail = 6
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_6fedo"]
content_margin_left = 4.0
content_margin_top = 0.0
content_margin_right = 4.0
content_margin_bottom = 0.0
bg_color = Color(0.1, 0.1, 0.1, 0.6)
corner_radius_top_left = 10
corner_radius_top_right = 10
corner_radius_bottom_right = 10
corner_radius_bottom_left = 10
corner_detail = 6
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_8sdcv"]
content_margin_left = 4.0
content_margin_top = 4.0
content_margin_right = 4.0
content_margin_bottom = 4.0
bg_color = Color(1, 1, 1, 0.75)
draw_center = false
border_width_left = 2
border_width_top = 2
border_width_right = 2
border_width_bottom = 2
corner_radius_top_left = 3
corner_radius_top_right = 3
corner_radius_bottom_right = 3
corner_radius_bottom_left = 3
corner_detail = 5
expand_margin_left = 2.0
expand_margin_top = 2.0
expand_margin_right = 2.0
expand_margin_bottom = 2.0
[sub_resource type="StyleBoxLine" id="StyleBoxLine_r3erx"]
content_margin_left = 0.0
content_margin_top = 4.0
content_margin_right = 0.0
content_margin_bottom = 4.0
color = Color(0.5, 0.5, 0.5, 1)
vertical = true
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_2mdtn"]
bg_color = Color(0.3, 0.3, 0.3, 1)
[resource]
Button/colors/font_color = Color(0.875, 0.875, 0.875, 1)
Button/colors/font_disabled_color = Color(0.875, 0.875, 0.875, 0.5)
Button/colors/font_focus_color = Color(0.95, 0.95, 0.95, 1)
Button/colors/font_hover_color = Color(0.95, 0.95, 0.95, 1)
Button/colors/font_hover_pressed_color = Color(1, 1, 1, 1)
Button/colors/font_outline_color = Color(0, 0, 0, 1)
Button/colors/font_pressed_color = Color(1, 1, 1, 1)
Button/colors/icon_disabled_color = Color(1, 1, 1, 0.4)
Button/colors/icon_focus_color = Color(1, 1, 1, 1)
Button/colors/icon_hover_color = Color(1, 1, 1, 1)
Button/colors/icon_hover_pressed_color = Color(1, 1, 1, 1)
Button/colors/icon_normal_color = Color(1, 1, 1, 1)
Button/colors/icon_pressed_color = Color(1, 1, 1, 1)
Button/constants/align_to_largest_stylebox = 0
Button/constants/h_separation = 4
Button/constants/icon_max_width = 0
Button/constants/outline_size = 0
Button/font_sizes/font_size = 16
Button/styles/disabled = SubResource("StyleBoxFlat_vxwtt")
Button/styles/focus = SubResource("StyleBoxFlat_rjgu6")
Button/styles/hover = SubResource("StyleBoxFlat_vu6l5")
Button/styles/normal = SubResource("StyleBoxFlat_ydht1")
Button/styles/pressed = SubResource("StyleBoxFlat_8gw6x")
CharacterCard/base_type = &"Panel"
CharacterCard/styles/panel = SubResource("StyleBoxFlat_g21io")
CheckButton/colors/button_checked_color = Color(1, 1, 1, 1)
CheckButton/colors/button_unchecked_color = Color(1, 1, 1, 1)
CheckButton/colors/font_color = Color(0.875, 0.875, 0.875, 1)
CheckButton/colors/font_disabled_color = Color(0.875, 0.875, 0.875, 0.5)
CheckButton/colors/font_focus_color = Color(0.95, 0.95, 0.95, 1)
CheckButton/colors/font_hover_color = Color(0.95, 0.95, 0.95, 1)
CheckButton/colors/font_hover_pressed_color = Color(1, 1, 1, 1)
CheckButton/colors/font_outline_color = Color(0, 0, 0, 1)
CheckButton/colors/font_pressed_color = Color(1, 1, 1, 1)
CheckButton/constants/check_v_offset = 0
CheckButton/constants/h_separation = 4
CheckButton/constants/outline_size = 0
CheckButton/font_sizes/font_size = 16
CheckButton/styles/disabled = SubResource("StyleBoxEmpty_7ceur")
CheckButton/styles/focus = SubResource("StyleBoxFlat_uobgu")
CheckButton/styles/hover = SubResource("StyleBoxEmpty_puucq")
CheckButton/styles/hover_pressed = SubResource("StyleBoxEmpty_1mjdo")
CheckButton/styles/normal = SubResource("StyleBoxEmpty_s5e0q")
CheckButton/styles/pressed = SubResource("StyleBoxEmpty_0x86e")
DarkSpacer/base_type = &"Panel"
DarkSpacer/styles/panel = SubResource("StyleBoxFlat_f5ubn")
GridContainer/constants/h_separation = 4
GridContainer/constants/v_separation = 4
HBoxContainer/constants/separation = 4
HScrollBar/styles/grabber = SubResource("StyleBoxFlat_7qy2x")
HScrollBar/styles/grabber_highlight = SubResource("StyleBoxFlat_myxx4")
HScrollBar/styles/grabber_pressed = SubResource("StyleBoxFlat_3kvey")
HScrollBar/styles/scroll = SubResource("StyleBoxFlat_5iri2")
HScrollBar/styles/scroll_focus = SubResource("StyleBoxFlat_3scot")
HSeparator/constants/separation = 4
HSeparator/styles/separator = SubResource("StyleBoxLine_puicy")
HSlider/constants/center_grabber = 0
HSlider/constants/grabber_offset = 0
HSlider/constants/tick_offset = 0
HSlider/styles/grabber_area = SubResource("StyleBoxFlat_quqgn")
HSlider/styles/grabber_area_highlight = SubResource("StyleBoxFlat_m01q4")
HSlider/styles/slider = SubResource("StyleBoxFlat_k36pm")
HighlightLarge/base_type = &"Label"
HighlightLarge/colors/font_color = Color(1, 0.5, 0, 1)
HighlightLarge/font_sizes/font_size = 20
HighlightMedium/base_type = &"Label"
HighlightMedium/colors/font_color = Color(1, 0.5, 0, 1)
HighlightMedium/font_sizes/font_size = 18
Label/colors/font_color = Color(1, 1, 1, 1)
Label/colors/font_outline_color = Color(0, 0, 0, 1)
Label/colors/font_shadow_color = Color(0, 0, 0, 0)
Label/constants/line_spacing = 3
Label/constants/outline_size = 0
Label/constants/shadow_offset_x = 1
Label/constants/shadow_offset_y = 1
Label/constants/shadow_outline_size = 1
Label/font_sizes/font_size = 16
Label/styles/focus = SubResource("StyleBoxFlat_6h40v")
Label/styles/normal = SubResource("StyleBoxEmpty_s47sh")
ListRowEven/base_type = &"PanelContainer"
ListRowEven/styles/panel = SubResource("StyleBoxFlat_u5sc5")
ListRowOdd/base_type = &"PanelContainer"
ListRowOdd/styles/panel = SubResource("StyleBoxFlat_mxy8k")
MarginContainer/constants/margin_bottom = 0
MarginContainer/constants/margin_left = 0
MarginContainer/constants/margin_right = 0
MarginContainer/constants/margin_top = 0
MusicList/base_type = &"PanelContainer"
MusicList/styles/panel = SubResource("StyleBoxFlat_33f1l")
OptionButton/colors/font_color = Color(0.875, 0.875, 0.875, 1)
OptionButton/colors/font_disabled_color = Color(0.875, 0.875, 0.875, 0.5)
OptionButton/colors/font_focus_color = Color(0.95, 0.95, 0.95, 1)
OptionButton/colors/font_hover_color = Color(0.95, 0.95, 0.95, 1)
OptionButton/colors/font_hover_pressed_color = Color(1, 1, 1, 1)
OptionButton/colors/font_outline_color = Color(0, 0, 0, 1)
OptionButton/colors/font_pressed_color = Color(1, 1, 1, 1)
OptionButton/constants/arrow_margin = 4
OptionButton/constants/h_separation = 4
OptionButton/constants/modulate_arrow = 0
OptionButton/constants/outline_size = 0
OptionButton/font_sizes/font_size = 16
OptionButton/styles/disabled = SubResource("StyleBoxFlat_wbnll")
OptionButton/styles/disabled_mirrored = SubResource("StyleBoxFlat_bmtpa")
OptionButton/styles/focus = SubResource("StyleBoxFlat_f5lmb")
OptionButton/styles/hover = SubResource("StyleBoxFlat_qtlom")
OptionButton/styles/hover_mirrored = SubResource("StyleBoxFlat_t2i82")
OptionButton/styles/normal = SubResource("StyleBoxFlat_a4gt2")
OptionButton/styles/normal_mirrored = SubResource("StyleBoxFlat_uisqs")
OptionButton/styles/pressed = SubResource("StyleBoxFlat_dinf2")
OptionButton/styles/pressed_mirrored = SubResource("StyleBoxFlat_a0ksy")
Palette/colors/backdrop = Color(0, 0, 0, 0.55)
Panel/styles/panel = SubResource("StyleBoxFlat_hwwyi")
PanelContainer/styles/panel = SubResource("StyleBoxFlat_wl3gy")
PopupBackground/base_type = &"Panel"
PopupBackground/styles/panel = SubResource("StyleBoxFlat_vputg")
PopupMenu/colors/font_accelerator_color = Color(0.7, 0.7, 0.7, 0.8)
PopupMenu/colors/font_color = Color(0.875, 0.875, 0.875, 1)
PopupMenu/colors/font_disabled_color = Color(0.4, 0.4, 0.4, 0.8)
PopupMenu/colors/font_hover_color = Color(0.875, 0.875, 0.875, 1)
PopupMenu/colors/font_outline_color = Color(0, 0, 0, 1)
PopupMenu/colors/font_separator_color = Color(0.875, 0.875, 0.875, 1)
PopupMenu/colors/font_separator_outline_color = Color(0, 0, 0, 1)
PopupMenu/constants/gutter_compact = 1
PopupMenu/constants/h_separation = 4
PopupMenu/constants/icon_max_width = 0
PopupMenu/constants/indent = 10
PopupMenu/constants/item_end_padding = 2
PopupMenu/constants/item_start_padding = 2
PopupMenu/constants/outline_size = 0
PopupMenu/constants/search_bar_separation = 4
PopupMenu/constants/separator_outline_size = 0
PopupMenu/constants/v_separation = 4
PopupMenu/font_sizes/font_separator_size = 16
PopupMenu/font_sizes/font_size = 16
PopupMenu/styles/hover = SubResource("StyleBoxFlat_1de2m")
PopupMenu/styles/labeled_separator_left = SubResource("StyleBoxLine_bacd5")
PopupMenu/styles/labeled_separator_right = SubResource("StyleBoxLine_k3nwn")
PopupMenu/styles/panel = SubResource("StyleBoxFlat_axpob")
PopupMenu/styles/separator = SubResource("StyleBoxLine_cl37w")
PopupPanel/styles/panel = SubResource("StyleBoxFlat_vputg")
ProgressBar/colors/font_color = Color(0.95, 0.95, 0.95, 1)
ProgressBar/colors/font_outline_color = Color(0, 0, 0, 1)
ProgressBar/constants/outline_size = 0
ProgressBar/font_sizes/font_size = 16
ProgressBar/styles/background = SubResource("StyleBoxFlat_07kyi")
ProgressBar/styles/fill = SubResource("StyleBoxFlat_ouuwv")
ScrollContainer/colors/scroll_hint_horizontal_color = Color(0, 0, 0, 1)
ScrollContainer/colors/scroll_hint_vertical_color = Color(0, 0, 0, 1)
ScrollContainer/styles/focus = SubResource("StyleBoxFlat_35dwi")
ScrollContainer/styles/panel = SubResource("StyleBoxEmpty_r3gy8")
ShortcutRowDark/base_type = &"PanelContainer"
ShortcutRowDark/styles/panel = SubResource("StyleBoxFlat_anjdx")
SongRow/base_type = &"PanelContainer"
SongRow/styles/panel = SubResource("StyleBoxFlat_oxgwg")
SongRowLabel/base_type = &"Label"
SongRowLabel/font_sizes/font_size = 20
SongRowLabel/styles/normal = SubResource("StyleBoxFlat_r1nnu")
SongRowLabelPlaying/base_type = &"Label"
SongRowLabelPlaying/colors/font_color = Color(1, 0.5, 0, 1)
SongRowLabelPlaying/font_sizes/font_size = 20
SongRowLabelPlaying/styles/normal = SubResource("StyleBoxFlat_lkqs8")
TextEdit/colors/background_color = Color(0, 0, 0, 0)
TextEdit/colors/caret_background_color = Color(0, 0, 0, 1)
TextEdit/colors/caret_color = Color(0.875, 0.875, 0.875, 1)
TextEdit/colors/current_line_color = Color(0.25, 0.25, 0.26, 0.8)
TextEdit/colors/font_color = Color(0.875, 0.875, 0.875, 1)
TextEdit/colors/font_outline_color = Color(0, 0, 0, 1)
TextEdit/colors/font_placeholder_color = Color(0.875, 0.875, 0.875, 0.6)
TextEdit/colors/font_readonly_color = Color(0.875, 0.875, 0.875, 0.5)
TextEdit/colors/font_selected_color = Color(0, 0, 0, 0)
TextEdit/colors/search_result_border_color = Color(0.3, 0.3, 0.3, 0.4)
TextEdit/colors/search_result_color = Color(0.3, 0.3, 0.3, 1)
TextEdit/colors/selection_color = Color(0.5, 0.5, 0.5, 1)
TextEdit/colors/word_highlighted_color = Color(0.5, 0.5, 0.5, 0.25)
TextEdit/constants/caret_width = 1
TextEdit/constants/line_spacing = 4
TextEdit/constants/outline_size = 0
TextEdit/constants/wrap_offset = 10
TextEdit/font_sizes/font_size = 16
TextEdit/styles/focus = SubResource("StyleBoxFlat_1tv07")
TextEdit/styles/normal = SubResource("StyleBoxFlat_0ly2h")
TextEdit/styles/read_only = SubResource("StyleBoxFlat_o0qds")
TextLarge/base_type = &"Label"
TextLarge/font_sizes/font_size = 20
TextMedium/base_type = &"Label"
TextMedium/font_sizes/font_size = 18
Title/base_type = &"Label"
Title/font_sizes/font_size = 25
TitleLarge/base_type = &"Label"
TitleLarge/font_sizes/font_size = 50
TitleMedium/base_type = &"Label"
TitleMedium/font_sizes/font_size = 35
TooltipLabel/colors/font_color = Color(0.875, 0.875, 0.875, 1)
TooltipLabel/colors/font_outline_color = Color(0, 0, 0, 1)
TooltipLabel/colors/font_shadow_color = Color(0, 0, 0, 0)
TooltipLabel/constants/outline_size = 0
TooltipLabel/constants/shadow_offset_x = 1
TooltipLabel/constants/shadow_offset_y = 1
TooltipLabel/font_sizes/font_size = 16
TooltipPanel/styles/panel = SubResource("StyleBoxFlat_ogk6w")
VBoxContainer/constants/separation = 4
VScrollBar/styles/grabber = SubResource("StyleBoxFlat_dwgvb")
VScrollBar/styles/grabber_highlight = SubResource("StyleBoxFlat_uoaln")
VScrollBar/styles/grabber_pressed = SubResource("StyleBoxFlat_x5u8n")
VScrollBar/styles/scroll = SubResource("StyleBoxFlat_6fedo")
VScrollBar/styles/scroll_focus = SubResource("StyleBoxFlat_8sdcv")
VSeparator/constants/separation = 4
VSeparator/styles/separator = SubResource("StyleBoxLine_r3erx")
WindowBackground/base_type = &"Panel"
WindowBackground/styles/panel = SubResource("StyleBoxFlat_2mdtn")
-4
View File
@@ -1,4 +0,0 @@
[gd_resource type="StyleBoxFlat" format=3 uid="uid://blf3g88mugovr"]
[resource]
bg_color = Color(0.257813, 0.257813, 0.257813, 1)
-21
View File
@@ -1,21 +0,0 @@
[gd_resource type="Theme" format=3]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_popup"]
bg_color = Color(0.180392, 0.180392, 0.180392, 1)
border_width_left = 2
border_width_top = 2
border_width_right = 2
border_width_bottom = 2
border_color = Color(0.36, 0.36, 0.36, 1)
corner_radius_top_left = 6
corner_radius_top_right = 6
corner_radius_bottom_right = 6
corner_radius_bottom_left = 6
content_margin_left = 12.0
content_margin_top = 12.0
content_margin_right = 12.0
content_margin_bottom = 12.0
[resource]
Panel/styles/panel = SubResource("StyleBoxFlat_popup")
PopupPanel/styles/panel = SubResource("StyleBoxFlat_popup")
-4
View File
@@ -1,4 +0,0 @@
[gd_resource type="StyleBoxFlat" format=3 uid="uid://bsv6yb0yir04l"]
[resource]
bg_color = Color(0.180392, 0.180392, 0.180392, 1)