apple_cursor/builder/src/generator.py
2021-11-06 17:24:31 +05:30

132 lines
4.3 KiB
Python

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from pathlib import Path
from typing import Any, Dict, NamedTuple
from clickgen.builders import WindowsCursor, XCursor
from clickgen.core import CursorAlias
from clickgen.packagers import WindowsPackager, XPackager
from .constants import AUTHOR, URL
from .symlinks import add_missing_xcursor
class Info(NamedTuple):
"""Theme basic information.
:param name: Theme title.
:type name: ``str``
:param comment: quick information about theme.
:type comment: ``str``
"""
name: str
comment: str
def xbuild(config: Dict[str, Dict[str, Any]], x_out_dir: Path, info: Info) -> None:
"""Build `macOSBigSur` cursor theme for only `X11`(UNIX) platform.
:param config: `macOSBigSur` configuration.
:type config: ``Dict``
:param x_out_dir: Path to the output directory,\
Where the `X11` cursor theme package will generate.\
It also creates a directory if not exists.
:type x_out_dir: ``pathlib.Path``
:param info: Content theme name & comment.
:type info: Info
"""
for _, item in config.items():
with CursorAlias.from_bitmap(item["png"], item["hotspot"]) as alias:
x_cfg = alias.create(item["x_sizes"], item["delay"])
print(f"Building '{x_cfg.stem}' XCursor...")
XCursor.create(x_cfg, x_out_dir)
add_missing_xcursor(x_out_dir / "cursors")
XPackager(x_out_dir, info.name, info.comment)
def wbuild(config: Dict[str, Dict[str, Any]], win_out_dir: Path, info: Info) -> None:
"""Build `macOSBigSur` cursor theme for only `Windows` platforms.
:param config: `macOSBigSur` configuration.
:type config: ``Dict``
:param win_out_dir: Path to the output directory,\
Where the `Windows` cursor theme package will generate.\
It also creates a directory if not exists.
:type win_out_dir: ``pathlib.Path``
:param info: Content theme name & comment.
:type info: Info
"""
for _, item in config.items():
with CursorAlias.from_bitmap(item["png"], item["hotspot"]) as alias:
alias.create(item["x_sizes"], item["delay"])
if item.get("win_key"):
win_cfg = alias.reproduce(
size=item["win_size"],
canvas_size=item["canvas_size"],
position=item["position"],
delay=item["win_delay"],
).rename(item["win_key"])
print(f"Building '{win_cfg.stem}' Windows Cursor...")
WindowsCursor.create(win_cfg, win_out_dir)
WindowsPackager(win_out_dir, info.name, info.comment, AUTHOR, URL)
def build(
config: Dict[str, Dict[str, Any]], x_out_dir: Path, win_out_dir: Path, info: Info
) -> None:
"""Build `macOSBigSur` cursor theme for `X11` & `Windows` platforms.
:param config: `macOSBigSur` configuration.
:type config: ``Dict``
:param x_out_dir: Path to the output directory,\
Where the `X11` cursor theme package will generate.\
It also creates a directory if not exists.
:type x_out_dir: ``pathlib.Path``
:param win_out_dir: Path to the output directory,\
Where the `Windows` cursor theme package will generate.\
It also creates a directory if not exists.
:type win_out_dir: ``pathlib.Path``
:param info: Content theme name & comment.
:type info: Info
"""
for _, item in config.items():
with CursorAlias.from_bitmap(item["png"], item["hotspot"]) as alias:
x_cfg = alias.create(item["x_sizes"], item["delay"])
print(f"Building '{x_cfg.stem}' XCursor...")
XCursor.create(x_cfg, x_out_dir)
if item.get("win_key"):
win_cfg = alias.reproduce(
size=item["win_size"],
canvas_size=item["canvas_size"],
position=item["position"],
delay=item["win_delay"],
).rename(item["win_key"])
print(f"Building '{win_cfg.stem}' Windows Cursor...")
WindowsCursor.create(win_cfg, win_out_dir)
add_missing_xcursor(x_out_dir / "cursors")
XPackager(x_out_dir, info.name, info.comment)
WindowsPackager(win_out_dir, info.name, info.comment, AUTHOR, URL)