modify styling

This commit is contained in:
2026-08-02 06:20:10 -04:00
parent 0dd4b0c5cc
commit 86c0b0a848
5 changed files with 12017 additions and 25 deletions
+1
View File
@@ -2,3 +2,4 @@ __pycache__
.env .env
logos logos
old old
*.png
+11981
View File
File diff suppressed because it is too large Load Diff
+5 -7
View File
@@ -2,7 +2,7 @@ import requests
from PIL import Image from PIL import Image
from time import time from time import time
from rgbmatrix import graphics from rgbmatrix import graphics
from vars import PANEL_HEIGHT, PANEL_WIDTH, GAME_WIDTH, DIVIDER_COLOR, Colors, font, font_small from vars import PANEL_HEIGHT, PANEL_WIDTH, GAME_WIDTH, DIVIDER_COLOR, Colors, font, font_small, font_super_small
players = { players = {
"team1": [], "team1": [],
@@ -31,7 +31,6 @@ def fetch_data():
new_players = {"team1": [], "team2": []} new_players = {"team1": [], "team2": []}
for player in data["team1"]["players"]: for player in data["team1"]["players"]:
print(player)
new_players['team1'].append({ new_players['team1'].append({
"first_name": player['first_name'], "first_name": player['first_name'],
"last_name": player['last_name'], "last_name": player['last_name'],
@@ -42,7 +41,6 @@ def fetch_data():
"injury_body_part": player.get('injury_body_part') "injury_body_part": player.get('injury_body_part')
}) })
for player in data["team2"]["players"]: for player in data["team2"]["players"]:
print(player)
new_players['team2'].append({ new_players['team2'].append({
"first_name": player['first_name'], "first_name": player['first_name'],
"last_name": player['last_name'], "last_name": player['last_name'],
@@ -72,15 +70,15 @@ def draw_text_overlay(canvas, players, scroll_x):
if x + GAME_WIDTH < 0 or x >= PANEL_WIDTH: if x + GAME_WIDTH < 0 or x >= PANEL_WIDTH:
continue continue
graphics.DrawText(canvas, font_small, x + 35, 11, graphics.DrawText(canvas, font, x + 35, 11,
rbg(Colors.WHITE.value), player['abbr_name']) rbg(Colors.WHITE.value), player['abbr_name'])
graphics.DrawText(canvas, font_small, x + 35, 27, graphics.DrawText(canvas, font_small, x + 72, 11,
rbg(Colors.WHITE.value), player['position']) rbg(Colors.WHITE.value), player['position'])
if player['injury_status'] and player['injury_body_part']: if player['injury_status'] and player['injury_body_part']:
graphics.DrawText(canvas, font, x + 40, 13, graphics.DrawText(canvas, font_small, x + 35, 20,
rbg(Colors.RED.value), str(player['injury_status'])) rbg(Colors.RED.value), str(player['injury_status']))
graphics.DrawText(canvas, font, x + 40, 29, graphics.DrawText(canvas, font_super_small, x + 35, 25,
rbg(Colors.RED.value), str(player["injury_body_part"])) rbg(Colors.RED.value), str(player["injury_body_part"]))
# # if the time is shown it should be split between lines # # if the time is shown it should be split between lines
+27 -17
View File
@@ -1,12 +1,3 @@
"""
Dev-only preview tool: renders the fantasy card for two synthetic players
(one healthy, one injured) to PNG files, without needing the actual
LED matrix hardware or the `rgbmatrix` library.
Run: python preview_fantasy_card.py
Output: preview_healthy.png, preview_injured.png, preview_comparison.png
(preview_comparison.png opens automatically)
"""
import os import os
import sys import sys
import types import types
@@ -16,21 +7,42 @@ REPO_ROOT = Path(__file__).resolve().parent
sys.path.insert(0, str(REPO_ROOT)) sys.path.insert(0, str(REPO_ROOT))
# --- stub out rgbmatrix so vars.py / modes/fantasy.py import cleanly on a dev machine --- # --- stub out rgbmatrix so vars.py / modes/fantasy.py import cleanly on a dev machine ---
from PIL import ImageFont
_FONT_PATH_SIZES = {"4x6.bdf": 6, "5x7.bdf": 7, "7x13.bdf": 12, "9x18.bdf": 16}
def _load_pil_font(px_size):
for candidate in (r"C:\Windows\Fonts\consola.ttf", r"C:\Windows\Fonts\cour.ttf"):
if os.path.exists(candidate):
try:
return ImageFont.truetype(candidate, px_size)
except Exception:
pass
return ImageFont.load_default()
class _FakeFont: class _FakeFont:
def __init__(self):
self.size = 10
self.pil_font = _load_pil_font(self.size)
def LoadFont(self, path): def LoadFont(self, path):
pass # real BDF files are named e.g. "5x7.bdf" / "7x13.bdf" / "9x18.bdf" -
# use that to pick a comparably-sized stand-in TTF for the preview
self.size = _FONT_PATH_SIZES.get(os.path.basename(path), 10)
self.pil_font = _load_pil_font(self.size)
def _fake_draw_text(canvas, font, x, y, color, text): def _fake_draw_text(canvas, font, x, y, color, text):
r, g, b = color r, g, b = color
canvas.draw.text((x, y - 8), text, fill=(r, g, b)) offset = getattr(font, "size", 10)
return len(text) * 6 canvas.draw.text((x, y - offset), text, fill=(r, g, b), font=getattr(font, "pil_font", None))
return len(text) * (offset // 2 + 1)
def _fake_color(r, g, b): def _fake_color(r, g, b):
return (r, g, b) return (r, g, b)
_graphics_mod = types.ModuleType("rgbmatrix.graphics") _graphics_mod = types.ModuleType("rgbmatrix.graphics")
_graphics_mod.Font = _FakeFont _graphics_mod.Font = _FakeFont
_graphics_mod.DrawText = _fake_draw_text _graphics_mod.DrawText = _fake_draw_text
@@ -47,7 +59,6 @@ from PIL import Image, ImageDraw
import vars import vars
from modes import fantasy from modes import fantasy
class FakeCanvas: class FakeCanvas:
def __init__(self, width, height): def __init__(self, width, height):
self.img = Image.new("RGB", (width, height), (0, 0, 0)) self.img = Image.new("RGB", (width, height), (0, 0, 0))
@@ -60,7 +71,6 @@ class FakeCanvas:
if 0 <= x < self.img.width and 0 <= y < self.img.height: if 0 <= x < self.img.width and 0 <= y < self.img.height:
self.img.putpixel((x, y), (r, g, b)) self.img.putpixel((x, y), (r, g, b))
class FakeMatrix: class FakeMatrix:
def __init__(self): def __init__(self):
self.canvas = FakeCanvas(vars.PANEL_WIDTH, vars.PANEL_HEIGHT) self.canvas = FakeCanvas(vars.PANEL_WIDTH, vars.PANEL_HEIGHT)
@@ -134,4 +144,4 @@ if __name__ == "__main__":
combined_path = REPO_ROOT / "preview_comparison.png" combined_path = REPO_ROOT / "preview_comparison.png"
combined.save(combined_path) combined.save(combined_path)
print(f"Saved: {combined_path}") print(f"Saved: {combined_path}")
combined.show() # combined.show()
+2
View File
@@ -23,7 +23,9 @@ DIVIDER_COLOR = (40, 40, 40)
font = graphics.Font() font = graphics.Font()
font_small = graphics.Font() font_small = graphics.Font()
font_super_small = graphics.Font()
font_big = graphics.Font() font_big = graphics.Font()
font.LoadFont(os.path.join(ASSET_DIR, "fonts/7x13.bdf")) font.LoadFont(os.path.join(ASSET_DIR, "fonts/7x13.bdf"))
font_small.LoadFont(os.path.join(ASSET_DIR, "fonts/5x7.bdf")) font_small.LoadFont(os.path.join(ASSET_DIR, "fonts/5x7.bdf"))
font_super_small.LoadFont(os.path.join(ASSET_DIR, "fonts/4x6.bdf"))
font_big.LoadFont(os.path.join(ASSET_DIR, "fonts/9x18.bdf")) font_big.LoadFont(os.path.join(ASSET_DIR, "fonts/9x18.bdf"))