From bca04e3a2e1e5403452640a9f15a5ef3fb07b87f Mon Sep 17 00:00:00 2001 From: Phillip Tarrant Date: Sat, 11 Jul 2026 09:07:16 -0500 Subject: [PATCH] feat(theme): parchment Button variation for clickable parchment rows MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ThemeKeys.PARCHMENT_CARD is a PanelContainer-base variation (only a `panel` stylebox) — a Button looks up normal/hover/pressed/disabled, which don't exist there, so a Button styled with it renders unskinned. Add PARCHMENT_BUTTON, a Button-base variation with those four styleboxes plus an empty focus box, built from Palette colours only. Same fix pattern as DOCK_BUTTON for the system dock. Regenerated game_theme.tres from the builder. --- client/assets/theme/game_theme.tres | 128 ++++++++++++++++++----- client/scripts/theme/build_game_theme.gd | 17 +++ client/scripts/theme/theme_keys.gd | 2 + 3 files changed, 120 insertions(+), 27 deletions(-) diff --git a/client/assets/theme/game_theme.tres b/client/assets/theme/game_theme.tres index f311cff..7c05cc2 100644 --- a/client/assets/theme/game_theme.tres +++ b/client/assets/theme/game_theme.tres @@ -158,6 +158,72 @@ content_margin_left = 12.0 content_margin_top = 6.0 content_margin_right = 12.0 content_margin_bottom = 6.0 +bg_color = Color(0.8509804, 0.7882353, 0.63529414, 1) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(0.6627451, 0.5803922, 0.39215687, 1) +corner_radius_top_left = 8 +corner_radius_top_right = 8 +corner_radius_bottom_right = 8 +corner_radius_bottom_left = 8 + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_ns3kg"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_jly1r"] +content_margin_left = 12.0 +content_margin_top = 6.0 +content_margin_right = 12.0 +content_margin_bottom = 6.0 +bg_color = Color(0.9019608, 0.8509804, 0.72156864, 1) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(0.3529412, 0.2627451, 0.14901961, 1) +corner_radius_top_left = 8 +corner_radius_top_right = 8 +corner_radius_bottom_right = 8 +corner_radius_bottom_left = 8 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_lw8lk"] +content_margin_left = 12.0 +content_margin_top = 6.0 +content_margin_right = 12.0 +content_margin_bottom = 6.0 +bg_color = Color(0.94509804, 0.9098039, 0.8235294, 1) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(0.6627451, 0.5803922, 0.39215687, 1) +corner_radius_top_left = 8 +corner_radius_top_right = 8 +corner_radius_bottom_right = 8 +corner_radius_bottom_left = 8 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_nh0e7"] +content_margin_left = 12.0 +content_margin_top = 6.0 +content_margin_right = 12.0 +content_margin_bottom = 6.0 +bg_color = Color(0.8509804, 0.7882353, 0.63529414, 1) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(0.3529412, 0.2627451, 0.14901961, 1) +corner_radius_top_left = 8 +corner_radius_top_right = 8 +corner_radius_bottom_right = 8 +corner_radius_bottom_left = 8 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_dtr07"] +content_margin_left = 12.0 +content_margin_top = 6.0 +content_margin_right = 12.0 +content_margin_bottom = 6.0 bg_color = Color(0.94509804, 0.9098039, 0.8235294, 1) border_width_left = 1 border_width_top = 1 @@ -169,7 +235,7 @@ corner_radius_top_right = 6 corner_radius_bottom_right = 6 corner_radius_bottom_left = 6 -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ns3kg"] +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_nmowx"] content_margin_left = 12.0 content_margin_top = 6.0 content_margin_right = 12.0 @@ -185,7 +251,7 @@ corner_radius_top_right = 4 corner_radius_bottom_right = 4 corner_radius_bottom_left = 4 -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_jly1r"] +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_oi067"] content_margin_left = 12.0 content_margin_top = 6.0 content_margin_right = 12.0 @@ -201,7 +267,7 @@ corner_radius_top_right = 4 corner_radius_bottom_right = 4 corner_radius_bottom_left = 4 -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_lw8lk"] +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ukblj"] content_margin_left = 12.0 content_margin_top = 6.0 content_margin_right = 12.0 @@ -217,7 +283,7 @@ corner_radius_top_right = 4 corner_radius_bottom_right = 4 corner_radius_bottom_left = 4 -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_nh0e7"] +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_utt73"] content_margin_left = 12.0 content_margin_top = 6.0 content_margin_right = 12.0 @@ -233,7 +299,7 @@ corner_radius_top_right = 4 corner_radius_bottom_right = 4 corner_radius_bottom_left = 4 -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_dtr07"] +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_5u8fh"] content_margin_left = 12.0 content_margin_top = 6.0 content_margin_right = 12.0 @@ -249,9 +315,9 @@ corner_radius_top_right = 4 corner_radius_bottom_right = 4 corner_radius_bottom_left = 4 -[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_nmowx"] +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_p0qbh"] -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_oi067"] +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_6y6ak"] content_margin_left = 12.0 content_margin_top = 6.0 content_margin_right = 12.0 @@ -267,7 +333,7 @@ corner_radius_top_right = 14 corner_radius_bottom_right = 14 corner_radius_bottom_left = 14 -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ukblj"] +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_txxuc"] content_margin_left = 12.0 content_margin_top = 6.0 content_margin_right = 12.0 @@ -283,7 +349,7 @@ corner_radius_top_right = 14 corner_radius_bottom_right = 14 corner_radius_bottom_left = 14 -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_utt73"] +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_7d6ug"] content_margin_left = 12.0 content_margin_top = 6.0 content_margin_right = 12.0 @@ -299,9 +365,9 @@ corner_radius_top_right = 14 corner_radius_bottom_right = 14 corner_radius_bottom_left = 14 -[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_5u8fh"] +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_najyk"] -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_p0qbh"] +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_jtb1k"] content_margin_left = 12.0 content_margin_top = 6.0 content_margin_right = 12.0 @@ -317,7 +383,7 @@ corner_radius_top_right = 14 corner_radius_bottom_right = 14 corner_radius_bottom_left = 14 -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_6y6ak"] +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_wmbj4"] content_margin_left = 12.0 content_margin_top = 6.0 content_margin_right = 12.0 @@ -333,7 +399,7 @@ corner_radius_top_right = 14 corner_radius_bottom_right = 14 corner_radius_bottom_left = 14 -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_txxuc"] +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_xdylb"] content_margin_left = 12.0 content_margin_top = 6.0 content_margin_right = 12.0 @@ -384,26 +450,34 @@ Mono/base_type = &"Label" Mono/colors/font_color = Color(0.6039216, 0.56078434, 0.47058824, 1) Mono/font_sizes/font_size = 13 Mono/fonts/font = ExtResource("2_605w4") +ParchmentButton/base_type = &"Button" +ParchmentButton/colors/font_color = Color(0.2901961, 0.24705882, 0.17254902, 1) +ParchmentButton/colors/font_disabled_color = Color(0.41568628, 0.3529412, 0.22745098, 1) +ParchmentButton/styles/disabled = SubResource("StyleBoxFlat_0fjdt") +ParchmentButton/styles/focus = SubResource("StyleBoxEmpty_ns3kg") +ParchmentButton/styles/hover = SubResource("StyleBoxFlat_jly1r") +ParchmentButton/styles/normal = SubResource("StyleBoxFlat_lw8lk") +ParchmentButton/styles/pressed = SubResource("StyleBoxFlat_nh0e7") ParchmentCard/base_type = &"PanelContainer" -ParchmentCard/styles/panel = SubResource("StyleBoxFlat_0fjdt") +ParchmentCard/styles/panel = SubResource("StyleBoxFlat_dtr07") ParchmentInset/base_type = &"PanelContainer" -ParchmentInset/styles/panel = SubResource("StyleBoxFlat_ns3kg") +ParchmentInset/styles/panel = SubResource("StyleBoxFlat_nmowx") PrimaryCTA/base_type = &"Button" PrimaryCTA/colors/font_color = Color(0.9411765, 0.9019608, 0.8156863, 1) PrimaryCTA/colors/font_disabled_color = Color(0.6039216, 0.56078434, 0.47058824, 1) -PrimaryCTA/styles/disabled = SubResource("StyleBoxFlat_jly1r") -PrimaryCTA/styles/hover = SubResource("StyleBoxFlat_lw8lk") -PrimaryCTA/styles/normal = SubResource("StyleBoxFlat_nh0e7") -PrimaryCTA/styles/pressed = SubResource("StyleBoxFlat_dtr07") +PrimaryCTA/styles/disabled = SubResource("StyleBoxFlat_oi067") +PrimaryCTA/styles/hover = SubResource("StyleBoxFlat_ukblj") +PrimaryCTA/styles/normal = SubResource("StyleBoxFlat_utt73") +PrimaryCTA/styles/pressed = SubResource("StyleBoxFlat_5u8fh") Tab/base_type = &"Button" Tab/colors/font_color = Color(0.41568628, 0.3529412, 0.22745098, 1) -Tab/styles/focus = SubResource("StyleBoxEmpty_nmowx") -Tab/styles/hover = SubResource("StyleBoxFlat_oi067") -Tab/styles/normal = SubResource("StyleBoxFlat_ukblj") -Tab/styles/pressed = SubResource("StyleBoxFlat_utt73") +Tab/styles/focus = SubResource("StyleBoxEmpty_p0qbh") +Tab/styles/hover = SubResource("StyleBoxFlat_6y6ak") +Tab/styles/normal = SubResource("StyleBoxFlat_txxuc") +Tab/styles/pressed = SubResource("StyleBoxFlat_7d6ug") TabActive/base_type = &"Button" TabActive/colors/font_color = Color(0.9411765, 0.9019608, 0.8156863, 1) -TabActive/styles/focus = SubResource("StyleBoxEmpty_5u8fh") -TabActive/styles/hover = SubResource("StyleBoxFlat_p0qbh") -TabActive/styles/normal = SubResource("StyleBoxFlat_6y6ak") -TabActive/styles/pressed = SubResource("StyleBoxFlat_txxuc") +TabActive/styles/focus = SubResource("StyleBoxEmpty_najyk") +TabActive/styles/hover = SubResource("StyleBoxFlat_jtb1k") +TabActive/styles/normal = SubResource("StyleBoxFlat_wmbj4") +TabActive/styles/pressed = SubResource("StyleBoxFlat_xdylb") diff --git a/client/scripts/theme/build_game_theme.gd b/client/scripts/theme/build_game_theme.gd index df3b006..0c4d644 100644 --- a/client/scripts/theme/build_game_theme.gd +++ b/client/scripts/theme/build_game_theme.gd @@ -36,6 +36,7 @@ static func build_theme() -> Theme: _primary_cta(theme) _tabs(theme) _dock_button(theme) + _parchment_button(theme) _chip(theme) _tiles(theme) _cards_and_panels(theme) @@ -120,6 +121,22 @@ static func _dock_button(theme: Theme) -> void: theme.set_color(&"font_color", k, Palette.CREAM_SECONDARY) +static func _parchment_button(theme: Theme) -> void: + # Clickable parchment row/card for the narration book (mock 2a response + # choices + the refire affordance). Button-base so normal/hover/pressed/ + # disabled styleboxes actually apply (a PanelContainer variation's lone + # `panel` stylebox does not skin a Button). Colours are the mock's choice-card. + var k := ThemeKeys.PARCHMENT_BUTTON + theme.set_type_variation(k, "Button") + theme.set_stylebox(&"normal", k, _flat(Palette.PARCHMENT_CARD, Palette.PARCHMENT_BORDER_3, 1, 8)) + theme.set_stylebox(&"hover", k, _flat(Palette.PARCHMENT_INSET, Palette.INK_LABEL, 1, 8)) + theme.set_stylebox(&"pressed", k, _flat(Palette.PARCHMENT_INSET_2, Palette.INK_LABEL, 1, 8)) + theme.set_stylebox(&"disabled", k, _flat(Palette.PARCHMENT_INSET_2, Palette.PARCHMENT_BORDER_3, 1, 8)) + theme.set_stylebox(&"focus", k, StyleBoxEmpty.new()) + theme.set_color(&"font_color", k, Palette.INK_BODY) + theme.set_color(&"font_disabled_color", k, Palette.INK_MUTED) + + static func _chip(theme: Theme) -> void: # Base chip; the semantic colour (red/gold/grey) is applied per-use by script. var k := ThemeKeys.CHIP diff --git a/client/scripts/theme/theme_keys.gd b/client/scripts/theme/theme_keys.gd index 8acf858..3de8ff0 100644 --- a/client/scripts/theme/theme_keys.gd +++ b/client/scripts/theme/theme_keys.gd @@ -10,6 +10,7 @@ const TAB := &"Tab" const TAB_ACTIVE := &"TabActive" const CHIP := &"Chip" const DOCK_BUTTON := &"DockButton" +const PARCHMENT_BUTTON := &"ParchmentButton" const ITEM_TILE := &"ItemTile" const ITEM_TILE_EMPTY := &"ItemTileEmpty" const PARCHMENT_CARD := &"ParchmentCard" @@ -30,6 +31,7 @@ const ALL := { TAB_ACTIVE: "Button", CHIP: "Button", DOCK_BUTTON: "Button", + PARCHMENT_BUTTON: "Button", ITEM_TILE: "PanelContainer", ITEM_TILE_EMPTY: "PanelContainer", PARCHMENT_CARD: "PanelContainer",