feat: add dynamic hard flavour

Someone requested idk who tho
This commit is contained in:
2 * r + 2 * t
2026-02-15 00:24:14 +11:00
parent bca7b12072
commit 9ed0067dd4
4 changed files with 25 additions and 5 deletions
+1 -1
View File
@@ -31,7 +31,7 @@ def get_colours_for_image(image: Path | str = wallpaper_thumbnail_path, scheme=N
scheme = get_scheme()
cache_base = scheme_cache_dir / compute_hash(image)
cache = (cache_base / scheme.variant / scheme.mode).with_suffix(".json")
cache = (cache_base / scheme.variant / scheme.flavour / scheme.mode).with_suffix(".json")
try:
with cache.open("r") as f:
+19 -1
View File
@@ -142,7 +142,7 @@ def lighten(colour: Hct, amount: float) -> Hct:
def darken(colour: Hct, amount: float) -> Hct:
diff = colour.tone * amount
return Hct.from_hct(colour.hue, colour.chroma + diff / 5, colour.tone - diff)
return Hct.from_hct(colour.hue, colour.chroma - diff / 5, colour.tone - diff)
def get_scheme(scheme: str) -> DynamicScheme:
@@ -216,6 +216,12 @@ def gen_scheme(scheme, primary: Hct) -> dict[str, str]:
for name, hct in colours.items():
colours[name].chroma -= 15
# Darken surfaces for hard flavour
if scheme.flavour == "hard":
for colour in "background", *(k for k in colours.keys() if k.startswith("surface")):
colours[colour] = lighten(colours[colour], 0.4) if light else darken(colours[colour], 0.8)
colours["term0"] = lighten(colours["term0"], 0.4) if light else darken(colours["term0"], 0.9)
# FIXME: deprecated stuff
colours["text"] = colours["onBackground"]
colours["subtext1"] = colours["onSurfaceVariant"]
@@ -230,6 +236,18 @@ def gen_scheme(scheme, primary: Hct) -> dict[str, str]:
colours["mantle"] = darken(colours["surface"], 0.03)
colours["crust"] = darken(colours["surface"], 0.05)
# More darkening if hard flavour
if scheme.flavour == "hard":
for colour in "base", "mantle", "crust":
colours[colour] = lighten(colours[colour], 0.4) if light else darken(colours[colour], 0.9)
for i in range(3):
colours[f"overlay{i}"] = (
lighten(colours[f"overlay{i}"], 0.4) if light else darken(colours[f"overlay{i}"], 0.8)
)
colours[f"surface{i}"] = (
lighten(colours[f"surface{i}"], 0.4) if light else darken(colours[f"surface{i}"], 0.8)
)
# For debugging
# print("\n".join(["{}: \x1b[48;2;{};{};{}m \x1b[0m".format(n, *c.to_rgba()[:3]) for n, c in colours.items()]))
+3 -1
View File
@@ -229,7 +229,9 @@ def get_scheme_flavours(name: str = None) -> list[str]:
if name is None:
name = get_scheme().name
return ["default"] if name == "dynamic" else [f.name for f in (scheme_data_dir / name).iterdir() if f.is_dir()]
return (
["default", "hard"] if name == "dynamic" else [f.name for f in (scheme_data_dir / name).iterdir() if f.is_dir()]
)
def get_scheme_modes(name: str = None, flavour: str = None) -> list[str]:
+2 -2
View File
@@ -106,7 +106,7 @@ def get_colours_for_wall(wall: Path | str, no_smart: bool) -> None:
scheme = Scheme(
{
"name": name,
"flavour": "default",
"flavour": scheme.flavour,
"mode": smart_opts["mode"],
"variant": smart_opts["variant"],
"colours": scheme.colours,
@@ -115,7 +115,7 @@ def get_colours_for_wall(wall: Path | str, no_smart: bool) -> None:
return {
"name": name,
"flavour": "default",
"flavour": scheme.flavour,
"mode": scheme.mode,
"variant": scheme.variant,
"colours": get_colours_for_image(get_thumb(wall, cache), scheme),