summaryrefslogtreecommitdiff
path: root/tools/themer.py
blob: 2689133e4d02be1e78670131c64db52e4c2e7f72 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#!/usr/bin/env python3
"""Compiles themes for wasp-os"""

from argparse import ArgumentParser, RawTextHelpFormatter
from importlib import import_module
from typing import Tuple

class DefaultTheme():
    """This represents the default theme.

    Import this file and extend the Theme class, only changing the variables.
    Export the resulting class as 'Theme'.
    serialize() should NEVER be overriden!
    """
    BLE_COLOR = 0x7bef
    SCROLL_INDICATOR_COLOR = 0x7bef
    BATTERY_COLOR = 0x7bef
    SMALL_CLOCK_COLOR = 0xe73c
    NOTIFICATION_COLOR = 0x7bef
    BRIGHT = 0xffff
    MID = 0xbdb6
    UI = 0x39ff
    SPOT1 = 0xff00
    SPOT2 = 0xddd0
    CONTRAST = 15

    def serialize(self) -> bytes:
        """Serializes the theme for use in wasp-os"""
        def split_bytes(x: int) -> Tuple[int, int]:
            return ((x >> 8) & 0xFF, x & 0xFF)
        theme_bytes = bytes([
            *split_bytes(self.BLE_COLOR),
            *split_bytes(self.SCROLL_INDICATOR_COLOR),
            *split_bytes(self.BATTERY_COLOR),
            *split_bytes(self.SMALL_CLOCK_COLOR),
            *split_bytes(self.NOTIFICATION_COLOR),
            *split_bytes(self.BRIGHT),
            *split_bytes(self.MID),
            *split_bytes(self.UI),
            *split_bytes(self.SPOT1),
            *split_bytes(self.SPOT2),
            *split_bytes(self.CONTRAST)
        ])
        return theme_bytes


if __name__ == '__main__':
    parser = ArgumentParser(
        description='''Compiles themes into a format understood by wasp-os.

For the theme to take effect, the resulting string should be put in main.py
like this:

   theme_string = THEME_STRING_GOES_HERE
''',
        epilog=''' To create a theme, import this file and extend the
DefaultTheme class, only changing the variables.

Export the resulting class as 'Theme'.

Example:
--------

theme.py:

    from themer import DefaultTheme

    class Theme(DefaultTheme):
        BLE_ICON_COLOR = 0x041F

shell:

    # NOTE: do not include .py at end of file!
    $ ./themer.py theme
    > b'\\xef{\\xef{\\xef{<\\xe7\\xef{\\xb6\\xb5\\xb6\\xbd\\xff\\xff\\xff9'

main.py:

    ...
    wasp.system.set_theme(
        b'\\xef{\\xef{\\xef{<\\xe7\\xef{\\xb6\\xb5\\xb6\\xbd\\xff\\xff\\xff9')
    ...
''',
        formatter_class=RawTextHelpFormatter
    )

    parser.add_argument('input_file', type=str, nargs=1)
    args = parser.parse_args()

    theme = DefaultTheme()
    theme = import_module(args.input_file[0]).Theme()
    print(theme.serialize())