46 lines
1.5 KiB
Python
46 lines
1.5 KiB
Python
#!/usr/bin/env python3
|
|
"""Rasterise assembly-player.svg into the PNG sizes needed by the hicolor icon theme."""
|
|
import os
|
|
import sys
|
|
|
|
import gi
|
|
|
|
gi.require_version("Rsvg", "2.0")
|
|
from gi.repository import Rsvg
|
|
import cairo
|
|
|
|
ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
|
SVG_PATH = os.path.join(ROOT, "assembly_player", "icons", "assembly-player.svg")
|
|
SIZES = (16, 22, 24, 32, 48, 64, 128, 256, 512)
|
|
|
|
|
|
def render(size, out_path):
|
|
handle = Rsvg.Handle.new_from_file(SVG_PATH)
|
|
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, size, size)
|
|
ctx = cairo.Context(surface)
|
|
viewport = Rsvg.Rectangle()
|
|
viewport.x, viewport.y, viewport.width, viewport.height = 0, 0, size, size
|
|
handle.render_document(ctx, viewport)
|
|
surface.write_to_png(out_path)
|
|
|
|
|
|
def main():
|
|
out_dir = sys.argv[1] if len(sys.argv) > 1 else os.path.join(ROOT, "build", "icons")
|
|
for size in SIZES:
|
|
size_dir = os.path.join(out_dir, f"{size}x{size}", "apps")
|
|
os.makedirs(size_dir, exist_ok=True)
|
|
out_path = os.path.join(size_dir, "assembly-player.png")
|
|
render(size, out_path)
|
|
print(f"wrote {out_path}")
|
|
|
|
scalable_dir = os.path.join(out_dir, "scalable", "apps")
|
|
os.makedirs(scalable_dir, exist_ok=True)
|
|
scalable_svg = os.path.join(scalable_dir, "assembly-player.svg")
|
|
with open(SVG_PATH, "rb") as src, open(scalable_svg, "wb") as dst:
|
|
dst.write(src.read())
|
|
print(f"wrote {scalable_svg}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|