#!/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()