#!/usr/bin/env bash
# Иконки gntodo растрируются из единственного источника — frontend/public/logo.svg
# (знак «стек входящих» на холсте 64×64 со скруглёнными краями, приём gnexus-creds).
#
# frontend/public/icons/icon-192.png, icon-512.png purpose "any" — они же
# иконка системного уведомления (sw.ts)
# frontend/public/icons/apple-touch-icon.png «на экран Домой» в iOS
# frontend/public/icons/maskable-512.png purpose "maskable"
# extension/public/icons/icon-{16,32,48,128}.png иконки расширения
#
# Сюда же копируется само лого в public/ расширения (попап показывает его из
# своего public — у упакованного расширения свой корень, симлинк не переживёт
# сборку ZIP): копия обновляется этим же скриптом, чтобы не отстать от лого.
#
# Нужен ImageMagick с rsvg (проверка: magick -list format | grep SVG → RSVG).
#
# Углы. Скругление логотипа (rx 10 = 15% стороны) у иконок "any" остаётся
# прозрачным: впечатанный фон сравнялся бы с заливкой холста, скругление стало бы
# невидимым, и иконка читалась бы квадратом с острыми углами — и в шторке
# уведомлений, и у установленного приложения. Там, где прозрачность нельзя, фон
# впечатываем: iOS рисует её чёрным (apple-touch-icon), а maskable на Android
# обрезается по кругу — ему нужен непрозрачный кадр, холст в safe zone (80%).
# После правки логотипа: ./tools/rasterize_icons.sh
set -euo pipefail
cd "$(dirname "$0")/.."
LOGO=frontend/public/logo.svg
PAGE='#16161E' # фон страницы кита — тот же, что у холста логотипа
SAFE=80 # maskable: холст = 80% кадра (safe zone адаптивных иконок Android)
APPLE=180 # apple-touch-icon: рекомендованный iOS размер
raster_rounded() { # raster_rounded <размер> <файл> — скругление источника, углы прозрачны
local size=$1 out=$2
magick -background none -density $((96 * size / 64)) "$LOGO" \
-resize "${size}x${size}" -depth 8 -strip "$out"
}
raster_opaque() { # raster_opaque <итоговый размер> <файл> [размер холста внутри кадра]
local size=$1 out=$2 canvas=${3:-$1}
magick -background "$PAGE" -density $((96 * canvas / 64)) "$LOGO" \
-resize "${canvas}x${canvas}" -gravity center -extent "${size}x${size}" \
-background "$PAGE" -alpha remove -alpha off -depth 8 -strip \
-define png:color-type=2 "$out" # truecolor без альфы — одинаково у всех размеров
}
raster_rounded 192 frontend/public/icons/icon-192.png
raster_rounded 512 frontend/public/icons/icon-512.png
raster_opaque "$APPLE" frontend/public/icons/apple-touch-icon.png
raster_opaque 512 frontend/public/icons/maskable-512.png $((512 * SAFE / 100))
for s in 16 32 48 128; do raster_opaque "$s" "extension/public/icons/icon-$s.png"; done
# лого попапа расширения — копия источника (см. шапку скрипта)
cp "$LOGO" extension/public/logo.svg
command ls -l frontend/public/icons/*.png extension/public/icons/*.png extension/public/logo.svg