From 2c89732228cb8ca88ec7fedbbeb06ac3a2497d7b Mon Sep 17 00:00:00 2001 From: Marcel Peterkau Date: Sun, 21 Jun 2026 21:44:38 +0200 Subject: [PATCH] fix: align splash progress fill --- src/ccma/assets/CHANGELOG.json | 1 + src/ccma/ui/splash.py | 46 +++++++++++++++++++++++++--------- 2 files changed, 35 insertions(+), 12 deletions(-) diff --git a/src/ccma/assets/CHANGELOG.json b/src/ccma/assets/CHANGELOG.json index 513fcce..c96f639 100644 --- a/src/ccma/assets/CHANGELOG.json +++ b/src/ccma/assets/CHANGELOG.json @@ -29,6 +29,7 @@ "Splash-Screen auf das eingebettete CCMA-Hintergrundmotiv umgestellt und redundante Titeltexte entfernt.", "Konfigurierbare Mindestanzeigezeit des Splash-Screens mit fünf Sekunden Standardwert ergänzt.", "Theme-unabhängigen Splash-Fortschrittsbalken in Bild-Blau mit Silberrahmen und zeitbasiertem Fortschritt eingeführt.", + "Innenfläche des Splash-Fortschrittsbalkens pixelgenau und ohne unteren Leerraum am Rahmen ausgerichtet.", "Splash-Start verteilt seine Mindestanzeigezeit als optionales Mitglieder-Delay auf den Hausmeisterlauf, um insbesondere Netzwerk-Dateisysteme zu entlasten.", "Hausmeister um konfigurierbare Geburtstags- und Mitgliedsjubiläumsmeldungen erweitert.", "Statusänderungen werden mit altem und neuem Klartextwert in der Mitgliederchronik protokolliert.", diff --git a/src/ccma/ui/splash.py b/src/ccma/ui/splash.py index a1ff6de..60b1164 100644 --- a/src/ccma/ui/splash.py +++ b/src/ccma/ui/splash.py @@ -217,27 +217,49 @@ class SplashProgressBar(tk.Canvas): TRACK_COLOR = "#071a29" FILL_COLOR = "#2389c9" BORDER_COLOR = "#aeb8c2" + BORDER_WIDTH = 2 def __init__(self, master: tk.Misc, *, width: int, height: int): - inner_width = max(1, width - 4) - inner_height = max(1, height - 4) super().__init__( master, - width=inner_width, - height=inner_height, - background=self.TRACK_COLOR, + width=width, + height=height, + background=self.BORDER_COLOR, borderwidth=0, - highlightthickness=2, - highlightbackground=self.BORDER_COLOR, - highlightcolor=self.BORDER_COLOR, + highlightthickness=0, + ) + inset = self.BORDER_WIDTH + self._fill_left = inset + self._fill_top = inset + self._fill_width = max(1, width - 2 * inset) + self._fill_bottom = max(inset + 1, height - inset) + self.create_rectangle( + inset, + inset, + width - inset, + height - inset, + fill=self.TRACK_COLOR, + outline="", + ) + self.fill_item = self.create_rectangle( + self._fill_left, + self._fill_top, + self._fill_left, + self._fill_bottom, + fill=self.FILL_COLOR, + outline="", ) - self._bar_width = inner_width - self._bar_height = inner_height - self.fill_item = self.create_rectangle(0, 0, 0, inner_height, fill=self.FILL_COLOR, outline="") def set(self, percent: float) -> None: value = min(100.0, max(0.0, float(percent))) - self.coords(self.fill_item, 0, 0, self._bar_width * value / 100.0, self._bar_height) + fill_right = self._fill_left + self._fill_width * value / 100.0 + self.coords( + self.fill_item, + self._fill_left, + self._fill_top, + fill_right, + self._fill_bottom, + ) def centered_position(