Fix UI, use DejaVuMono
This commit is contained in:
parent
16db9c6309
commit
01e10dbaee
Binary file not shown.
35
mpdlisten.py
35
mpdlisten.py
|
@ -15,7 +15,9 @@ import RPi.GPIO as GPIO
|
||||||
from luma.core.interface.serial import i2c
|
from luma.core.interface.serial import i2c
|
||||||
from luma.core.render import canvas
|
from luma.core.render import canvas
|
||||||
from luma.oled.device import ssd1306
|
from luma.oled.device import ssd1306
|
||||||
from PIL import Image, ImageDraw
|
from PIL import Image, ImageDraw, ImageFont
|
||||||
|
|
||||||
|
jfont = ImageFont.truetype('DejaVuSansMono.ttf', 10)
|
||||||
|
|
||||||
# MPD config
|
# MPD config
|
||||||
off_delay = 3
|
off_delay = 3
|
||||||
|
@ -50,10 +52,10 @@ btn_height = 10
|
||||||
menu_line_width = 1
|
menu_line_width = 1
|
||||||
menu_bar_y = device.height - btn_height - menu_line_width - 1
|
menu_bar_y = device.height - btn_height - menu_line_width - 1
|
||||||
ui_text_x = 4
|
ui_text_x = 4
|
||||||
ui_vol_width = 6
|
ui_vol_width = 18
|
||||||
ui_vol_y = 4
|
ui_vol_y = menu_bar_y - 14
|
||||||
ui_vol_x = device.width - ui_vol_width - 8
|
ui_vol_x = device.width - ui_vol_width
|
||||||
ui_vol_icon_coords = (ui_vol_x - 10, 4)
|
ui_vol_icon_coords = (ui_vol_x - 10, ui_vol_y+2)
|
||||||
ui_vol_icon_polygon = [0,3,3,3,8,0,8,8,3,5,0,5]
|
ui_vol_icon_polygon = [0,3,3,3,8,0,8,8,3,5,0,5]
|
||||||
play_icon = [0,0,8,4,0,8]
|
play_icon = [0,0,8,4,0,8]
|
||||||
# ~ play_icon_ = [0,0,8,4,0,8]
|
# ~ play_icon_ = [0,0,8,4,0,8]
|
||||||
|
@ -189,24 +191,24 @@ def update_display(device, currentsong:dict, status:dict, mode:str, cursor_pos:i
|
||||||
# Draw dynamic UI
|
# Draw dynamic UI
|
||||||
ui = static_ui.copy()
|
ui = static_ui.copy()
|
||||||
draw = ImageDraw.Draw(ui)
|
draw = ImageDraw.Draw(ui)
|
||||||
draw.text((ui_vol_x, ui_vol_y), status['volume'], fill="white")
|
|
||||||
if mode == 'playback':
|
if mode == 'playback':
|
||||||
if len(currentsong):
|
if len(currentsong):
|
||||||
draw.text((ui_text_x, 2), currentsong['artist'], fill="white")
|
draw.text((ui_text_x, 2), currentsong['artist'], fill="white", font=jfont)
|
||||||
draw.text((ui_text_x, 14), currentsong['title'], fill="white")
|
draw.text((ui_text_x, 14), currentsong['title'], fill="white", font=jfont)
|
||||||
draw.text((ui_text_x, 26), currentsong['album'], fill="white")
|
draw.text((ui_text_x, 26), currentsong['album'], fill="white", font=jfont)
|
||||||
if 'elapsed' in status:
|
if 'elapsed' in status:
|
||||||
draw.text((ui_text_x, 38), "{}/{}".format(sectomin(status['elapsed']), sectomin(status['duration'])), fill="white")
|
draw.text((ui_text_x, 38), "{}/{}".format(sectomin(status['elapsed']), sectomin(status['duration'])), fill="white", font=jfont)
|
||||||
elif mode == 'browse':
|
elif mode == 'browse':
|
||||||
draw.regular_polygon(bounding_circle=(ui_text_x + 2, 6, 4), n_sides=3, rotation=270, outline="white", fill="black")
|
draw.regular_polygon(bounding_circle=(ui_text_x + 2, 6, 4), n_sides=3, rotation=270, outline="white", fill="black")
|
||||||
if (type(ui_state['current_selection']) is list) and (len(ui_state['current_selection'])):
|
if (type(ui_state['current_selection']) is list) and (len(ui_state['current_selection'])):
|
||||||
draw.text((ui_text_x + 10, 1), ui_state['current_selection'][cursor_pos], fill="white")
|
draw.text((ui_text_x + 10, 1), ui_state['current_selection'][cursor_pos], fill="white", font=jfont)
|
||||||
if (len(ui_state['current_selection']) > 1) and (cursor_pos < len(ui_state['current_selection'])-1):
|
if (len(ui_state['current_selection']) > 1) and (cursor_pos < len(ui_state['current_selection'])-1):
|
||||||
draw.text((ui_text_x, 14), ui_state['current_selection'][cursor_pos+1], fill="white")
|
draw.text((ui_text_x, 14), ui_state['current_selection'][cursor_pos+1], fill="white", font=jfont)
|
||||||
if len(ui_state['current_selection']) > 2 and (cursor_pos < len(ui_state['current_selection'])-2):
|
if len(ui_state['current_selection']) > 2 and (cursor_pos < len(ui_state['current_selection'])-2):
|
||||||
draw.text((ui_text_x, 26), ui_state['current_selection'][cursor_pos+2], fill="white")
|
draw.text((ui_text_x, 26), ui_state['current_selection'][cursor_pos+2], fill="white", font=jfont)
|
||||||
else:
|
else:
|
||||||
draw.text((ui_text_x + 10, 1), ui_state['current_selection'], fill="white")
|
draw.text((ui_text_x + 10, 1), ui_state['current_selection'], fill="white", font=jfont)
|
||||||
|
draw.text((ui_vol_x, ui_vol_y), "{:02d}".format(int(status['volume'])), fill="white", font=jfont)
|
||||||
device.contrast(0)
|
device.contrast(0)
|
||||||
device.display(ui)
|
device.display(ui)
|
||||||
|
|
||||||
|
@ -257,10 +259,15 @@ def send_mpd_cmd(client, cmd:str, ui_state:dict):
|
||||||
if client.status()['state'] != 'stop':
|
if client.status()['state'] != 'stop':
|
||||||
client.next()
|
client.next()
|
||||||
elif cmd == 'toggle':
|
elif cmd == 'toggle':
|
||||||
|
# ~ global MODES
|
||||||
if client.status()['state'] in idle_states:
|
if client.status()['state'] in idle_states:
|
||||||
client.play()
|
client.play()
|
||||||
|
MODES['playback']['BTN_3']['ICON'] = apply_xy_offset(play_icon, MODES['playback']['BTN_3']['XY'])
|
||||||
|
static_ui = generate_static_ui('playback')
|
||||||
else:
|
else:
|
||||||
client.pause()
|
client.pause()
|
||||||
|
MODES['playback']['BTN_3']['ICON'] = apply_xy_offset(pause_icon, MODES['playback']['BTN_3']['XY'])
|
||||||
|
static_ui = generate_static_ui('playback')
|
||||||
elif cmd == 'stop':
|
elif cmd == 'stop':
|
||||||
client.stop()
|
client.stop()
|
||||||
elif cmd == 'down':
|
elif cmd == 'down':
|
||||||
|
|
Loading…
Reference in New Issue