Files
JW-Player/tools/gen_icons.py
2026-07-13 09:39:24 +02:00

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()