diff --git a/examples/example_fonts/ubuntu16italic.py b/examples/example_fonts/ubuntu16italic.py new file mode 100644 index 0000000..26802c5 --- /dev/null +++ b/examples/example_fonts/ubuntu16italic.py @@ -0,0 +1,317 @@ +# Code generated by modified font_to_py.py. +# Font: Ubuntu-Italic.ttf Char set: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~£¬°Ωαβγδθλμπωϕ +# Cmd: ./font_to_py.py -k extended Ubuntu-Italic.ttf 16 ubuntu16italic.py +version = '1' + +height = const(16) + +baseline = const(13) + +max_width = const(15) + +hmap = const(True) + +reverse = const(False) + +monospaced = const(False) + +min_ch = const(32) + +max_ch = const(969) + +_font =\ +b'\x08\x00\x00\x0e\x11\x01\x01\x02\x04\x08\x08\x00\x00\x10\x10\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x05\x00\x00\x00\x08\x10\x10\x10\x10\x20\x20\x00\x00\x40\x40\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x04\x80\x05\x00'\ +b'\x09\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x0b\x00\x00\x00\x00\x00\x01\x20\x02\x40\x02\x40\x1f\xe0\x04\x80'\ +b'\x09\x80\x09\x00\x3f\xc0\x12\x00\x12\x00\x24\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x02\x00\x02\x00\x0f\x00'\ +b'\x10\x80\x10\x00\x10\x00\x08\x00\x06\x00\x01\x00\x01\x00\x01\x00'\ +b'\x41\x00\x3e\x00\x08\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x0d\x00\x00\x00\x00\x00\x06\x08\x09\x10\x11\x20\x11\x40\x12\x80'\ +b'\x0d\xb0\x01\x48\x02\x88\x04\x88\x08\x90\x10\x60\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x0e\x00\x11\x00'\ +b'\x11\x00\x11\x00\x12\x00\x0c\x00\x34\x20\x46\x40\x43\x80\x41\x00'\ +b'\x41\x80\x3e\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x06\x00\x00\x04\x04\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x02\x04\x08\x08\x10\x10'\ +b'\x10\x20\x20\x20\x20\x20\x20\x20\x20\x10\x00\x00\x00\x00\x00\x00'\ +b'\x06\x00\x08\x08\x04\x04\x04\x04\x04\x04\x04\x08\x08\x10\x10\x20'\ +b'\x40\x80\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x04\x00'\ +b'\x04\x00\x35\x80\x3f\x80\x0a\x00\x1b\x00\x11\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x02\x00'\ +b'\x04\x00\x3f\x80\x04\x00\x08\x00\x08\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x20\x20\x40\x40\x80\x00\x00\x00\x00\x00\x00'\ +b'\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x20\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x0a\x00\x00\x40\x00\x80\x00\x80\x01\x00\x02\x00\x02\x00\x04\x00'\ +b'\x04\x00\x08\x00\x08\x00\x10\x00\x10\x00\x20\x00\x40\x00\x40\x00'\ +b'\x80\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x07\x00'\ +b'\x08\x80\x10\x80\x10\x80\x20\x80\x20\x80\x20\x80\x21\x00\x21\x00'\ +b'\x22\x00\x1c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x09\x00\x00\x00\x00\x00\x00\x80\x07\x80\x09\x00\x01\x00\x01\x00'\ +b'\x01\x00\x02\x00\x02\x00\x02\x00\x04\x00\x04\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x0f\x00'\ +b'\x10\x80\x00\x80\x00\x80\x01\x00\x02\x00\x0c\x00\x10\x00\x20\x00'\ +b'\x40\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x0a\x00\x00\x00\x00\x00\x07\x80\x08\x40\x00\x40\x00\x40\x00\x80'\ +b'\x07\x00\x01\x00\x00\x80\x00\x80\x21\x00\x1e\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x80'\ +b'\x01\x80\x02\x80\x04\x80\x09\x00\x11\x00\x21\x00\x7f\x80\x01\x00'\ +b'\x02\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x0a\x00\x00\x00\x00\x00\x03\xc0\x02\x00\x04\x00\x04\x00\x0e\x00'\ +b'\x01\x00\x00\x80\x00\x80\x00\x80\x21\x00\x1e\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x01\xc0'\ +b'\x06\x00\x08\x00\x10\x00\x1f\x00\x30\x80\x20\x80\x20\x80\x20\x80'\ +b'\x21\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x0b\x00\x00\x00\x00\x00\x1f\xe0\x00\x40\x00\x80\x01\x00\x02\x00'\ +b'\x02\x00\x04\x00\x08\x00\x08\x00\x10\x00\x10\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x03\x80'\ +b'\x04\x40\x08\x40\x08\x40\x04\x80\x0f\x00\x11\x00\x20\x80\x20\x80'\ +b'\x21\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x0a\x00\x00\x00\x00\x00\x07\x80\x08\x40\x10\x40\x10\x40\x10\x40'\ +b'\x10\xc0\x0f\x40\x00\x80\x01\x00\x06\x00\x38\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x08'\ +b'\x10\x00\x00\x00\x00\x20\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x05\x00\x00\x00\x00\x00\x00\x08\x10\x00\x00\x00\x00\x20\x20\x40'\ +b'\x40\x80\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x40\x01\x80\x0e\x00\x30\x00\x0c\x00\x03\x00'\ +b'\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\xc0'\ +b'\x00\x00\x00\x00\x3f\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x10\x00\x0c\x00\x03\x00\x00\xc0\x03\x00\x1c\x00'\ +b'\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x08\x00\x00\x0e\x11\x01\x01\x02\x04\x08\x08\x00\x00\x10\x10\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x01\xf0'\ +b'\x06\x08\x08\x04\x10\xf2\x11\x12\x12\x12\x24\x22\x24\x22\x24\x24'\ +b'\x24\x64\x23\xb8\x20\x00\x10\x00\x0f\xc0\x00\x00\x00\x00\x00\x00'\ +b'\x0a\x00\x00\x00\x00\x00\x01\x00\x01\x00\x02\x80\x04\x80\x04\x80'\ +b'\x08\x80\x08\x80\x1f\xc0\x20\x40\x20\x40\x40\x40\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x07\xc0'\ +b'\x04\x20\x08\x20\x08\x20\x08\x40\x1f\x80\x10\x40\x10\x40\x10\x40'\ +b'\x20\x80\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x0c\x00\x00\x00\x00\x00\x03\xe0\x04\x10\x08\x00\x10\x00\x20\x00'\ +b'\x20\x00\x20\x00\x20\x00\x20\x00\x10\x40\x0f\x80\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x07\xc0'\ +b'\x04\x20\x08\x10\x08\x10\x08\x10\x10\x10\x10\x10\x10\x20\x10\x20'\ +b'\x20\xc0\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x0b\x00\x00\x00\x00\x00\x0f\xe0\x08\x00\x10\x00\x10\x00\x10\x00'\ +b'\x3f\x80\x20\x00\x20\x00\x20\x00\x40\x00\x7f\x80\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x0f\xc0'\ +b'\x08\x00\x10\x00\x10\x00\x10\x00\x3f\x00\x20\x00\x20\x00\x20\x00'\ +b'\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x0b\x00\x00\x00\x00\x00\x03\xc0\x0c\x20\x10\x00\x10\x00\x20\x00'\ +b'\x20\x00\x20\x40\x20\x40\x20\x80\x10\x80\x0f\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x08\x10'\ +b'\x08\x10\x10\x20\x10\x20\x10\x20\x3f\xe0\x20\x40\x20\x40\x20\x40'\ +b'\x40\x80\x40\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x05\x00\x00\x00\x08\x08\x10\x10\x10\x10\x20\x20\x20\x40\x40\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x80'\ +b'\x00\x80\x01\x00\x01\x00\x01\x00\x02\x00\x02\x00\x02\x00\x02\x00'\ +b'\x84\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x0c\x00\x00\x00\x00\x00\x08\x30\x08\x40\x11\x80\x12\x00\x14\x00'\ +b'\x38\x00\x24\x00\x22\x00\x21\x00\x40\x80\x40\x40\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x08\x08\x10\x10'\ +b'\x10\x20\x20\x20\x20\x40\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x0e\x00\x00\x00\x00\x00\x04\x04\x04\x04\x0c\x0c\x0a\x14\x12\x24'\ +b'\x12\x48\x12\x88\x21\x08\x21\x08\x20\x10\x40\x10\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x08\x10'\ +b'\x08\x10\x14\x20\x14\x20\x12\x20\x22\x20\x21\x40\x21\x40\x21\x40'\ +b'\x40\x80\x40\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x0d\x00\x00\x00\x00\x00\x01\xe0\x02\x10\x04\x08\x08\x08\x10\x08'\ +b'\x10\x08\x10\x08\x10\x10\x10\x20\x08\x40\x07\x80\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x0f\x80'\ +b'\x08\x40\x10\x40\x10\x40\x10\x40\x21\x80\x3e\x00\x20\x00\x20\x00'\ +b'\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x0d\x00\x00\x00\x00\x00\x01\xe0\x02\x10\x04\x08\x08\x08\x10\x08'\ +b'\x10\x08\x10\x08\x10\x10\x10\x20\x08\x40\x07\x80\x02\x00\x02\x00'\ +b'\x01\xc0\x00\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x0f\x80'\ +b'\x08\x40\x10\x20\x10\x20\x10\x20\x20\x40\x3f\x80\x21\x00\x20\x80'\ +b'\x40\x80\x40\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x09\x00\x00\x00\x00\x00\x07\x00\x08\x80\x10\x00\x10\x00\x08\x00'\ +b'\x06\x00\x01\x00\x01\x00\x01\x00\x42\x00\x3c\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x0f\xf0'\ +b'\x01\x00\x01\x00\x01\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00'\ +b'\x04\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x0d\x00\x00\x00\x00\x00\x04\x08\x04\x08\x08\x10\x08\x10\x08\x10'\ +b'\x10\x20\x10\x20\x10\x20\x10\x40\x10\x80\x0f\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x10\x10'\ +b'\x10\x20\x10\x20\x10\x40\x08\x40\x08\x80\x09\x00\x09\x00\x0a\x00'\ +b'\x04\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x11\x00\x00\x00\x00\x00\x00\x00\x10\x00\x80\x10\x21\x00\x10\x61'\ +b'\x00\x10\xa2\x00\x10\xa2\x00\x11\x24\x00\x12\x24\x00\x14\x28\x00'\ +b'\x14\x28\x00\x18\x10\x00\x10\x10\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x10\x10'\ +b'\x08\x20\x08\x40\x04\x80\x07\x00\x06\x00\x09\x00\x11\x00\x20\x80'\ +b'\x40\x80\x80\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x0b\x00\x00\x00\x00\x00\x10\x20\x08\x40\x08\x80\x09\x00\x05\x00'\ +b'\x06\x00\x04\x00\x04\x00\x04\x00\x08\x00\x08\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x1f\xe0'\ +b'\x00\x40\x00\x80\x01\x00\x02\x00\x04\x00\x08\x00\x10\x00\x20\x00'\ +b'\x40\x00\x7f\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x09\x00\x07\x80\x04\x00\x08\x00\x08\x00\x08\x00\x08\x00\x10\x00'\ +b'\x10\x00\x10\x00\x10\x00\x20\x00\x20\x00\x20\x00\x20\x00\x40\x00'\ +b'\x78\x00\x00\x00\x00\x00\x00\x00\x06\x00\x20\x20\x20\x20\x10\x10'\ +b'\x10\x10\x10\x10\x10\x10\x08\x08\x08\x08\x00\x00\x00\x00\x00\x00'\ +b'\x08\x00\x0f\x01\x02\x02\x02\x02\x04\x04\x04\x04\x08\x08\x08\x08'\ +b'\x10\xf0\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x02\x00'\ +b'\x05\x00\x09\x00\x09\x00\x10\x80\x20\x80\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\x80\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x08\x04\x02\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x80\x08\x80'\ +b'\x10\x80\x21\x00\x21\x00\x21\x00\x23\x00\x1d\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x04\x00\x04\x00'\ +b'\x08\x00\x08\x00\x0f\x00\x08\x80\x10\x80\x10\x80\x10\x80\x21\x00'\ +b'\x21\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x08\x00\x00\x00\x00\x00\x00\x0e\x11\x10\x20\x20\x20\x22\x1c\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x20\x00\x20'\ +b'\x00\x40\x00\x40\x07\xc0\x08\x80\x10\x80\x20\x80\x21\x00\x21\x00'\ +b'\x23\x00\x1d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x80'\ +b'\x10\x80\x21\x00\x3e\x00\x20\x00\x20\x00\x1f\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x03\x80\x04\x00'\ +b'\x08\x00\x08\x00\x0e\x00\x10\x00\x10\x00\x10\x00\x10\x00\x20\x00'\ +b'\x20\x00\x20\x00\x40\x00\x40\x00\x80\x00\x00\x00\x00\x00\x00\x00'\ +b'\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x80\x08\x80'\ +b'\x10\x80\x21\x00\x21\x00\x21\x00\x23\x00\x1d\x00\x02\x00\x02\x00'\ +b'\x3c\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x08\x00\x08\x00'\ +b'\x10\x00\x10\x00\x1f\x00\x10\x80\x20\x80\x20\x80\x20\x80\x20\x80'\ +b'\x41\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x06\x00\x00\x00\x04\x00\x00\x08\x08\x10\x10\x10\x10\x20\x20\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x01\x00\x00\x02'\ +b'\x02\x04\x04\x04\x04\x08\x08\x08\x10\xe0\x00\x00\x00\x00\x00\x00'\ +b'\x09\x00\x00\x00\x08\x00\x08\x00\x10\x00\x10\x00\x11\x00\x12\x00'\ +b'\x2c\x00\x30\x00\x28\x00\x24\x00\x42\x00\x41\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x04\x08\x08\x08\x08'\ +b'\x10\x10\x10\x20\x20\x20\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x70\x11\x88'\ +b'\x11\x08\x21\x08\x21\x08\x21\x08\x42\x10\x42\x10\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x0f\x00\x10\x80\x10\x80\x20\x80\x20\x80\x20\x80'\ +b'\x41\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x10\x80'\ +b'\x10\x80\x20\x80\x20\x80\x21\x00\x21\x00\x1e\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x0f\x00\x10\x80\x10\x80\x20\x80\x20\x80\x21\x00'\ +b'\x22\x00\x3c\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00'\ +b'\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x80\x08\x80'\ +b'\x10\x80\x21\x00\x21\x00\x21\x00\x21\x00\x1e\x00\x02\x00\x02\x00'\ +b'\x02\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x0f'\ +b'\x10\x10\x20\x20\x20\x40\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x08\x00\x00\x00\x00\x00\x00\x0f\x10\x10\x08\x04\x02\x02\x3c\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x08\x08\x10\x1f'\ +b'\x10\x20\x20\x20\x20\x20\x1c\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x40\x10\x80'\ +b'\x20\x80\x20\x80\x21\x00\x21\x00\x23\x00\x1d\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x10\x80\x11\x00\x11\x00\x11\x00\x12\x00\x14\x00'\ +b'\x14\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x88\x10\x88'\ +b'\x11\x88\x12\x90\x12\x90\x14\xa0\x18\x40\x10\x40\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x10\x80\x09\x00\x0a\x00\x04\x00\x0c\x00\x12\x00'\ +b'\x22\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x40\x10\x80'\ +b'\x10\x80\x10\x80\x09\x00\x0a\x00\x0a\x00\x04\x00\x08\x00\x10\x00'\ +b'\xe0\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x1f'\ +b'\x02\x04\x08\x10\x20\x40\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x08\x00\x03\x04\x04\x04\x08\x08\x08\x10\x20\x10\x10\x10\x20\x20'\ +b'\x20\x10\x00\x00\x00\x00\x00\x00\x05\x00\x08\x08\x10\x10\x10\x10'\ +b'\x20\x20\x20\x20\x40\x40\x40\x40\x80\x80\x00\x00\x00\x00\x00\x00'\ +b'\x06\x00\x08\x04\x04\x04\x08\x08\x08\x08\x04\x08\x10\x10\x20\x20'\ +b'\x20\xc0\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x40\x23\x80\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x0b\x00\x00\x00\x00\x00\x03\xe0\x04\x00\x04\x00\x08\x00\x08\x00'\ +b'\x3f\x80\x08\x00\x08\x00\x10\x00\x10\x00\x3f\x80\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x3f\xc0\x00\x40\x00\x40\x00\x80'\ +b'\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x07\x00\x00\x0c\x12\x12\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\xc0'\ +b'\x0c\x20\x10\x10\x10\x10\x20\x10\x20\x10\x20\x20\x20\x20\x10\x40'\ +b'\x10\x80\x79\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\xc0\x08\x40'\ +b'\x10\x40\x20\x80\x20\x80\x20\x80\x21\x80\x1e\x40\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x03\x80\x04\x40'\ +b'\x08\x40\x08\x40\x08\x80\x17\x00\x10\x80\x10\x80\x10\x80\x20\x80'\ +b'\x21\x00\x3e\x00\x20\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00'\ +b'\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x80\x11\x00'\ +b'\x11\x00\x11\x00\x12\x00\x14\x00\x18\x00\x18\x00\x10\x00\x10\x00'\ +b'\x10\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x07\xc0\x08\x00'\ +b'\x08\x00\x04\x00\x06\x00\x09\x00\x10\x80\x20\x80\x20\x80\x20\x80'\ +b'\x21\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x0a\x00\x00\x00\x07\x80\x08\x40\x10\x40\x10\x40\x20\x40\x3f\xc0'\ +b'\x20\x40\x20\x80\x20\x80\x21\x00\x21\x00\x1e\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x0c\x02\x02\x02\x02'\ +b'\x06\x0a\x12\x11\x21\x21\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x40\x10\x40'\ +b'\x10\x80\x20\x80\x20\x80\x20\x80\x21\x80\x3e\x40\x40\x00\x40\x00'\ +b'\x40\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x0f\xc0\x08\x40\x08\x80\x10\x80\x10\x80\x10\x80'\ +b'\x21\x00\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x10\x08\x08'\ +b'\x10\x88\x20\x88\x21\x08\x21\x08\x23\x10\x1c\xe0\x00\x00\x00\x00'\ +b'\x00\x00' + +_sparse =\ +b'\x20\x00\x03\x00\x21\x00\x06\x00\x22\x00\x09\x00\x23\x00\x0e\x00'\ +b'\x24\x00\x13\x00\x25\x00\x18\x00\x26\x00\x1d\x00\x27\x00\x22\x00'\ +b'\x28\x00\x25\x00\x29\x00\x28\x00\x2a\x00\x2b\x00\x2b\x00\x30\x00'\ +b'\x2c\x00\x35\x00\x2d\x00\x38\x00\x2e\x00\x3b\x00\x2f\x00\x3e\x00'\ +b'\x30\x00\x43\x00\x31\x00\x48\x00\x32\x00\x4d\x00\x33\x00\x52\x00'\ +b'\x34\x00\x57\x00\x35\x00\x5c\x00\x36\x00\x61\x00\x37\x00\x66\x00'\ +b'\x38\x00\x6b\x00\x39\x00\x70\x00\x3a\x00\x75\x00\x3b\x00\x78\x00'\ +b'\x3c\x00\x7b\x00\x3d\x00\x80\x00\x3e\x00\x85\x00\x3f\x00\x8a\x00'\ +b'\x40\x00\x8d\x00\x41\x00\x92\x00\x42\x00\x97\x00\x43\x00\x9c\x00'\ +b'\x44\x00\xa1\x00\x45\x00\xa6\x00\x46\x00\xab\x00\x47\x00\xb0\x00'\ +b'\x48\x00\xb5\x00\x49\x00\xba\x00\x4a\x00\xbd\x00\x4b\x00\xc2\x00'\ +b'\x4c\x00\xc7\x00\x4d\x00\xca\x00\x4e\x00\xcf\x00\x4f\x00\xd4\x00'\ +b'\x50\x00\xd9\x00\x51\x00\xde\x00\x52\x00\xe3\x00\x53\x00\xe8\x00'\ +b'\x54\x00\xed\x00\x55\x00\xf2\x00\x56\x00\xf7\x00\x57\x00\xfc\x00'\ +b'\x58\x00\x03\x01\x59\x00\x08\x01\x5a\x00\x0d\x01\x5b\x00\x12\x01'\ +b'\x5c\x00\x17\x01\x5d\x00\x1a\x01\x5e\x00\x1d\x01\x5f\x00\x22\x01'\ +b'\x60\x00\x27\x01\x61\x00\x2a\x01\x62\x00\x2f\x01\x63\x00\x34\x01'\ +b'\x64\x00\x37\x01\x65\x00\x3c\x01\x66\x00\x41\x01\x67\x00\x46\x01'\ +b'\x68\x00\x4b\x01\x69\x00\x50\x01\x6a\x00\x53\x01\x6b\x00\x56\x01'\ +b'\x6c\x00\x5b\x01\x6d\x00\x5e\x01\x6e\x00\x63\x01\x6f\x00\x68\x01'\ +b'\x70\x00\x6d\x01\x71\x00\x72\x01\x72\x00\x77\x01\x73\x00\x7a\x01'\ +b'\x74\x00\x7d\x01\x75\x00\x80\x01\x76\x00\x85\x01\x77\x00\x8a\x01'\ +b'\x78\x00\x8f\x01\x79\x00\x94\x01\x7a\x00\x99\x01\x7b\x00\x9c\x01'\ +b'\x7c\x00\x9f\x01\x7d\x00\xa2\x01\x7e\x00\xa5\x01\xa3\x00\xaa\x01'\ +b'\xac\x00\xaf\x01\xb0\x00\xb4\x01\xa9\x03\xb7\x01\xb1\x03\xbc\x01'\ +b'\xb2\x03\xc1\x01\xb3\x03\xc6\x01\xb4\x03\xcb\x01\xb8\x03\xd0\x01'\ +b'\xbb\x03\xd5\x01\xbc\x03\xd8\x01\xc0\x03\xdd\x01\xc9\x03\xe2\x01'\ + +_mvfont = memoryview(_font) +_mvsp = memoryview(_sparse) +ifb = lambda l : l[0] | (l[1] << 8) + +def bs(lst, val): + while True: + m = (len(lst) & ~ 7) >> 1 + v = ifb(lst[m:]) + if v == val: + return ifb(lst[m + 2:]) + if not m: + return 0 + lst = lst[m:] if v < val else lst[:m] + +def get_ch(ch): + doff = bs(_mvsp, ord(ch)) << 3 + width = ifb(_mvfont[doff : ]) + + next_offs = doff + 2 + ((width - 1)//8 + 1) * 16 + return _mvfont[doff + 2:next_offs], 16, width + diff --git a/examples/scrolled_text.py b/examples/scrolled_text.py new file mode 100644 index 0000000..4a0c2b0 --- /dev/null +++ b/examples/scrolled_text.py @@ -0,0 +1,148 @@ +# SPDX-FileCopyrightText: 2024-present Unital Software +# +# SPDX-License-Identifier: MIT + +"""Example showing scrolling text up/down with buttons.""" + +import asyncio +from machine import Signal, Pin + +from tempe.font import TempeFont +from tempe.fonts import ubuntu16bold +from tempe.surface import Surface +from tempe.text import CENTER, TOP +from tempe.window import Window +from example_fonts import ubuntu12italic + + +# a buffer one half the size of the screen +WORKING_BUFFER = bytearray(2 * 240 * 241) + +# Buttons +up = Signal(15, Pin.IN, Pin.PULL_UP, invert=True) +down = Signal(14, Pin.IN, Pin.PULL_UP, invert=True) + +# Japperwocky by Lewis Caroll +JABBERWOCKY = """'Twas brillig, and the slithy toves +Did gyre and gimble in the wabe; +All mimsy were the borogoves, +And the mome raths outgrabe. + +"Beware the Jabberwock, my son! +The jaws that bite, the claws that catch! +Beware the Jubjub bird, and shun +The frumious Bandersnatch!" + +He took his vorpal sword in hand: +Long time the manxome foe he sought- +So rested he by the Tumtum tree, +And stood awhile in thought. + +And as in uffish thought he stood, +The Jabberwock, with eyes of flame, +Came whiffling through the tulgey wood, +And burbled as it came! + +One, two! One, two! And through and through +The vorpal blade went snicker-snack! +He left it dead, and with its head +He went galumphing back. + +"And hast thou slain the Jabberwock? +Come to my arms, my beamish boy! +O frabjous day! Callooh! Callay!" +He chortled in his joy. + +'Twas brillig, and the slithy toves +Did gyre and gimble in the wabe; +All mimsy were the borogoves, +And the mome raths outgrabe.""" + +class Scroller: + + def __init__(self, window, max_scroll, step=10): + self.window = window + self.max_scroll = max_scroll + self.step = step + self.top = window.clip[1] + self.height = window.clip[3] + self._scroll = 0 + + @property + def scroll(self): + return self._scroll + + @scroll.setter + def scroll(self, value): + self._scroll = min(max(value, 0), self.max_scroll - self.height) + x = self.window.offset[0] + y = self.top - self._scroll + self.window.update(offset=(x, y)) + + def up(self): + self.scroll += self.step + + def down(self): + self.scroll -= self.step + + +async def init_surface(surface): + # fill the background with off-white pixels + surface.rectangles("BACKGROUND", (0, 0, 320, 240), "#fff") + title = surface.text("DRAWING", (0, 0, 160, 16), "#222", "Jabberwocky", font=TempeFont(ubuntu16bold)) + + window = Window(offset=(4, 20), clip=(4, 20, 312, 212)) + surface.add_shape("DRAWING", window) + text = window.subsurface.text("DRAWING", (156, 0), "#222", JABBERWOCKY, (CENTER, TOP), font=TempeFont(ubuntu12italic)) + x, y, w, h = text._get_bounds() + scroller = Scroller(window, h, text.font.height) + return scroller + + +async def init_display(): + from tempe_displays.st7789.pimoroni import PimoroniDisplay as Display + + display = Display(size=(320, 240)) + display.backlight_pin(1) + await display.init() + return display + + +async def refresh_display(surface, display, working_buffer): + import time + + while True: + await surface.refresh_needed.wait() + await surface.arefresh(display, working_buffer) + +async def scroll(scroller): + while True: + await asyncio.sleep(0.1) + if down(): + scroller.down() + while down(): + await asyncio.sleep(0.1) + if up(): + scroller.up() + while up(): + await asyncio.sleep(0.1) + + +async def main(working_buffer): + + # initialize objects + surface = Surface() + display, scroller = await asyncio.gather( + init_display(), + init_surface(surface), + ) + + # poll the temperature and update the display forever + await asyncio.gather( + refresh_display(surface, display, working_buffer), + scroll(scroller), + ) + + +if __name__ == "__main__": + asyncio.run(main(WORKING_BUFFER))