From 59cf00c9fa682a0ed4297dddd3e4a69adfb13dcd Mon Sep 17 00:00:00 2001 From: DJ Sundog Date: Sun, 19 Jul 2020 17:33:41 -0700 Subject: [PATCH] first pass at python module for handling display updates --- SoundslabDisplay.py | 60 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 SoundslabDisplay.py diff --git a/SoundslabDisplay.py b/SoundslabDisplay.py new file mode 100644 index 0000000..17d7e32 --- /dev/null +++ b/SoundslabDisplay.py @@ -0,0 +1,60 @@ +import time +from PIL import Image, ImageFont, ImageDraw +from ST7789 import ST7789 +from glob import glob +import struct +import smbus +import sys + +class SoundslabDisplay: + def __init__(self): + self.screen_size = 240, 240 + self.spi_speed_mhz = 80 + self.st7789 = ST7789( + rotation=90, + port=0, + cs=1, + dc=9, + backlight=13, + spi_speed_hz=self.spi_speed_mhz * 1000 * 1000 + ) + self.current_background = Image.new("RGBA", self.screen_size, (0, 0, 255, 255)) + self.current_overlay = Image.new("RGBA", self.screen_size, (0, 0, 0, 0)) + self.current_menu = Image.new("RGBA", self.screen_size, (0, 0, 0, 0)) + self.fg_color = (255, 255, 255, 211) + self.bg_color = (0, 0, 0, 78) + + def updateOverlay(self, current_track_number, total_track_number, battery_level_percent, track_progress_percent): + # initialize overlay + im_overlay = Image.new("RGBA", self.screen_size, (0, 0, 0, 0)) + font = ImageFont.truetype(font='/usr/share/fonts/truetype/hack/Hack-Bold.ttf', size=18) + overlay = ImageDraw.Draw(im_overlay) + + # draw four rects on edges of screen_size + overlay.rectangle([(0, 0), (self.screen_size[0], 20)], self.bg_color) # top bar + overlay.rectangle([(0, self.screen_size[1] - 20), (self.screen_size[0], self.screen_size[1])], self.bg_color) # bottom bar + overlay.rectangle([(0, 20), (20, self.screen_size[1] - 20)], self.bg_color) # left bar + overlay.rectangle([(self.screen_size[0] - 20, 20), (self.screen_size[0], self.screen_size[1] - 20)], self.bg_color) # right bar + + # add track # / total # + track_and_queue = str(current_track_number) + " of " + str(total_track_number) + overlay.text((10, 0), track_and_queue, font=font, fill=self.fg_color) + + # add battery level + battery_display = '{:02.2f}'.format(battery_level_percent) + '%' + overlay.text((self.screen_size[0] - 70, 0), battery_display, font=font, fill=self.fg_color) + + # add progress meter + overlay.rectangle([(10, self.screen_size[1] - 15), (self.screen_size[0] - 10, self.screen_size[1] - 5)], fill=(0, 0, 0, 0), outline=self.fg_color, width=1) + overlay.rectangle([(10, self.screen_size[1] - 15), (int((self.screen_size[0] - 20) * (track_progress_percent / 100)) + 10, self.screen_size[1] - 5)], fill=self.fg_color, outline=self.fg_color, width=1) + + self.current_overlay = im_overlay.copy() + + def updateAlbumArt(self, cover_image_file): + im = Image.open(cover_image_file).convert("RGBA") + image = im.resize(self.screen_size) + self.current_background = image.copy() + + def updateDisplay(self): + tempoutput = Image.alpha_composite(self.current_background, self.current_overlay) + self.st7789.display(Image.alpha_composite(tempoutput, self.current_menu))