mirror of
https://github.com/ChuckBuilds/LEDMatrix.git
synced 2026-04-11 05:13:01 +00:00
adjust fonts for music display
This commit is contained in:
@@ -563,70 +563,82 @@ class DisplayController:
|
|||||||
"""Displays the current music information."""
|
"""Displays the current music information."""
|
||||||
if not self.music_manager:
|
if not self.music_manager:
|
||||||
logger.warning("Music manager not available for display_music_screen.")
|
logger.warning("Music manager not available for display_music_screen.")
|
||||||
# Optionally display a "Music Unavailable" message
|
|
||||||
canvas = self.display_manager.matrix.CreateFrameCanvas()
|
|
||||||
if force_clear:
|
if force_clear:
|
||||||
self.display_manager.clear_screen()
|
self.display_manager.clear() # Clear the display_manager's internal image
|
||||||
# Use font_default if it exists, otherwise, this will raise an AttributeError for font_default
|
|
||||||
font_to_use = getattr(self.display_manager, 'font_default', None)
|
# Use DisplayManager's drawing capabilities and its font
|
||||||
|
font_to_use = getattr(self.display_manager, 'font', None) # Default to 'font' (PressStart2P)
|
||||||
|
if not font_to_use: # Fallback if 'font' isn't there for some reason
|
||||||
|
font_to_use = getattr(self.display_manager, 'small_font', None)
|
||||||
|
|
||||||
if font_to_use:
|
if font_to_use:
|
||||||
self.display_manager.draw_text(canvas, "Music N/A", 5, 15, font_to_use, (255,0,0))
|
# Draw directly on DisplayManager's image
|
||||||
|
self.display_manager.draw.text((5, 10), "Music N/A", font=font_to_use, fill=(255,0,0))
|
||||||
else:
|
else:
|
||||||
# Fallback if font_default is not found - this is a temporary measure.
|
logger.error("Suitable font not found on DisplayManager for 'Music N/A' message.")
|
||||||
# Ideally, DisplayManager should provide a reliable way to get a font.
|
self.display_manager.update_display() # Update with no arguments
|
||||||
logger.error("font_default not found on DisplayManager. Cannot display 'Music N/A' text properly.")
|
|
||||||
self.display_manager.update_display(canvas)
|
|
||||||
return
|
return
|
||||||
|
|
||||||
track_info = self.music_manager.get_current_display_info()
|
track_info = self.music_manager.get_current_display_info()
|
||||||
|
|
||||||
canvas = self.display_manager.matrix.CreateFrameCanvas()
|
if force_clear:
|
||||||
# Use font_default if it exists, otherwise, this will raise an AttributeError for font_default
|
self.display_manager.clear() # Clear the display_manager's internal image
|
||||||
font_small = getattr(self.display_manager, 'font_default', None)
|
|
||||||
|
# Use DisplayManager's drawing capabilities and its font
|
||||||
|
# Let's try to use 'small_font' if available, otherwise 'font'
|
||||||
|
font_small = getattr(self.display_manager, 'small_font', None)
|
||||||
if not font_small:
|
if not font_small:
|
||||||
# This is a critical issue if font_default doesn't exist, as text rendering will fail.
|
font_small = getattr(self.display_manager, 'font', None) # Fallback to the default 'font'
|
||||||
logger.error("font_default not found on DisplayManager. Music screen cannot be rendered.")
|
|
||||||
# Optionally, clear the canvas and update to show a blank screen or error message without font.
|
if not font_small:
|
||||||
if force_clear:
|
logger.error("Suitable font (small_font or font) not found on DisplayManager. Music screen cannot be rendered.")
|
||||||
self.display_manager.clear_screen()
|
self.display_manager.update_display() # Update to show cleared screen or previous state
|
||||||
# self.display_manager.draw_text(canvas, "FONT ERR", 5, 15, ???, (255,0,0)) # No font to use here
|
|
||||||
self.display_manager.update_display(canvas)
|
|
||||||
return
|
return
|
||||||
|
|
||||||
white = (255, 255, 255)
|
white = (255, 255, 255)
|
||||||
dim_white = (180, 180, 180)
|
dim_white = (180, 180, 180)
|
||||||
|
|
||||||
if force_clear:
|
# We are drawing directly on self.display_manager.image via self.display_manager.draw
|
||||||
self.display_manager.clear_screen()
|
draw_surface = self.display_manager.draw
|
||||||
|
display_width = self.display_manager.matrix.width # Get width for potential centering or wrapping
|
||||||
|
|
||||||
|
line_height = font_small.getbbox("A")[3] - font_small.getbbox("A")[1] + 3 #Approximate line height with padding
|
||||||
|
|
||||||
|
y_pos = 1 # Starting Y position
|
||||||
|
|
||||||
if track_info and track_info.get('is_playing'):
|
if track_info and track_info.get('is_playing'):
|
||||||
title = track_info.get('title', 'No Title')
|
title = track_info.get('title', 'No Title')
|
||||||
artist = track_info.get('artist', 'No Artist')
|
artist = track_info.get('artist', 'No Artist')
|
||||||
source = track_info.get('source', 'Music')
|
source = track_info.get('source', 'Music')
|
||||||
|
|
||||||
# Basic layout: Title, Artist, Source
|
# Line 1: Title
|
||||||
# Consider text length and potential scrolling for longer strings in future enhancements
|
# For now, simple draw. Add text wrapping/scrolling later if needed.
|
||||||
|
draw_surface.text((1, y_pos), title, font=font_small, fill=white)
|
||||||
|
y_pos += line_height
|
||||||
|
|
||||||
# Line 1: Title (Y=8, using 5x7 font which is 7px high)
|
# Line 2: Artist
|
||||||
self.display_manager.draw_text_line(canvas, title, 1, font_small, white, max_width=self.display_manager.width - 2)
|
draw_surface.text((1, y_pos), artist, font=font_small, fill=dim_white)
|
||||||
|
y_pos += line_height
|
||||||
|
|
||||||
# Line 2: Artist (Y=8+7+2 = 17)
|
# Line 3: Source
|
||||||
self.display_manager.draw_text_line(canvas, artist, 10, font_small, dim_white, max_width=self.display_manager.width - 2)
|
|
||||||
|
|
||||||
# Line 3: Source (Y=17+7+2 = 26)
|
|
||||||
source_text = f"via {source}"
|
source_text = f"via {source}"
|
||||||
self.display_manager.draw_text_line(canvas, source_text, 19, font_small, dim_white, max_width=self.display_manager.width - 2)
|
draw_surface.text((1, y_pos), source_text, font=font_small, fill=dim_white)
|
||||||
|
|
||||||
elif track_info and track_info.get('source') != 'None': # Music loaded but paused
|
elif track_info and track_info.get('source') != 'None': # Music loaded but paused
|
||||||
title = track_info.get('title', 'No Title')
|
title = track_info.get('title', 'No Title')
|
||||||
self.display_manager.draw_text_line(canvas, "Paused:", 1, font_small, white)
|
draw_surface.text((1, y_pos), "Paused:", font=font_small, fill=white)
|
||||||
self.display_manager.draw_text_line(canvas, title, 10, font_small, dim_white, max_width=self.display_manager.width -2)
|
y_pos += line_height
|
||||||
|
draw_surface.text((1, y_pos), title, font=font_small, fill=dim_white)
|
||||||
|
y_pos += line_height
|
||||||
source_text = f"({track_info.get('source')})"
|
source_text = f"({track_info.get('source')})"
|
||||||
self.display_manager.draw_text_line(canvas, source_text, 19, font_small, dim_white)
|
draw_surface.text((1, y_pos), source_text, font=font_small, fill=dim_white)
|
||||||
else: # Nothing playing or source is None
|
else: # Nothing playing or source is None
|
||||||
self.display_manager.draw_text_line(canvas, "Nothing Playing", 10, font_small, white)
|
# Center "Nothing Playing"
|
||||||
|
text_width = draw_surface.textlength("Nothing Playing", font=font_small)
|
||||||
|
x_pos = (display_width - text_width) // 2
|
||||||
|
draw_surface.text((x_pos, y_pos + line_height // 2), "Nothing Playing", font=font_small, fill=white)
|
||||||
|
|
||||||
self.display_manager.update_display(canvas)
|
self.display_manager.update_display() # Update with no arguments
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
"""Run the display controller, switching between displays."""
|
"""Run the display controller, switching between displays."""
|
||||||
|
|||||||
Reference in New Issue
Block a user