summaryrefslogtreecommitdiff
path: root/wasp/draw565.py
diff options
context:
space:
mode:
authorDaniel Thompson <daniel@redfelineninja.org.uk>2020-02-23 20:52:09 (GMT)
committerDaniel Thompson <daniel@redfelineninja.org.uk>2020-02-23 20:52:09 (GMT)
commit7fc4592383cf8b1268cbd92bf43e0d41a651ad78 (patch)
tree6d4661b74f6ba3db8eaa7c44ac3e86e0034f72c2 /wasp/draw565.py
parentc3d4ddafbca4b2a4e341b3bcfe42ac4ab73e7146 (diff)
wasp: draw565: Add some docstrings
Diffstat (limited to 'wasp/draw565.py')
-rw-r--r--wasp/draw565.py47
1 files changed, 32 insertions, 15 deletions
diff --git a/wasp/draw565.py b/wasp/draw565.py
index 4c5f25f..a94b812 100644
--- a/wasp/draw565.py
+++ b/wasp/draw565.py
@@ -2,7 +2,7 @@ import fonts.sans24
import micropython
@micropython.viper
-def bitblit(bitbuf, pixels, bgfg: int, count: int):
+def _bitblit(bitbuf, pixels, bgfg: int, count: int):
mv = ptr8(bitbuf)
px = ptr8(pixels)
@@ -29,7 +29,7 @@ def bitblit(bitbuf, pixels, bgfg: int, count: int):
bitselect = 0x80
pxp += 1
-def bounding_box(s, font):
+def _bounding_box(s, font):
w = 0
for ch in s:
(_, h, wc) = font.get_ch(ch)
@@ -37,37 +37,63 @@ def bounding_box(s, font):
return (w, h)
-def draw_glyph(display, glyph, x, y, bgfg):
+def _draw_glyph(display, glyph, x, y, bgfg):
(px, h, w) = glyph
buf = memoryview(display.linebuffer)[0:2*(w+1)]
bytes_per_row = (w + 7) // 8
for row in range(h):
- bitblit(buf, px[row*bytes_per_row:], bgfg, w)
+ _bitblit(buf, px[row*bytes_per_row:], bgfg, w)
buf[2*w] = 0
buf[2*w + 1] = 0
display.rawblit(buf, x, y+row, w+1, 1)
class Draw565(object):
+ """Drawing library for RGB565 displays.
+
+ A full framebufer is not required although the library will
+ 'borrow' a line buffer from the underlying display driver.
+ """
+
def __init__(self, display):
+ """Initialise the library.
+
+ Defaults to white-on-black for monochrome drawing operations
+ and 24 pt Sans Serif text.
+ """
self._display = display
self.set_color(0xffff)
self.set_font(fonts.sans24)
def set_color(self, color, bg=0):
+ """Set the foreground (color) and background (bg) color.
+
+ The supplied color will be used for all monochrome drawing operations.
+ If no background color is provided then the background will be set
+ to black.
+ """
self._bgfg = (bg << 16) + color
def set_font(self, font):
+ """Set the font used for rendering text."""
self._font = font
def string(self, s, x, y, width=None):
+ """Draw a string at the supplied position.
+
+ If no width is provided then the text will be left justified,
+ otherwise the text will be centered within the provided width and,
+ importantly, the remaining width will be filled with the background
+ color (to ensure that if we update one string with a narrower one
+ there is no need to "undraw" it)
+ """
display = self._display
bgfg = self._bgfg
font = self._font
if width:
- (w, h) = bounding_box(s, font)
+ (w, h) = _bounding_box(s, font)
leftpad = (width - w) // 2
rightpad = width - w - leftpad
display.fill(0, x, y, leftpad, h)
@@ -75,17 +101,8 @@ class Draw565(object):
for ch in s:
glyph = font.get_ch(ch)
- draw_glyph(display, glyph, x, y, bgfg)
+ _draw_glyph(display, glyph, x, y, bgfg)
x += glyph[2] + 1
if width:
display.fill(0, x, y, rightpad, h)
-
-#import watch
-#draw = Draw(watch.display)
-#
-#def test():
-# watch.display.poweron()
-# watch.backlight.set(2)
-#
-# draw.string('10-Jan-2020', 0, 24, width=240)