from typing import List from PIL import Image, ImageDraw, ImageFont from .screen import Screen class Waveshare_233_SSD1305(Screen): def __init__(self): from drive import SSD1305 self.type = "Waveshare 2.33 SSD1305 OLED" self.supports_custom_fonts = True self.ssd1305 = SSD1305.SSD1305() self.ssd1305.Init() self.width = self.ssd1305.width self.height = self.ssd1305.height self.image = Image.new('1', (self.width, self.height)) # Create new image with 1 bit colour self.draw = ImageDraw.Draw(self.image) def setDefaultFont(self): ImageFont.load_default() def setFont(self, font, size): self.font = font self.font_size = size ImageFont.truetype(font, size) def clearBuffer(self): self.draw.rectangle((0, 0, self.width, self.height), outline=0, fill=0) def displayOnScreen(self): self.ssd1305.getbuffer(self.image) self.ssd1305.ShowImage() def displayLines(self, lines: List[str]): # displays text on the screen, the line that is first in the list is displayed on the top y = 0 x = 0 for i, line in lines: self.draw.text((x, y+(i*self.font_size)), line, font=self.font, fill=255) self.displayOnScreen() def clearScreen(self): # Used by parent class Screen buffer = Image.new('1', (self.width, self.height)) draw = ImageDraw.Draw(self.image) # black rectangle to clear screen, without clearing buffer draw.rectangle((0, 0, self.width, self.height), outline=0, fill=0) self.ssd1305.getbuffer(buffer) self.ssd1305.ShowImage()