Skip to content

Commit

Permalink
Style: Update to new Theme Format
Browse files Browse the repository at this point in the history
  • Loading branch information
Foldex committed May 8, 2024
1 parent 81a8282 commit 758d290
Showing 1 changed file with 87 additions and 37 deletions.
124 changes: 87 additions & 37 deletions src/style.py
Expand Up @@ -45,7 +45,7 @@ def parse_css(file):
with open (file, 'r' ) as f:
content = f.read()

pattern = r'--(\w+)\s*:\s*(.*);'
pattern = r'--([\w-]+)\s*:\s*(.*);'
matches = re.findall(pattern, content)

vars = {}
Expand All @@ -70,53 +70,103 @@ def generate_style(theme_name):
if not os.path.exists(theme_path):
return (False, _("Style: Could not find theme {theme_name}").format(theme_name=theme_name))

css_vars = parse_css(theme_path)
css = ""
theme_vars = parse_css(theme_path)

# Generated Styles
style_vars = {
"accent_color": theme_vars.get("adw-accent-rgb"),
"accent_bg_color": theme_vars.get("adw-accent-bg-rgb"),
"accent_fg_color": theme_vars.get("adw-accent-fg-rgb"),

"destructive": theme_vars.get("adw-destructive-rgb"),
"destructive_fg_color": theme_vars.get("adw-destructive-fg-rgb"),
"destructive_bg_color": theme_vars.get("adw-destructive-bg-rgb"),

"success_color": theme_vars.get("adw-success-rgb"),
"success_bg_color": theme_vars.get("adw-success-bg-rgb"),
"success_fg_color": theme_vars.get("adw-success-fg-rgb"),

"warning_color": theme_vars.get("adw-warning-rgb"),
"warning_bg_color": theme_vars.get("adw-warning-bg-rgb"),
"warning_fg_color": (theme_vars.get("adw-warning-fg-rgb"), theme_vars.get("adw-warning-fg-a")),

"error_color": theme_vars.get("adw-error-rgb"),
"error_bg_color": theme_vars.get("adw-error-bg-rgb"),
"error_fg_color": theme_vars.get("adw-error-fg-rgb"),

"headerbar_bg_color": theme_vars.get("adw-headerbar-bg-rgb"),
"headerbar_fg_color": theme_vars.get("adw-headerbar-fg-rgb"),
"headerbar_backdrop_color": theme_vars.get("adw-headerbar-backdrop-rgb"),
"headerbar_shade_color": theme_vars.get("adw-headerbar-shade-rgb"),

"window_bg_color": theme_vars.get("adw-window-bg-rgb"),
"window_fg_color": theme_vars.get("adw-window-fg-rgb"),

"view_bg_color": theme_vars.get("adw-view-bg-rgb"),
"view_fg_color": theme_vars.get("adw-view-fg-rgb"),

css += format_css("accent_color", css_vars["accent"])
css += format_css("accent_bg_color", css_vars["accent_bg"])
css += format_css("accent_fg_color", css_vars["accent_fg"])
"popover_bg_color": theme_vars.get("adw-popover-bg-rgb"),
"popover_fg_color": theme_vars.get("adw-popover-fg-rgb"),

css += format_css("destructive", css_vars["destructive"])
css += format_css("destructive_fg_color", css_vars["destructive_fg"])
css += format_css("destructive_bg_color", css_vars["destructive_bg"])
"dialog_bg_color": theme_vars.get("adw-popover-bg-rgb"),
"dialog_fg_color": theme_vars.get("adw-popover-fg-rgb"),

css += format_css("success_color", css_vars["success"])
css += format_css("success_bg_color", css_vars["success_bg"])
css += format_css("success_fg_color", css_vars["success_fg"])
"card_fg_color": theme_vars.get("adw-card-fg-rgb"),
"card_bg_color": (theme_vars.get("adw-card-bg-rgb"), theme_vars.get("adw-card-bg-a")),
}

css += format_css("warning_color", css_vars["warning"])
css += format_css("warning_bg_color", css_vars["warning_bg"])
css += format_css("warning_fg_color", css_vars["warning_fg"])
style_vars = lookup_css(style_vars, theme_vars)
style = format_css(style_vars)

css += format_css("error_color", css_vars["error"])
css += format_css("error_bg_color", css_vars["error_bg"])
css += format_css("error_fg_color", css_vars["error_fg"])
if None in style_vars.values():
return (False, _("Style: Theme {theme_name} seems to be invalid").format(theme_name=theme_name))

css += format_css("headerbar_bg_color", css_vars["headerbar_bg"])
css += format_css("headerbar_fg_color", css_vars["headerbar_fg"])
css += format_css("headerbar_backdrop_color", css_vars["headerbar_backdrop"])
css += format_css("headerbar_shade_color", css_vars["headerbar_shade"])
# Hardcoded Styles
style += "tooltip.background { background-color: rgba(0, 0, 0, 0.8); color: @card_fg_color; }\n"
style += "list.boxed-list > row:not(:last-child) { border-bottom: 1px solid rgba(0, 0, 0, 0.36); }\n"

css += format_css("window_bg_color", css_vars["window_bg"])
css += format_css("window_fg_color", css_vars["window_fg"])

css += format_css("view_bg_color", css_vars["view_bg"])
css += format_css("view_fg_color", css_vars["view_fg"])
return (True, style)

css += format_css("popover_bg_color", css_vars["popover_bg"])
css += format_css("popover_fg_color", css_vars["popover_fg"])
def lookup_css(style_vars, theme_vars):
# non-recursive, meh
for adw_color, theme_color in style_vars.items():

css += format_css("dialog_bg_color", css_vars["popover_bg"])
css += format_css("dialog_fg_color", css_vars["popover_fg"])
if not theme_color:
continue

if isinstance(theme_color, tuple):
continue

var_result = None

var_pattern = r'var\(\s*--([\w-]+)\s*\)'
var_result = re.search(var_pattern, theme_color)

if var_result:
resolved = theme_vars.get(var_result.group(1))
else:
resolved = None

if resolved:
style_vars[adw_color] = resolved

return style_vars

def format_css(style_vars):

css = ""

css += format_css("card_fg_color", css_vars["fg"])
css += format_css("card_bg_color", "rgba(255, 255, 255, 0.08)")
for adw_color, theme_color in style_vars.items():
if theme_color:

css += "tooltip.background { background-color: rgba(0, 0, 0, 0.8); color: @card_fg_color; }\n"
css += "list.boxed-list > row:not(:last-child) { border-bottom: 1px solid rgba(0, 0, 0, 0.36); }\n"
# tuples are rgba
if isinstance(theme_color, tuple) and theme_color[0] and theme_color[1]:
final_color = f"rgba({theme_color[0]}, {theme_color[1]})"
# rgb
else:
final_color = f"rgb({theme_color})"

return (True, css)
css += f"@define-color {adw_color} {final_color};\n"

def format_css(name, color):
return f"@define-color {name} {color};\n"
return css

0 comments on commit 758d290

Please sign in to comment.