diff options
| -rw-r--r-- | res/clock_icon.png | bin | 965 -> 5599 bytes | |||
| -rw-r--r-- | res/settings_icon.png | bin | 1082 -> 7628 bytes | |||
| -rw-r--r-- | res/torch_icon.png | bin | 820 -> 5170 bytes | |||
| -rw-r--r-- | wasp/apps/launcher.py | 2 | ||||
| -rw-r--r-- | wasp/apps/testapp.py | 65 | ||||
| -rw-r--r-- | wasp/draw565.py | 19 | ||||
| -rw-r--r-- | wasp/icons.py | 120 |
7 files changed, 139 insertions, 67 deletions
diff --git a/res/clock_icon.png b/res/clock_icon.png Binary files differindex 165bf51..b08bbfb 100644 --- a/res/clock_icon.png +++ b/res/clock_icon.png diff --git a/res/settings_icon.png b/res/settings_icon.png Binary files differindex d1141b0..c8e8019 100644 --- a/res/settings_icon.png +++ b/res/settings_icon.png diff --git a/res/torch_icon.png b/res/torch_icon.png Binary files differindex bbd4db3..aa5f514 100644 --- a/res/torch_icon.png +++ b/res/torch_icon.png diff --git a/wasp/apps/launcher.py b/wasp/apps/launcher.py index 274ea9c..4e76ab1 100644 --- a/wasp/apps/launcher.py +++ b/wasp/apps/launcher.py @@ -66,7 +66,7 @@ class LauncherApp(): if not app: return draw.set_color(0xffff) - draw.rleblit(app.ICON, (x+13, y+12)) + draw.blit(app.ICON, x+13, y+12) draw.set_color(0xbdb6) draw.string(app.NAME, x, y+120-30, 120) diff --git a/wasp/apps/testapp.py b/wasp/apps/testapp.py index eece822..789454f 100644 --- a/wasp/apps/testapp.py +++ b/wasp/apps/testapp.py @@ -11,42 +11,8 @@ class TestApp(): NAME = 'Self Test' ICON = icons.app - # 2-bit RLE, generated from res/app_icon.png, 457 bytes - RLE_2BIT = ( - 96, 64, - b'\x1e@md<d<d;f?X\xec2\xf0/' - b'\xf2-\xf4,\xc3.\xc3,\xc3.\xc3,\xc3.\xc3,' - b'\xc3.\xc3,\xc3.\xc3,\xc3\x0c\x80\xfc\x83\x10\xc0]' - b'\xc3\x0c@\xffC,C\n\x87\x0c\xc7\nC,C\t' - b'\x83\x02\x84\n\xc4\x02\xc3\tC,C\x08\x82\x07\x82\x08' - b'\xc2\x07\xc2\x08C,C\x07\x82\t\x82\x06\xc2\t\xc2\x07' - b'C,C\x06\x82\x0b\x82\x04\xc2\x0b\xc2\x06C,C\x06' - b'\x82\x0b\x82\x04\xc2\x0b\xc2\x06C,C\x05\x82\x0c\x82\x04' - b'\xc2\x0c\xc2\x05C,C\x05\x82\x0c\x82\x04\xc2\x0c\xc2\x05' - b'C,C\x05\x83\x0b\x82\x04\xc2\x0b\xc3\x05C,C\x06' - b'\x82\x0b\x82\x04\xc2\x0b\xc2\x06C,C\x06\x82\x0b\x82\x04' - b'\xc2\x0b\xc1\x07C,C\x07\x82\n\x82\x04\xc2\n\xc2\x07' - b'C+D\x08\x82\t\x82\x04\xc2\t\xc2\x08C*E\t' - b'\x8c\x04\xcc\tC*E\n\x8b\x04\xcb\nC*E.' - b'C*E.C*E.C*E.C*E\n' - b'\x80\xe9\x8b\x04\xc0o\xcb\nC+D\t\x8c\x04\xcc\t' - b'C,C\x08\x82\t\x82\x04\xc2\t\xc2\x08C,C\x07' - b'\x82\n\x82\x04\xc2\n\xc2\x07C,C\x06\x82\x0b\x82\x04' - b'\xc2\x0b\xc1\x07C,C\x06\x82\x0b\x82\x04\xc2\x0b\xc2\x06' - b'C,C\x05\x83\x0b\x82\x04\xc2\x0b\xc3\x05C,C\x05' - b'\x82\x0c\x82\x04\xc2\x0c\xc2\x05C,C\x05\x82\x0c\x82\x04' - b'\xc2\x0c\xc2\x05C,C\x06\x82\x0b\x82\x04\xc2\x0b\xc2\x06' - b'C,C\x06\x82\x0b\x82\x04\xc2\x0b\xc2\x06C,C\x07' - b'\x82\t\x82\x06\xc2\t\xc2\x07C,C\x08\x82\x07\x82\x08' - b'\xc2\x07\xc2\x08C,C\t\x83\x02\x84\n\xc4\x02\xc3\t' - b'C,C\n\x86\x0e\xc6\nC,C\x0c\x83\x10\xc3\x0c' - b'C,C.C,C.C,C.C,C.' - b'C,C.C,t-r/p2l?X@' - b'mf;d<d<d\x1e' - ) - def __init__(self): - self.tests = ('Touch', 'String', 'Button', 'Crash', '1-bit RLE', '2-bit RLE') + self.tests = ('Touch', 'String', 'Button', 'Crash', 'RLE') self.test = self.tests[0] self.scroll = wasp.widgets.ScrollIndicator() @@ -90,32 +56,17 @@ class TestApp(): event[1], event[2]), 0, 108, width=240) elif self.test == 'String': self.benchmark_string() - elif self.test == '1-bit RLE': - self.benchmark_rle_1bit() - elif self.test == '2-bit RLE': - self.benchmark_rle_2bit() - - def benchmark_rle_1bit(self): - draw = wasp.watch.drawable - draw.fill(0, 0, 30, 240, 240-30) - self.scroll.draw() - t = machine.Timer(id=1, period=8000000) - t.start() - for i in range(0, 128, 16): - draw.rleblit(self.ICON, (i, 30 + i)) - elapsed = t.time() - t.stop() - del t - draw.string('{}s'.format(elapsed / 1000000), 12, 24+192) + elif self.test == 'RLE': + self.benchmark_rle() - def benchmark_rle_2bit(self): + def benchmark_rle(self): draw = wasp.watch.drawable draw.fill(0, 0, 30, 240, 240-30) self.scroll.draw() t = machine.Timer(id=1, period=8000000) t.start() for i in range(0, 128, 16): - draw.rle2bit(self.RLE_2BIT, i, 30 + i) + draw.blit(self.ICON, i+16, i+32) elapsed = t.time() t.stop() del t @@ -149,9 +100,7 @@ class TestApp(): if self.test == 'Crash': draw.string("Press button to", 12, 24+24) draw.string("throw exception.", 12, 24+48) - elif self.test == '1-bit RLE': - draw.rleblit(self.ICON, (120-48, 120-32)) - elif self.test == '2-bit RLE': - draw.rle2bit(self.RLE_2BIT, 120-48, 120-32) + elif self.test == 'RLE': + draw.blit(self.ICON, 120-48, 120-32) wasp.watch.display.mute(False) diff --git a/wasp/draw565.py b/wasp/draw565.py index 9cc4adc..028b920 100644 --- a/wasp/draw565.py +++ b/wasp/draw565.py @@ -106,6 +106,15 @@ class Draw565(object): self._display.fill(bg, x, y, w, h) @micropython.native + def blit(self, image, x, y): + if len(image) == 3: + # Legacy 1-bit image + self.rleblit(image, (x, y)) + else: #elif image[0] == 2: + # 2-bit RLE image, (255x255, v1) + self._rle2bit(image, x, y) + + @micropython.native def rleblit(self, image, pos=(0, 0), fg=0xffff, bg=0): """Decode and draw a 1-bit RLE image.""" display = self._display @@ -135,14 +144,20 @@ class Draw565(object): color = bg @micropython.native - def rle2bit(self, image, x, y): + def _rle2bit(self, image, x, y): """Decode and draw a 2-bit RLE image.""" display = self._display quick_write = display.quick_write - (sx, sy, rle) = image + sx = image[1] + sy = image[2] + rle = memoryview(image)[3:] display.set_window(x, y, sx, sy) + if sx <= (len(display.linebuffer) / 2) and not bool(sy & 1): + sx *= 2 + sy /= 2 + palette = array.array('H', (0, 0xfffe, 0x7bef, 0xffff)) next_color = 1 rl = 0 diff --git a/wasp/icons.py b/wasp/icons.py index 76b5ee7..02c1b91 100644 --- a/wasp/icons.py +++ b/wasp/icons.py @@ -4,17 +4,125 @@ # 1-bit RLE, generated from res/battery.png, 189 bytes battery = (36, 48, b'\x97\x0e\x14\x12\x11\x14\x10\x14\x0c\x08\x0c\x08\x08\x08\x0c\x08\x08\x08\x0c\x08\x08\x08\x0c\x08\x08\x04\x14\x04\x08\x04\x14\x04\x08\x04\x0c\x04\x04\x04\x08\x04\x0b\x05\x04\x04\x08\x04\n\x06\x04\x04\x08\x04\t\x07\x04\x04\x08\x04\x08\x07\x05\x04\x08\x04\x07\x07\x06\x04\x08\x04\x06\x07\x07\x04\x08\x04\x05\x07\x08\x04\x08\x04\x04\x0e\x02\x04\x08\x04\x03\x0f\x02\x04\x08\x04\x02\x10\x02\x04\x08\x04\x02\x10\x02\x04\x08\x04\x02\x0f\x03\x04\x08\x04\x02\x0e\x04\x04\x08\x04\x08\x07\x05\x04\x08\x04\x07\x07\x06\x04\x08\x04\x06\x07\x07\x04\x08\x04\x05\x07\x08\x04\x08\x04\x04\x07\t\x04\x08\x04\x04\x06\n\x04\x08\x04\x04\x05\x0b\x04\x08\x04\x04\x04\x0c\x04\x08\x04\x14\x04\x08\x04\x14\x04\x08\x04\x14\x04\x08\x04\x14\x04\x08\x1c\x08\x1c\x08\x1c\x08\x1c\x98') -# 1-bit RLE, generated from res/app_icon.png, 441 bytes -app = (96, 64, b'\x1e$<$<$;&\x97,20/2-4,\x03.\x03,\x03.\x03,\x03.\x03,\x03.\x03,\x03.\x03,\x03\x0c\x03\x10\x03\x0c\x03,\x03\n\x07\x0c\x07\n\x03,\x03\t\x03\x02\x04\n\x04\x02\x03\t\x03,\x03\x08\x02\x07\x02\x08\x02\x07\x02\x08\x03,\x03\x07\x02\t\x02\x06\x02\t\x02\x07\x03,\x03\x06\x02\x0b\x02\x04\x02\x0b\x02\x06\x03,\x03\x06\x02\x0b\x02\x04\x02\x0b\x02\x06\x03,\x03\x05\x02\x0c\x02\x04\x02\x0c\x02\x05\x03,\x03\x05\x02\x0c\x02\x04\x02\x0c\x02\x05\x03,\x03\x05\x03\x0b\x02\x04\x02\x0b\x03\x05\x03,\x03\x06\x02\x0b\x02\x04\x02\x0b\x02\x06\x03,\x03\x06\x02\x0b\x02\x04\x02\x0b\x01\x07\x03,\x03\x07\x02\n\x02\x04\x02\n\x02\x07\x03+\x04\x08\x02\t\x02\x04\x02\t\x02\x08\x03*\x05\t\x0c\x04\x0c\t\x03*\x05\n\x0b\x04\x0b\n\x03*\x05.\x03*\x05.\x03*\x05.\x03*\x05.\x03*\x05\n\x0b\x04\x0b\n\x03+\x04\t\x0c\x04\x0c\t\x03,\x03\x08\x02\t\x02\x04\x02\t\x02\x08\x03,\x03\x07\x02\n\x02\x04\x02\n\x02\x07\x03,\x03\x06\x02\x0b\x02\x04\x02\x0b\x01\x07\x03,\x03\x06\x02\x0b\x02\x04\x02\x0b\x02\x06\x03,\x03\x05\x03\x0b\x02\x04\x02\x0b\x03\x05\x03,\x03\x05\x02\x0c\x02\x04\x02\x0c\x02\x05\x03,\x03\x05\x02\x0c\x02\x04\x02\x0c\x02\x05\x03,\x03\x06\x02\x0b\x02\x04\x02\x0b\x02\x06\x03,\x03\x06\x02\x0b\x02\x04\x02\x0b\x02\x06\x03,\x03\x07\x02\t\x02\x06\x02\t\x02\x07\x03,\x03\x08\x02\x07\x02\x08\x02\x07\x02\x08\x03,\x03\t\x03\x02\x04\n\x04\x02\x03\t\x03,\x03\n\x06\x0e\x06\n\x03,\x03\x0c\x03\x10\x03\x0c\x03,\x03.\x03,\x03.\x03,\x03.\x03,\x03.\x03,\x03.\x03,4-2/02,\x97&;$<$<$\x1e') +# 2-bit RLE, generated from res/app_icon.png, 460 bytes +app = ( + b'\x02' + b'`@' + b'\x1e@md<d<d;f?X\xec2\xf0/' + b'\xf2-\xf4,\xc3.\xc3,\xc3.\xc3,\xc3.\xc3,' + b'\xc3.\xc3,\xc3.\xc3,\xc3\x0c\x80\xfc\x83\x10\xc0]' + b'\xc3\x0c@\xffC,C\n\x87\x0c\xc7\nC,C\t' + b'\x83\x02\x84\n\xc4\x02\xc3\tC,C\x08\x82\x07\x82\x08' + b'\xc2\x07\xc2\x08C,C\x07\x82\t\x82\x06\xc2\t\xc2\x07' + b'C,C\x06\x82\x0b\x82\x04\xc2\x0b\xc2\x06C,C\x06' + b'\x82\x0b\x82\x04\xc2\x0b\xc2\x06C,C\x05\x82\x0c\x82\x04' + b'\xc2\x0c\xc2\x05C,C\x05\x82\x0c\x82\x04\xc2\x0c\xc2\x05' + b'C,C\x05\x83\x0b\x82\x04\xc2\x0b\xc3\x05C,C\x06' + b'\x82\x0b\x82\x04\xc2\x0b\xc2\x06C,C\x06\x82\x0b\x82\x04' + b'\xc2\x0b\xc1\x07C,C\x07\x82\n\x82\x04\xc2\n\xc2\x07' + b'C+D\x08\x82\t\x82\x04\xc2\t\xc2\x08C*E\t' + b'\x8c\x04\xcc\tC*E\n\x8b\x04\xcb\nC*E.' + b'C*E.C*E.C*E.C*E\n' + b'\x80\xe9\x8b\x04\xc0o\xcb\nC+D\t\x8c\x04\xcc\t' + b'C,C\x08\x82\t\x82\x04\xc2\t\xc2\x08C,C\x07' + b'\x82\n\x82\x04\xc2\n\xc2\x07C,C\x06\x82\x0b\x82\x04' + b'\xc2\x0b\xc1\x07C,C\x06\x82\x0b\x82\x04\xc2\x0b\xc2\x06' + b'C,C\x05\x83\x0b\x82\x04\xc2\x0b\xc3\x05C,C\x05' + b'\x82\x0c\x82\x04\xc2\x0c\xc2\x05C,C\x05\x82\x0c\x82\x04' + b'\xc2\x0c\xc2\x05C,C\x06\x82\x0b\x82\x04\xc2\x0b\xc2\x06' + b'C,C\x06\x82\x0b\x82\x04\xc2\x0b\xc2\x06C,C\x07' + b'\x82\t\x82\x06\xc2\t\xc2\x07C,C\x08\x82\x07\x82\x08' + b'\xc2\x07\xc2\x08C,C\t\x83\x02\x84\n\xc4\x02\xc3\t' + b'C,C\n\x86\x0e\xc6\nC,C\x0c\x83\x10\xc3\x0c' + b'C,C.C,C.C,C.C,C.' + b'C,C.C,t-r/p2l?X@' + b'mf;d<d<d\x1e' +) -# 1-bit RLE, generated from res/clock_icon.png, 301 bytes -clock = (96, 64, b'\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xcd\x06\r\x06!\x05\x0b\x08\x0c\x08\x0b\n\x1d\t\x07\x0c\n\x08\n\x0c\x1b\x0b\x06\x0e\x08\x03\x02\x03\n\x04\x05\x04\x1a\x04\x03\x04\x06\x02\x08\x04\r\x03\t\x04\x07\x03\x19\x04\x05\x04\x10\x04\x0c\x03\t\x03\t\x02\x19\x03\x07\x03\x11\x03\x0c\x03\t\x03\t\x03\n\x04\t\x04\x07\x04\x10\x03\x0c\x03\t\x03\t\x03\n\x04\t\x03\t\x03\x10\x03\x0c\x03\t\x03\t\x03\n\x04\t\x03\t\x03\x10\x03\x0c\x03\t\x04\x07\x04\n\x04\t\x03\t\x03\x0f\x04\x0c\x03\n\x04\x05\x05\n\x04\t\x03\x03\x02\x04\x03\x0e\x04\r\x03\n\n\x01\x03\x17\x03\x02\x04\x03\x03\r\x05\r\x03\x0b\t\x01\x03\x17\x03\x02\x03\x04\x03\x0c\x05\x0e\x03\r\x05\x03\x03\x17\x03\t\x03\x0b\x05\x0f\x03\x15\x03\x17\x03\t\x03\n\x05\x10\x03\x14\x04\x17\x03\t\x03\t\x05\x11\x03\x14\x03\x18\x04\x07\x04\x08\x04\x13\x03\x14\x03\x19\x03\x07\x03\x08\x04\x14\x03\x13\x04\x0b\x04\n\x03\x06\x04\x07\x04\x15\x03\x0b\x01\x05\x05\x0c\x04\x0b\x04\x03\x04\x07\x03\x12\r\x06\n\r\x04\x0b\x0b\x06\x0f\x07\r\x06\t\x0e\x04\x0c\t\x07\x0f\x07\r\x07\x06\x10\x04\x0e\x05\t\x0f\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xaa') +# 2-bit RLE, generated from res/clock_icon.png, 288 bytes +clock = ( + b'\x02' + b'`@' + b'?\xff\xff\xff\xff\xff\xff\x8e@\xb6F\r\xc6!E\x0b' + b'\xc8\x0cH\x0b\xca\x1dI\x07\xcc\nH\n\xcc\x1bK\x06' + b'\xce\x08C\x02C\n\xc4\x05\xc4\x1aD\x03D\x06\xc2\x08' + b'\xc4\rC\t\xc4\x07\xc3\x19D\x05D\x10\xc4\x0cC\t' + b'\xc3\t\xc2\x19C\x07C\x11\xc3\x0cC\t\xc3\t\xc3\n' + b'D\tD\x07D\x10\xc3\x0cC\t\xc3\t\xc3\nD\t' + b'C\tC\x10\xc3\x0cC\t\xc3\t\xc3\nD\tC\t' + b'C\x10\xc3\x0cC\t\xc4\x07\xc4\nD\tC\tC\x0f' + b'\xc4\x0cC\n\xc4\x05\xc5\nD\tC\tC\x0e\xc4\r' + b'C\n\xca\x01\xc3\x17C\tC\r\xc5\rC\x0b\xc9\x01' + b'\xc3\x17C\tC\x0c\xc5\x0eC\r\xc5\x03\xc3\x17C\t' + b'C\x0b\xc5\x0fC\x15\xc3\x17C\tC\n\xc5\x10C\x14' + b'\xc4\x17C\tC\t\xc5\x11C\x14\xc3\x18D\x07D\x08' + b'\xc4\x13C\x14\xc3\x19C\x07C\x08\xc4\x14C\x13\xc4\x0b' + b'D\nC\x06D\x07\xc4\x15C\x0b\xc1\x05\xc5\x0cD\x0b' + b'D\x03D\x07\xc3\x12M\x06\xca\rD\x0bK\x06\xcf\x07' + b'M\x06\xc9\x0eD\x0cI\x07\xcf\x07M\x07\xc6\x10D\x0e' + b'E\t\xcf?\xff\xff\xff\xff\xff\xff\xff\xffk' +) -# 1-bit RLE, generated from res/torch_icon.png, 283 bytes -torch = (96, 64, b'\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00e\x06W\nT\x04\x06\x02S\x03\x07\x02S\x02\n\x01\x0b\x029\x05\x08\x02\t\x02\x08\x03:\x07\x06\x02\x0b\x01\x06\x02$(\n\x02\x03\x03%(\x0c\x01+\x02%\x01\x0b\x02+\x02%\x01\x0c\x01+\x02\x05\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x05\x01\x0b\x02+\x02\x04\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x04\x01\x0c\x01+\x02%\x01\x0b\x02\x03\n\x1e\x02\x05\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x05\x01\x0c\x01+\x02\x04\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x04\x01\x0b\x02+\x02%\x01\x0c\x01+\x02%\x01\x0b\x02+(\x0c\x01,(\n\x02\x03\x03L\x02\x0b\x01\x06\x02K\x02\t\x02\x08\x03H\x02\n\x01\x0b\x02G\x03\x07\x02U\x04\x06\x02V\nY\x06\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xe2') +# 2-bit RLE, generated from res/settings_icon.png, 472 bytes +settings = ( + b'\x02' + b'`@' + b'\x1e@md<d<d;f?X\xec2\xf0/' + b'\xf2-\xf4,\xc3.\xc3,\xc3.\xc3,\xc3.\xc3,' + b'\xc3\x14\x80\xb7\x86\x14\xc3,\xc3\x13\x88\x13\xc3,\xc3\x13' + b'\x88\x13\xc3,\xc3\x12\x83\x04\x83\x12\xc3,\xc3\n\x84\x04' + b'\x83\x04\x83\x04\x84\n\xc3,\xc3\t\x86\x01\x85\x04\x85\x01' + b'\x86\t\xc3,\xc3\x08\x8c\x05\x8d\x08\xc3,\xc3\x07\x84\x02' + b'\x86\x08\x86\x02\x84\x07\xc3,\xc3\x07\x83\x05\x81\x0e\x81\x05' + b'\x83\x07\xc3,\xc3\x07\x83\x1a\x83\x07\xc3,\xc3\x07\x84\x18' + b'\x84\x07\xc3,\xc3\x08\x83\n\xc0o\xc4\n\x83\x08@\xff' + b'C,C\t\x83\x06\xca\x06\x83\tC,C\x08\x83\x06' + b'\xcc\x06\x83\x08C,C\x08\x83\x05\xc4\x06\xc4\x05\x83\x08' + b'C+D\x06\x85\x04\xc4\x08\xc4\x04\x85\x06C*E\x04' + b'\x86\x05\xc3\n\xc3\x05\x86\x04C*E\x03\x87\x05\xc2\x0c' + b'\xc2\x05\x87\x03C*E\x03\x83\x08\xc3\x0c\xc3\x08\x83\x03' + b'C*E\x03\x83\x08\xc3\x0c\xc3\x08\x83\x03C*E\x03' + b'\x83\x08\xc3\x0c\xc3\x08\x83\x03C*E\x03\x83\x08\xc3\x0c' + b'\xc3\x08\x83\x03C*E\x03\x86\x06\xc2\x0c\xc2\x05\x87\x03' + b'C+D\x04\x86\x05\xc3\n\xc3\x05\x86\x04C,C\x05' + b'\x86\x04\xc4\x08\xc4\x04\x85\x06C,C\x08\x83\x05\xc4\x06' + b'\xc4\x05\x83\x08C,C\x08\x83\x06\xcc\x06\x83\x08C,' + b'C\t\x83\x06\xca\x06\x83\tC,C\x08\x83\n\xc4\n' + b'\x83\x08C,C\x07\x84\x18\x84\x07C,C\x07\x83\x1a' + b'\x83\x07C,C\x07\x83\x05\x81\x0e\x81\x05\x83\x07C,' + b'C\x07\x84\x03\x85\x08\x86\x02\x84\x07C,C\x08\x8d\x04' + b'\x8d\x08C,C\t\x86\x01\x85\x04\x85\x01\x86\tC,' + b'C\n\x84\x04\x83\x04\x83\x04\x84\nC,C\x12\x83\x04' + b'\x83\x12C,C\x13\x88\x13C,C\x13\x88\x13C,' + b'C\x14\x86\x14C,C.C,C.C,C.' + b'C,t-r/p2l?X\x80m\xa6;\xa4' + b'<\xa4<\xa4\x1e' +) +# 2-bit RLE, generated from res/torch_icon.png, 247 bytes +torch = ( + b'\x02' + b'`@' + b'?\xff\xff\xff\xff\xff\xff\xff&\xc6\x0c@\xfdB?\n' + b'\xca\tD?\x08\xc4\x06\xc2\x07F?\x07\xc3\x07\xc2\x06' + b'H?\x06\xc2\n\xc1\x04G\xc2A8\xc5\x08\xc2\t\xc2' + b'\x02F\xc3C7\xc7\x06\xc2\x0b\xc1F\xc2F\x1e\xe8\n' + b'\xc2C\xc3H\x1d\xe8\x0c\xc1N\x1d\xc2%\xc1\x0b\xc2N' + b'\x1d\xc2%\xc1\x0c\xc1N\x1d\xc2\x04\x80m\x9d\x04\xc1\x0b' + b'\xc2N\x1d\xc2\x06\x81\x03\x81\x03\x81\x03\x81\x03\x81\x03\x81' + b'\x03\x81\x06\xc1\x0c\xc1N\x1d\xc2\x04\x9d\x04\xc1\x0b\xc2C' + b'\xcaA\x1d\xc2\x06\x81\x03\x81\x03\x81\x03\x81\x03\x81\x03\x81' + b'\x03\x81\x06\xc1\x0c\xc1N\x1d\xc2\x04\x9d\x04\xc1\x0b\xc2N' + b'\x1d\xc2%\xc1\x0c\xc1N\x1d\xc2%\xc1\x0b\xc2N\x1d\xe8' + b'\x0c\xc1N\x1e\xe8\n\xc2C\xc3H?\x05\xc2\x0b\xc1F' + b'\xc2F?\x06\xc2\t\xc2\x02F\xc3C?\x06\xc2\n\xc1' + b'\x04G\xc2A?\x07\xc3\x07\xc2\x06H?\x08\xc4\x06\xc2' + b'\x07F?\n\xca\tD?\r\xc6\x0cB?\xff\xff\xff' + b'\xff\xff\xff\x95' +) # 1-bit RLE, generated from res/up_arrow.png, 16 bytes up_arrow = (16, 9, b'\x07\x02\r\x04\x0b\x06\t\x08\x07\n\x05\x0c\x03\x0e\x01 ') # 1-bit RLE, generated from res/down_arrow.png, 17 bytes down_arrow = (16, 9, b'\x00 \x01\x0e\x03\x0c\x05\n\x07\x08\t\x06\x0b\x04\r\x02\x07') + |
