summaryrefslogtreecommitdiff
path: root/icon/convert.py
blob: b550709b4ff79fc85b7c9b2da28274efcb163a1b (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
#!/usr/bin/env python3


import argparse
import dataclasses
import os
import pathlib
import subprocess
import sys

DESCRIPTION = "Script to convert main icon file to all required formats"
SCRIPT = pathlib.Path(__file__).resolve()
ICON = SCRIPT.parent
MAIN = ICON / "main.svg"
ANDROID = ICON / "android"


def main() -> None:
    _ = Arguments.from_list(sys.argv)

    os.makedirs(ANDROID, exist_ok=True)
    inkscape(MAIN, ANDROID / "default.png")
    inkscape(MAIN, ANDROID / "foreground.png", ids=("foreground",))
    inkscape(MAIN, ANDROID / "background.png", ids=("background",))


@dataclasses.dataclass(frozen=True, kw_only=True)
class Arguments:

    @staticmethod
    def from_list(args: list[str]) -> "Arguments":
        parser = argparse.ArgumentParser(description=DESCRIPTION)

        parser.parse_args(args[1:])

        return Arguments()


def inkscape(
    source: pathlib.Path,
    sink: pathlib.Path,
    ids: tuple[str, ...] = ("foreground", "background"),
    width: int = 1024,
    height: int = 1024,
) -> None:
    subprocess.run(
        (
            # fmt: off
            "inkscape", str(source),
            "--export-filename", str(sink),
            "--export-area-page",
            "--export-id", ";".join(ids),
            "--export-width", str(width),
            "--export-height", str(height),
            "--export-id-only",
            # fmt: on
        ),
        check=True,
        shell=False,
        stdout=subprocess.DEVNULL,
        stderr=subprocess.DEVNULL,
    )


if __name__ == "__main__":
    main()