barwy kategorii

This commit is contained in:
Mateusz Gruszczyński
2025-10-17 23:58:56 +02:00
parent 5da660b4c3
commit 5ed356a61c

26
app.py
View File

@@ -901,27 +901,29 @@ def category_to_color(name: str, min_hue_gap_deg: int = 18) -> str:
# Pełne pokrycie koła barw 0..360
hue_deg = mix % 360
# Odpychanie lokalne: mała losowa korekta hue, aby podobne nazwy nie dawały prawie identycznych kolorów
gap = (rotl(mix, 17) % (2*min_hue_gap_deg)) - min_hue_gap_deg # w zakresie [-gap, +gap]
# Odpychanie lokalne: mała korekta hue, aby podobne nazwy nie dawały prawie identycznych kolorów
gap = (rotl(mix, 17) % (2*min_hue_gap_deg)) - min_hue_gap_deg # [-gap, +gap]
hue_deg = (hue_deg + gap) % 360
# Stałe, „bezpieczne” S i L dla dobrej rozróżnialności
s = 0.78
l = 0.55
# Ciemniejszy profil: mniej rażący na ekranie
# Bazowe S/L
s = 0.75
l = 0.52
# Minimalna wariacja S/L (±0.03..0.04), aby dodatkowo różnicować podobne hue
s_var = ((rotl(mix, 29) % 7) - 3) / 100.0
l_var = ((rotl(mix, 53) % 7) - 3) / 100.0
s = min(0.9, max(0.7, s + s_var))
l = min(0.65, max(0.48, l + l_var))
# Ograniczona wariacja, węższe widełki
s_var = ((rotl(mix, 29) % 5) - 2) / 100.0 # ±0.02
l_var = ((rotl(mix, 53) % 7) - 3) / 100.0 # ±0.03
s = min(0.82, max(0.68, s + s_var))
l = min(0.56, max(0.46, l + l_var))
# colorsys.hls_to_rgb używa H,L,S w [0..1], więc hue trzeba przeskalować
h = hue_deg / 360.0 # [0..1]
# Konwersja HLS->RGB (colorsys: H, L, S w [0..1])
h = hue_deg / 360.0
r, g, b = colorsys.hls_to_rgb(h, l, s)
return f"#{int(round(r*255)):02x}{int(round(g*255)):02x}{int(round(b*255)):02x}"
def get_total_expenses_grouped_by_category(
show_all, range_type, start_date, end_date, user_id, category_id=None
):