first pass at adding some menu drawing functionality
This commit is contained in:
parent
be449fc957
commit
7d3632eda1
@ -68,6 +68,38 @@ class SoundslabDisplay:
|
||||
|
||||
return (voltage, capacity)
|
||||
|
||||
def updateMenu(self, menu_data=None):
|
||||
# always start with a transparent menu overlay image
|
||||
im_menu_overlay = Image.new("RGBA", self.screen_size, (0, 0, 0, 0))
|
||||
menu_overlay = ImageDraw.Draw(im_menu_overlay)
|
||||
if self.showMenu and menu_data is not None:
|
||||
# we have a menu to display
|
||||
#
|
||||
# menu_data is structured as a list of dicts describing the rows to be displayed:
|
||||
# [
|
||||
# { output: "UP_ARROW" },
|
||||
# { output: "Toggle repeat", selected: True },
|
||||
# { output: "Toggle shuffle" },
|
||||
# { output: "Show queue" },
|
||||
# { output: "DOWN_ARROW" }
|
||||
# ]
|
||||
|
||||
|
||||
# a translucent red background rectangle for the menu area itself
|
||||
menu_overlay.rectangle([(21,21), (self.screen_size[0] - 21,self.screen_size[1] - 21)], (200, 0, 0, 127)
|
||||
|
||||
offset_from_top = 21 # start at the 21st row of pixels to draw inside the outer overlay
|
||||
font = ImageFont.truetype(font='/usr/share/fonts/truetype/hack/HackRegular.ttf', size=14)
|
||||
for row in menu_data:
|
||||
if row.selected:
|
||||
menu_overlay.rectangle([(21, offset_from_top),(self.screen_size[0] - 21, offset_from_top + 40)], self.bg_color) # highlight background for selected menu item
|
||||
|
||||
output_size = menu_overlay.textsize(output) # get the size of the text to draw so we can center it in our rectangle for this row
|
||||
menu_overlay.text((21 + floor(output_size[0] / 2), offset_from_top + (40 - floor(output_size[1] / 2))), row.output, font=font, fill=self.fg_color if row.selected else self.bg_color) # draw output text in appropriate color
|
||||
offset_from_top += 40
|
||||
|
||||
# finally, set the current_menu image
|
||||
self.current_menu = im_menu_overlay.copy()
|
||||
|
||||
def updateOverlay(self):
|
||||
# initialize overlay
|
||||
|
@ -27,6 +27,9 @@ GPIO.setmode(GPIO.BCM)
|
||||
# with a "PULL UP", which weakly pulls the input signal to 3.3V.
|
||||
GPIO.setup(BUTTONS, GPIO.IN, pull_up_down=GPIO.PUD_UP)
|
||||
|
||||
# a temporary place to store menu state
|
||||
show_menu = False
|
||||
|
||||
# some button handlers
|
||||
def NE():
|
||||
# play/pause toggle
|
||||
@ -57,7 +60,11 @@ def SW():
|
||||
|
||||
def NW():
|
||||
# open menu
|
||||
pass
|
||||
print("toggling menu")
|
||||
if show_menu is True:
|
||||
show_menu = False
|
||||
else:
|
||||
show_menu = True
|
||||
|
||||
def SE():
|
||||
# next track
|
||||
@ -127,6 +134,17 @@ for pin in BUTTONS:
|
||||
GPIO.add_event_detect(pin, GPIO.FALLING, handle_button, bouncetime=100)
|
||||
|
||||
while True:
|
||||
if show_menu is True:
|
||||
# test menu
|
||||
display.updateMenu(
|
||||
[
|
||||
{output: "▲"},
|
||||
{output: "Toggle repeat", selected=True},
|
||||
{output: "Toggle shuffle"},
|
||||
{output: "View queue"},
|
||||
{output: "▼"}
|
||||
]
|
||||
)
|
||||
# test album art
|
||||
display.updateAlbumArt()
|
||||
# test setting up the overlay
|
||||
|
Loading…
Reference in New Issue
Block a user