Initial
This commit is contained in:
45
tools/gen_icons.py
Normal file
45
tools/gen_icons.py
Normal file
@@ -0,0 +1,45 @@
|
||||
#!/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()
|
||||
Reference in New Issue
Block a user