From 5ed356a61c5388edf56b2bc51ef888fec22b7251 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Gruszczy=C5=84ski?= Date: Fri, 17 Oct 2025 23:58:56 +0200 Subject: [PATCH] barwy kategorii --- app.py | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/app.py b/app.py index 174116e..e53501a 100644 --- a/app.py +++ b/app.py @@ -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 ):