mirror of
https://github.com/storytold/soundcraft.git
synced 2026-10-27 03:56:45 -06:00
Bash scripts under packaging/ now use [[ ]] for tests, copy positional parameters into named locals inside functions, and end env.sh helpers with an explicit return (bare, so each keeps its exit status). shellcheck clean.
62 lines
2.2 KiB
Bash
Executable File
62 lines
2.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Regenerate every app icon from assets/app-icon/icon.svg.
|
|
#
|
|
# Needs: resvg (brew install resvg / cargo install resvg). On macOS, iconutil also writes the
|
|
# .icns. The outputs are committed, so builds and packaging never need these tools.
|
|
#
|
|
# packaging/icons.sh
|
|
set -euo pipefail
|
|
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
DIR="$ROOT/assets/app-icon"
|
|
SVG="$DIR/icon.svg"
|
|
ID="ai.storyteller.soundcraft"
|
|
TMP="$(mktemp -d)"
|
|
trap 'rm -rf "$TMP"' EXIT
|
|
|
|
command -v resvg >/dev/null || { echo "error: resvg not found (brew install resvg)" >&2; exit 1; }
|
|
|
|
# The artwork is a full-bleed 512 tile (rx=112). Windows and Linux use it as is. macOS icons sit on
|
|
# Apple's grid: an 824/1024 body with a transparent margin, so widen the viewBox to 512*1024/824.
|
|
MAC="$TMP/mac.svg"
|
|
sed 's/viewBox="0 0 512 512"/viewBox="-62.136 -62.136 636.272 636.272"/' "$SVG" >"$MAC"
|
|
grep -q 'viewBox="-62.136' "$MAC" || { echo "error: expected viewBox=\"0 0 512 512\" in $SVG" >&2; exit 1; }
|
|
|
|
render() {
|
|
local svg="$1" size="$2" out="$3"
|
|
resvg -w "$size" -h "$size" "$svg" "$out" </dev/null
|
|
}
|
|
|
|
render "$SVG" 1024 "$DIR/soundcraft-1024.png"
|
|
# Runtime window/Dock icon on macOS (embedded by apps/soundcraft); other platforms use hicolor 256.
|
|
render "$MAC" 512 "$DIR/soundcraft-macos-512.png"
|
|
|
|
# Linux hicolor theme.
|
|
for s in 16 24 32 48 64 128 256 512; do
|
|
mkdir -p "$DIR/hicolor/${s}x${s}/apps"
|
|
render "$SVG" "$s" "$DIR/hicolor/${s}x${s}/apps/$ID.png"
|
|
done
|
|
mkdir -p "$DIR/hicolor/scalable/apps"
|
|
cp "$SVG" "$DIR/hicolor/scalable/apps/$ID.svg"
|
|
|
|
# Windows .ico.
|
|
ICO_PNGS=()
|
|
for s in 16 20 24 32 40 48 64 128 256; do
|
|
render "$SVG" "$s" "$TMP/ico-$s.png"
|
|
ICO_PNGS+=("$TMP/ico-$s.png")
|
|
done
|
|
(cd "$ROOT" && cargo run -q -p xtask -- ico "$DIR/soundcraft.ico" "${ICO_PNGS[@]}")
|
|
|
|
# macOS .icns.
|
|
if command -v iconutil >/dev/null; then
|
|
SET="$TMP/soundcraft.iconset"
|
|
mkdir -p "$SET"
|
|
for s in 16 32 128 256 512; do
|
|
render "$MAC" "$s" "$SET/icon_${s}x${s}.png"
|
|
render "$MAC" $((s * 2)) "$SET/icon_${s}x${s}@2x.png"
|
|
done
|
|
iconutil -c icns -o "$DIR/soundcraft.icns" "$SET"
|
|
else
|
|
echo "warning: iconutil not found (macOS only); soundcraft.icns not regenerated" >&2
|
|
fi
|
|
echo "icons written to $DIR"
|