23 lines
1.2 KiB
Bash
23 lines
1.2 KiB
Bash
#!/bin/sh
|
|
# Renders app icon sources (resources/icon.svg) to the resources/icon_1024.png
|
|
# that the Builder turns into macOS AppIcons and Windows icon resources.
|
|
# Uses macOS QuickLook (WebKit) for SVG rendering, which paints on opaque white;
|
|
# the icon_mask example then cuts the icon back to its transparent rounded
|
|
# square. Authoring only, nothing at build time depends on it.
|
|
# sh tools/app_icons/render.sh apps/notes/resources/icon.svg [...]
|
|
set -eu
|
|
[ "$#" -gt 0 ] || { printf 'usage: render.sh path/to/icon.svg...\n' >&2; exit 1; }
|
|
tmp=$(mktemp -d "${TMPDIR:-/tmp}/app-icons.XXXXXX")
|
|
trap 'rm -rf "$tmp"' EXIT
|
|
# Build the mask tool once; calling cargo per icon waits on the shared build lock.
|
|
mask=$(cargo metadata --format-version 1 --no-deps 2>/dev/null | sed -n 's/.*"target_directory":"\([^"]*\)".*/\1/p')/release/examples/icon_mask
|
|
[ -x "$mask" ] || cargo build -q --release -p makepad-win-resource --example icon_mask
|
|
for svg in "$@"; do
|
|
dir=$(dirname -- "$svg")
|
|
qlmanage -t -s 1024 -o "$tmp" "$svg" >/dev/null 2>&1
|
|
out="$tmp/$(basename -- "$svg").png"
|
|
[ -f "$out" ] || { printf 'render failed: %s\n' "$svg" >&2; exit 1; }
|
|
mv "$out" "$dir/icon_1024.png"
|
|
"$mask" "$dir/icon_1024.png" >/dev/null
|
|
printf '%s\n' "$dir/icon_1024.png"
|
|
done
|