All screens: drop gray text, matching the Journey fix

The epd4in0e panel's palette has no gray at all (just black/white/
yellow/red/blue/green -- see epd4in0e.py's putpalette), so any gray
RGB fill gets Floyd-Steinberg dithered into a black/white checkerboard
across the whole glyph body. At the small font sizes most of these
screens use (Navidrome's artist/album/genre/source lines, Departures'
direction/platform columns, Weather's description/forecast labels,
Clock's date line, the placeholder messages), that reads as blurry,
half-rendered text -- same root cause already fixed in Journey.

Switched every gray fill/outline to solid black across navidrome.py,
weather.py, departures.py, clock.py, and picture.py. Left the
intentionally-faint row-divider hairlines (228,228,228) alone --
those are meant to almost disappear, not readable text. Removed
departures.py's now-unused MUTED constant.
This commit is contained in:
Honey committed 2026-07-23 11:56:24 +02:00
1 parent 4c10ff94d2
commit 132e133b1d
5 files changed
+20 -21

No files matched your search

+11 -11
View File
@@ -186,7 +186,7 @@ class NavidromeScreen(Screen):
font = load_font(size=int(min(width, height) * 0.06))
msg = "Nichts läuft gerade"
mw = text_width(draw, msg, font)
draw.text(((width - mw) / 2, height / 2), msg, font=font, fill=(140, 140, 140))
draw.text(((width - mw) / 2, height / 2), msg, font=font, fill="black")
def _render_landscape(self, image, draw, track, cover, settings, idle, width, height):
pad = int(width * 0.025)
@@ -223,11 +223,11 @@ class NavidromeScreen(Screen):
image.paste(fitted, (x, y))
else:
draw = ImageDraw.Draw(image)
draw.rectangle((x, y, x + size, y + size), outline=(60, 60, 60), width=2)
draw.rectangle((x, y, x + size, y + size), outline="black", width=2)
font = load_font(size=int(size * 0.3))
note = "♪"
nw = text_width(draw, note, font)
draw.text((x + (size - nw) / 2, y + size * 0.35), note, font=font, fill=(150, 150, 150))
draw.text((x + (size - nw) / 2, y + size * 0.35), note, font=font, fill="black")
def _draw_meta(self, draw, track, settings, idle, x, y, w, h, scale, center=False):
status_font = load_font(size=int(scale * 0.038), bold=True)
@@ -256,7 +256,7 @@ class NavidromeScreen(Screen):
status = "ZULETZT GESPIELT" if idle else "● NOW PLAYING"
def draw_status(yy):
draw.text((centered_x(status, status_font), yy), status, font=status_font, fill=(100, 100, 100))
draw.text((centered_x(status, status_font), yy), status, font=status_font, fill="black")
items.append((status_font.size * 1.8, draw_status))
@@ -271,7 +271,7 @@ class NavidromeScreen(Screen):
artist_line = truncate_to_width(draw, track["artist"], artist_font, w)
def draw_artist(yy):
draw.text((centered_x(artist_line, artist_font), yy), artist_line, font=artist_font, fill=(30, 30, 30))
draw.text((centered_x(artist_line, artist_font), yy), artist_line, font=artist_font, fill="black")
items.append((artist_font.size * 1.4, draw_artist))
@@ -282,7 +282,7 @@ class NavidromeScreen(Screen):
album_line = truncate_to_width(draw, album_line, album_font, w)
def draw_album(yy, album_line=album_line):
draw.text((centered_x(album_line, album_font), yy), album_line, font=album_font, fill=(110, 110, 110))
draw.text((centered_x(album_line, album_font), yy), album_line, font=album_font, fill="black")
items.append((album_font.size * 1.4, draw_album))
@@ -290,7 +290,7 @@ class NavidromeScreen(Screen):
genre_line = truncate_to_width(draw, track["genre"].upper(), album_font, w)
def draw_genre(yy, genre_line=genre_line):
draw.text((centered_x(genre_line, album_font), yy), genre_line, font=album_font, fill=(150, 150, 150))
draw.text((centered_x(genre_line, album_font), yy), genre_line, font=album_font, fill="black")
items.append((album_font.size * 1.4, draw_genre))
@@ -305,15 +305,15 @@ class NavidromeScreen(Screen):
def draw_progress(yy, bar_h=bar_h, bar_gap=bar_gap):
bar_y = yy + bar_gap
draw.rectangle((x, bar_y, x + w, bar_y + bar_h), outline=(180, 180, 180))
draw.text((centered_x(track["duration_text"], source_font), bar_y + bar_h + status_font.size * 0.4), track["duration_text"], font=source_font, fill=(110, 110, 110))
draw.rectangle((x, bar_y, x + w, bar_y + bar_h), outline="black")
draw.text((centered_x(track["duration_text"], source_font), bar_y + bar_h + status_font.size * 0.4), track["duration_text"], font=source_font, fill="black")
items.append((bar_gap + bar_h + status_font.size * 0.4 + source_font.size * 1.6, draw_progress))
elif track["duration"]:
duration_badge = track["duration_text"]
def draw_duration(yy, duration_badge=duration_badge):
draw.text((centered_x(duration_badge, source_font), yy), duration_badge, font=source_font, fill=(110, 110, 110))
draw.text((centered_x(duration_badge, source_font), yy), duration_badge, font=source_font, fill="black")
items.append((source_font.size * 1.6, draw_duration))
@@ -335,7 +335,7 @@ class NavidromeScreen(Screen):
# overlap whatever the block above drew -- long titles/metadata
# can still push past where a fixed bottom position would land.
bottom_y = max(cursor + status_font.size * 0.4, y + h - source_font.size * 1.3)
draw.text((centered_x(source_line, source_font), bottom_y), source_line, font=source_font, fill=(140, 140, 140))
draw.text((centered_x(source_line, source_font), bottom_y), source_line, font=source_font, fill="black")
def _cover_fit(image: Image.Image, size: int) -> Image.Image: