diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 4988888..06eafef 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,3 +1,6 @@ +0.7.0 + - add draw_text function + - add font 8x8 as default 0.6.0 - tests - fix area drawing diff --git a/gfxlcd/abstract/chip.py b/gfxlcd/abstract/chip.py index 699dd38..9ddda43 100644 --- a/gfxlcd/abstract/chip.py +++ b/gfxlcd/abstract/chip.py @@ -1,5 +1,6 @@ """Chip interface""" import abc +from gfxlcd.font.font8x8 import Font8x8 class Chip(metaclass=abc.ABCMeta): @@ -11,6 +12,7 @@ class Chip(metaclass=abc.ABCMeta): self._height = height self.driver = driver self.options['auto_flush'] = auto_flush + self.options['font'] = Font8x8() @property def width(self): @@ -72,6 +74,16 @@ class Chip(metaclass=abc.ABCMeta): """set auto_flush""" self.options['auto_flush'] = bool(value) + @property + def font(self): + """get current font""" + return self.options['font'] + + @font.setter + def font(self, font): + """set ttf font""" + self.options['font'] = font + @abc.abstractmethod def init(self): """init a chipset""" @@ -111,3 +123,8 @@ class Chip(metaclass=abc.ABCMeta): def draw_image(self, pos_x, pos_y, image): """draw a PIL image""" pass + + @abc.abstractmethod + def draw_text(self, pos_x, pos_y, text): + """draw a text""" + pass diff --git a/gfxlcd/abstract/font.py b/gfxlcd/abstract/font.py new file mode 100644 index 0000000..2501ba4 --- /dev/null +++ b/gfxlcd/abstract/font.py @@ -0,0 +1,19 @@ +"""Font abstract""" +import abc + + +class Font(metaclass=abc.ABCMeta): + font = [] # Dictionary with hex that describe each char + size = (0, 0) + + def __init__(self): + pass + + def get(self, letter): + """return array with letter""" + return self.font[ord(letter)] + + @property + def size(self): + """get font size""" + return self.size diff --git a/gfxlcd/demos/ili9325_text.py b/gfxlcd/demos/ili9325_text.py new file mode 100644 index 0000000..9c2c6d3 --- /dev/null +++ b/gfxlcd/demos/ili9325_text.py @@ -0,0 +1,24 @@ +import RPi.GPIO +import sys +from PIL import Image +sys.path.append("../../") +from gfxlcd.driver.ili9325.gpio import GPIO as ILIGPIO +from gfxlcd.driver.ili9325.ili9325 import ILI9325 +RPi.GPIO.setmode(RPi.GPIO.BCM) + +drv = ILIGPIO() +drv.pins['LED'] = 6 +drv.pins['CS'] = 18 +lcd = ILI9325(240, 320, drv) +lcd.rotation = 0 +lcd.init() +lcd.auto_flush = False + +lcd.color = (255, 255, 255) +lcd.draw_text(25, 1, "Star Wars") +lcd.draw_text(30, 10, "Death Star") + +image_file = Image.open("assets/20x20.png") +lcd.transparency_color = (0, 0, 0) + +lcd.draw_image(0, 0, image_file) diff --git a/gfxlcd/demos/nju_3.py b/gfxlcd/demos/nju_3.py index 38762bd..8eb951f 100644 --- a/gfxlcd/demos/nju_3.py +++ b/gfxlcd/demos/nju_3.py @@ -1,5 +1,6 @@ import RPi.GPIO import sys +from PIL import Image sys.path.append("../../") from gfxlcd.driver.nju6450.gpio import GPIO from gfxlcd.driver.nju6450.nju6450 import NJU6450 @@ -21,6 +22,11 @@ lcd.draw_line(x, y-3, x-3, y+2) lcd.draw_line(x, y-3, x+3, y+2) lcd.draw_arc(x, y, 3, 45, 135) -lcd.fill_rect(0, 0, 5, 10) +# lcd.fill_rect(0, 0, 5, 10) + +image_file = Image.open("assets/20x20.png") +lcd.threshold = 0 + +lcd.draw_image(0, 0, image_file) lcd.flush(True) diff --git a/gfxlcd/demos/nju_text.py b/gfxlcd/demos/nju_text.py new file mode 100644 index 0000000..3e1b206 --- /dev/null +++ b/gfxlcd/demos/nju_text.py @@ -0,0 +1,22 @@ +import RPi.GPIO +import sys +from PIL import Image +sys.path.append("../../") +from gfxlcd.driver.nju6450.gpio import GPIO +from gfxlcd.driver.nju6450.nju6450 import NJU6450 +RPi.GPIO.setmode(RPi.GPIO.BCM) + +lcd = NJU6450(122, 32, GPIO()) +lcd.rotation = 0 +lcd.init() +lcd.auto_flush = False + +lcd.draw_text(25, 1, "Star Wars") +lcd.draw_text(30, 10, "Death Star") + +image_file = Image.open("assets/20x20.png") +lcd.threshold = 0 + +lcd.draw_image(0, 0, image_file) + +lcd.flush(True) diff --git a/gfxlcd/demos/ssd_3.py b/gfxlcd/demos/ssd_3.py index 8fbb777..04ac236 100644 --- a/gfxlcd/demos/ssd_3.py +++ b/gfxlcd/demos/ssd_3.py @@ -1,13 +1,13 @@ import RPi.GPIO import sys -import random +from PIL import Image sys.path.append("../../") from gfxlcd.driver.ssd1306.spi import SPI from gfxlcd.driver.ssd1306.ssd1306 import SSD1306 RPi.GPIO.setmode(RPi.GPIO.BCM) lcd_oled = SSD1306(128, 64, SPI()) -lcd_oled.rotation = 90 +lcd_oled.rotation = 270 lcd_oled.init() lcd_oled.auto_flush = False @@ -20,6 +20,10 @@ lcd_oled.draw_line(x, y-5, x-4, y+6) lcd_oled.draw_line(x, y-5, x+4, y+6) lcd_oled.draw_arc(x, y+3, 5, 45, 135) -lcd_oled.fill_rect(0, 0, 10, 10) +# lcd_oled.fill_rect(0, 0, 10, 10) +image_file = Image.open("assets/20x20.png") +lcd_oled.threshold = 0 + +lcd_oled.draw_image(0, 0, image_file) lcd_oled.flush(True) diff --git a/gfxlcd/demos/ssd_text.py b/gfxlcd/demos/ssd_text.py new file mode 100644 index 0000000..8926bec --- /dev/null +++ b/gfxlcd/demos/ssd_text.py @@ -0,0 +1,22 @@ +import RPi.GPIO +import sys +from PIL import Image +sys.path.append("../../") +from gfxlcd.driver.ssd1306.spi import SPI +from gfxlcd.driver.ssd1306.ssd1306 import SSD1306 +RPi.GPIO.setmode(RPi.GPIO.BCM) + +lcd = SSD1306(128, 64, SPI()) +lcd.rotation = 0 +lcd.init() +lcd.auto_flush = False + +lcd.draw_text(25, 1, "Star Wars") +lcd.draw_text(30, 10, "Death Star") + +image_file = Image.open("assets/20x20.png") +lcd.threshold = 0 + +lcd.draw_image(0, 0, image_file) + +lcd.flush(True) diff --git a/gfxlcd/drawing/pixel.py b/gfxlcd/drawing/pixel.py index 7157f21..bb70a9e 100644 --- a/gfxlcd/drawing/pixel.py +++ b/gfxlcd/drawing/pixel.py @@ -136,3 +136,22 @@ class Pixel(object): appendix = (appendix + 1) * -1 return appendix + + def draw_text(self, pos_x, pos_y, text): + """draw a text""" + font = self.options['font'] + idx = 0 + for letter in text: + self._draw_letter(pos_x + idx, pos_y, letter) + idx += font.size[0] + + def _draw_letter(self, pos_x, pos_y, letter): + """draw a letter""" + font = self.options['font'] + bits = font.size[0] + for row, data in enumerate(font.get(letter)): + for bit in range(bits): + if data & 0x01: + self.draw_pixel(pos_x + bit, pos_y + row) + data >>= 1 + diff --git a/gfxlcd/driver/nju6450/nju6450.py b/gfxlcd/driver/nju6450/nju6450.py index 5b66a6b..ad6a05f 100644 --- a/gfxlcd/driver/nju6450/nju6450.py +++ b/gfxlcd/driver/nju6450/nju6450.py @@ -3,6 +3,7 @@ from gfxlcd.drawing.page import Page from gfxlcd.abstract.chip import Chip + class NJU6450(Page, Chip): """Class for an LCD with NJU6450 chip""" def __init__(self, width, height, driver, auto_flush=True): diff --git a/gfxlcd/driver/ssd1306/ssd1306.py b/gfxlcd/driver/ssd1306/ssd1306.py index d756e7e..edb11b4 100644 --- a/gfxlcd/driver/ssd1306/ssd1306.py +++ b/gfxlcd/driver/ssd1306/ssd1306.py @@ -32,7 +32,7 @@ class SSD1306(Page, Chip): def init(self): """inits a device""" self.driver.init() - Page.init(self)#, self.rotate) + Page.init(self) Chip.init(self) self.driver.reset() self.driver.cmd(0xae) # turn off panel diff --git a/gfxlcd/font/__init__.py b/gfxlcd/font/__init__.py new file mode 100644 index 0000000..7c2d50b --- /dev/null +++ b/gfxlcd/font/__init__.py @@ -0,0 +1 @@ +__author__ = 'kosci' diff --git a/gfxlcd/font/font8x8.py b/gfxlcd/font/font8x8.py new file mode 100644 index 0000000..a269c01 --- /dev/null +++ b/gfxlcd/font/font8x8.py @@ -0,0 +1,148 @@ +from gfxlcd.abstract.font import Font + + +class Font8x8(Font): + """Font 8x8""" + size = (8, 8) + font = [ + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0000 (nul) + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0001 + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0002 + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0003 + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0004 + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0005 + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0006 + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0007 + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0008 + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0009 + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+000A + + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+000B + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+000C + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+000D + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+000E + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+000F + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0010 + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0011 + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0012 + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0013 + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0014 + + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0015 + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0016 + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0017 + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0018 + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0019 + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+001A + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+001B + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+001C + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+001D + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+001E + + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+001F + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0020 (space) + [0x18, 0x3C, 0x3C, 0x18, 0x18, 0x00, 0x18, 0x00], # U+0021 (!) + [0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0022 (") + [0x36, 0x36, 0x7F, 0x36, 0x7F, 0x36, 0x36, 0x00], # U+0023 (#) + [0x0C, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x0C, 0x00], # U+0024 ($) + [0x00, 0x63, 0x33, 0x18, 0x0C, 0x66, 0x63, 0x00], # U+0025 (%) + [0x1C, 0x36, 0x1C, 0x6E, 0x3B, 0x33, 0x6E, 0x00], # U+0026 (&) + [0x06, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0027 (') + [0x18, 0x0C, 0x06, 0x06, 0x06, 0x0C, 0x18, 0x00], # U+0028 (() + + [0x06, 0x0C, 0x18, 0x18, 0x18, 0x0C, 0x06, 0x00], # U+0029 ()) + [0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00], # U+002A (*) + [0x00, 0x0C, 0x0C, 0x3F, 0x0C, 0x0C, 0x00, 0x00], # U+002B (+) + [0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x06], # U+002C (,) + [0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00], # U+002D (-) + [0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00], # U+002E (.) + [0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x00], # U+002F (/) + [0x3E, 0x63, 0x73, 0x7B, 0x6F, 0x67, 0x3E, 0x00], # U+0030 (0) + [0x0C, 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x3F, 0x00], # U+0031 (1) + [0x1E, 0x33, 0x30, 0x1C, 0x06, 0x33, 0x3F, 0x00], # U+0032 (2) + + [0x1E, 0x33, 0x30, 0x1C, 0x30, 0x33, 0x1E, 0x00], # U+0033 (3) + [0x38, 0x3C, 0x36, 0x33, 0x7F, 0x30, 0x78, 0x00], # U+0034 (4) + [0x3F, 0x03, 0x1F, 0x30, 0x30, 0x33, 0x1E, 0x00], # U+0035 (5) + [0x1C, 0x06, 0x03, 0x1F, 0x33, 0x33, 0x1E, 0x00], # U+0036 (6) + [0x3F, 0x33, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x00], # U+0037 (7) + [0x1E, 0x33, 0x33, 0x1E, 0x33, 0x33, 0x1E, 0x00], # U+0038 (8) + [0x1E, 0x33, 0x33, 0x3E, 0x30, 0x18, 0x0E, 0x00], # U+0039 (9) + [0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00], # U+003A (:) + [0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x06], # U+003B (# ) + [0x18, 0x0C, 0x06, 0x03, 0x06, 0x0C, 0x18, 0x00], # U+003C (<) + + [0x00, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x00], # U+003D (=) + [0x06, 0x0C, 0x18, 0x30, 0x18, 0x0C, 0x06, 0x00], # U+003E (>) + [0x1E, 0x33, 0x30, 0x18, 0x0C, 0x00, 0x0C, 0x00], # U+003F (?) + [0x3E, 0x63, 0x7B, 0x7B, 0x7B, 0x03, 0x1E, 0x00], # U+0040 (@) + [0x0C, 0x1E, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x00], # U+0041 (A) + [0x3F, 0x66, 0x66, 0x3E, 0x66, 0x66, 0x3F, 0x00], # U+0042 (B) + [0x3C, 0x66, 0x03, 0x03, 0x03, 0x66, 0x3C, 0x00], # U+0043 (C) + [0x1F, 0x36, 0x66, 0x66, 0x66, 0x36, 0x1F, 0x00], # U+0044 (D) + [0x7F, 0x46, 0x16, 0x1E, 0x16, 0x46, 0x7F, 0x00], # U+0045 (E) + [0x7F, 0x46, 0x16, 0x1E, 0x16, 0x06, 0x0F, 0x00], # U+0046 (F) + + [0x3C, 0x66, 0x03, 0x03, 0x73, 0x66, 0x7C, 0x00], # U+0047 (G) + [0x33, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x33, 0x00], # U+0048 (H) + [0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00], # U+0049 (I) + [0x78, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E, 0x00], # U+004A (J) + [0x67, 0x66, 0x36, 0x1E, 0x36, 0x66, 0x67, 0x00], # U+004B (K) + [0x0F, 0x06, 0x06, 0x06, 0x46, 0x66, 0x7F, 0x00], # U+004C (L) + [0x63, 0x77, 0x7F, 0x7F, 0x6B, 0x63, 0x63, 0x00], # U+004D (M) + [0x63, 0x67, 0x6F, 0x7B, 0x73, 0x63, 0x63, 0x00], # U+004E (N) + [0x1C, 0x36, 0x63, 0x63, 0x63, 0x36, 0x1C, 0x00], # U+004F (O) + [0x3F, 0x66, 0x66, 0x3E, 0x06, 0x06, 0x0F, 0x00], # U+0050 (P) + + [0x1E, 0x33, 0x33, 0x33, 0x3B, 0x1E, 0x38, 0x00], # U+0051 (Q) + [0x3F, 0x66, 0x66, 0x3E, 0x36, 0x66, 0x67, 0x00], # U+0052 (R) + [0x1E, 0x33, 0x07, 0x0E, 0x38, 0x33, 0x1E, 0x00], # U+0053 (S) + [0x3F, 0x2D, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00], # U+0054 (T) + [0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x3F, 0x00], # U+0055 (U) + [0x33, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00], # U+0056 (V) + [0x63, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63, 0x00], # U+0057 (W) + [0x63, 0x63, 0x36, 0x1C, 0x1C, 0x36, 0x63, 0x00], # U+0058 (X) + [0x33, 0x33, 0x33, 0x1E, 0x0C, 0x0C, 0x1E, 0x00], # U+0059 (Y) + [0x7F, 0x63, 0x31, 0x18, 0x4C, 0x66, 0x7F, 0x00], # U+005A (Z) + + [0x1E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x1E, 0x00], # U+005B ([) + [0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x40, 0x00], # U+005C (\) + [0x1E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1E, 0x00], # U+005D (]) + [0x08, 0x1C, 0x36, 0x63, 0x00, 0x00, 0x00, 0x00], # U+005E (^) + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF], # U+005F (_) + [0x0C, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0060 (`) + [0x00, 0x00, 0x1E, 0x30, 0x3E, 0x33, 0x6E, 0x00], # U+0061 (a) + [0x07, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x3B, 0x00], # U+0062 (b) + [0x00, 0x00, 0x1E, 0x33, 0x03, 0x33, 0x1E, 0x00], # U+0063 (c) + [0x38, 0x30, 0x30, 0x3e, 0x33, 0x33, 0x6E, 0x00], # U+0064 (d) + [0x00, 0x00, 0x1E, 0x33, 0x3f, 0x03, 0x1E, 0x00], # U+0065 (e) + + [0x1C, 0x36, 0x06, 0x0f, 0x06, 0x06, 0x0F, 0x00], # U+0066 (f) + [0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x1F], # U+0067 (g) + [0x07, 0x06, 0x36, 0x6E, 0x66, 0x66, 0x67, 0x00], # U+0068 (h) + [0x0C, 0x00, 0x0E, 0x0C, 0x0C, 0x0C, 0x1E, 0x00], # U+0069 (i) + [0x30, 0x00, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E], # U+006A (j) + [0x07, 0x06, 0x66, 0x36, 0x1E, 0x36, 0x67, 0x00], # U+006B (k) + [0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00], # U+006C (l) + [0x00, 0x00, 0x33, 0x7F, 0x7F, 0x6B, 0x63, 0x00], # U+006D (m) + [0x00, 0x00, 0x1F, 0x33, 0x33, 0x33, 0x33, 0x00], # U+006E (n) + [0x00, 0x00, 0x1E, 0x33, 0x33, 0x33, 0x1E, 0x00], # U+006F (o) + + [0x00, 0x00, 0x3B, 0x66, 0x66, 0x3E, 0x06, 0x0F], # U+0070 (p) + [0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x78], # U+0071 (q) + [0x00, 0x00, 0x3B, 0x6E, 0x66, 0x06, 0x0F, 0x00], # U+0072 (r) + [0x00, 0x00, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x00], # U+0073 (s) + [0x08, 0x0C, 0x3E, 0x0C, 0x0C, 0x2C, 0x18, 0x00], # U+0074 (t) + [0x00, 0x00, 0x33, 0x33, 0x33, 0x33, 0x6E, 0x00], # U+0075 (u) + [0x00, 0x00, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00], # U+0076 (v) + [0x00, 0x00, 0x63, 0x6B, 0x7F, 0x7F, 0x36, 0x00], # U+0077 (w) + [0x00, 0x00, 0x63, 0x36, 0x1C, 0x36, 0x63, 0x00], # U+0078 (x) + [0x00, 0x00, 0x33, 0x33, 0x33, 0x3E, 0x30, 0x1F], # U+0079 (y) + [0x00, 0x00, 0x3F, 0x19, 0x0C, 0x26, 0x3F, 0x00], # U+007A (z) + + [0x38, 0x0C, 0x0C, 0x07, 0x0C, 0x0C, 0x38, 0x00], # U+007B ([) + [0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00], # U+007C (|) + [0x07, 0x0C, 0x0C, 0x38, 0x0C, 0x0C, 0x07, 0x00], # U+007D (]) + [0x6E, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+007E (~) + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00] # U+007F + ] diff --git a/readme.md b/readme.md index 9b1c7e1..c575843 100644 --- a/readme.md +++ b/readme.md @@ -13,7 +13,7 @@ Supported: And for touch panels: - ad7843 via SPI, uses irq or not -- ad7866/xpt2046 +- ad7846/xpt2046 On NJU and SSD uses buffer to keep current content as help for page operations. @@ -131,6 +131,8 @@ fill_rect(x1, y1, x2, y2) draw_image(x, y, PIL.Image) +draw_text(x, y, text) + Colours === lcd.color = (r, g, b) @@ -141,6 +143,15 @@ lcd.threshold = 255 - for images a threshold between black and white (on monochr lcd.transparency_color = [110, 57] #110 - color(s) that are skipped during drawing an image +Fonts +=== +Font class implements Font abstract and is a class that has a dictionary with each char: + + (..) + [0x3C, 0x66, 0x03, 0x03, 0x73, 0x66, 0x7C, 0x00], # U+0047 (G) + (..) + +There is one font for now, 8x8 and named **Font8x8** and is used by default. Touch panels ===