From bf965e8bf39a3374885c0539adaa817308c35a4e Mon Sep 17 00:00:00 2001 From: mirivlad Date: Wed, 15 Jul 2026 19:17:13 +0800 Subject: [PATCH] fix: use Verstak brand icon in desktop builds --- README.md | 1 + README.ru.md | 1 + internal/shell/tray/icon_linux_test.go | 27 +++++++++++++- internal/shell/tray/verstak.ico | Bin 27804 -> 23924 bytes internal/shell/tray/verstak.png | Bin 19092 -> 4861 bytes release-notes/v0.1.0-alpha.6.md | 27 ++++++++++++++ scripts/build-windows.sh | 2 ++ scripts/build.sh | 2 ++ scripts/generate-brand-icons.sh | 48 +++++++++++++++++++++++++ scripts/test-package-formats.sh | 2 ++ 10 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 release-notes/v0.1.0-alpha.6.md create mode 100755 scripts/generate-brand-icons.sh diff --git a/README.md b/README.md index e225e41..7f85a72 100644 --- a/README.md +++ b/README.md @@ -232,6 +232,7 @@ Each vault is connected separately. The local vault remains the primary copy of * Node.js 20 or newer with npm; * Python 3; * Git; +* ImageMagick (`magick`) to generate the branded tray and application icons; * Wails v2 build dependencies; * WebKitGTK development packages on Linux. diff --git a/README.ru.md b/README.ru.md index 47ff8e8..f5bf807 100644 --- a/README.ru.md +++ b/README.ru.md @@ -232,6 +232,7 @@ sha256sum -c SHA256SUMS --ignore-missing * Node.js 20 или новее и npm; * Python 3; * Git; +* ImageMagick (`magick`) для генерации фирменных значков трея и приложения; * зависимости для сборки Wails v2; * пакеты разработки WebKitGTK в Linux. diff --git a/internal/shell/tray/icon_linux_test.go b/internal/shell/tray/icon_linux_test.go index aeba076..56e419a 100644 --- a/internal/shell/tray/icon_linux_test.go +++ b/internal/shell/tray/icon_linux_test.go @@ -2,7 +2,13 @@ package tray -import "testing" +import ( + "bytes" + "image" + "image/color" + _ "image/png" + "testing" +) func TestDefaultIconUsesPlatformResource(t *testing.T) { icon := DefaultIcon() @@ -15,4 +21,23 @@ func TestDefaultIconUsesPlatformResource(t *testing.T) { if string(icon[:8]) != "\x89PNG\r\n\x1a\n" { t.Fatal("DefaultIcon() is not PNG data on Linux") } + assertVerstakBrand(t, icon) +} + +func assertVerstakBrand(t *testing.T, icon []byte) { + t.Helper() + image, _, err := image.Decode(bytes.NewReader(icon)) + if err != nil { + t.Fatalf("decode tray icon: %v", err) + } + + want := color.NRGBA{R: 0x1c, G: 0x2f, B: 0x4a, A: 0xff} + for y := image.Bounds().Min.Y; y < image.Bounds().Max.Y; y++ { + for x := image.Bounds().Min.X; x < image.Bounds().Max.X; x++ { + if color.NRGBAModel.Convert(image.At(x, y)) == want { + return + } + } + } + t.Fatal("tray icon does not contain the Verstak navy brand color") } diff --git a/internal/shell/tray/verstak.ico b/internal/shell/tray/verstak.ico index 70a0080ba3270ea6efc1e09049289d0d9c1f6ce1..c31e3d380796923522b633b159190662972f4081 100644 GIT binary patch literal 23924 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 OgrT0PZu&eY|NjFN2wepL literal 27804 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 F{{W8m9xDI< diff --git a/internal/shell/tray/verstak.png b/internal/shell/tray/verstak.png index 5be9e8a7a886ab37e96e51d93bcfd65be8378cfa..42a45ed67087c4f2f69bf930559ac373c12216ba 100644 GIT binary patch literal 4861 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 literal 19092 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
    ;`d&5VX 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/dev/null; then diff --git a/scripts/generate-brand-icons.sh b/scripts/generate-brand-icons.sh new file mode 100755 index 0000000..cc2e750 --- /dev/null +++ b/scripts/generate-brand-icons.sh @@ -0,0 +1,48 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT="$(cd "$(dirname "$0")/.." && pwd)" +MAGICK="${MAGICK_BIN:-magick}" +SOURCE="$ROOT/packaging/linux/verstak.svg" + +if ! command -v "$MAGICK" >/dev/null; then + echo "ImageMagick is required to generate Verstak application icons: $MAGICK not found" >&2 + exit 1 +fi +if [[ ! -f "$SOURCE" ]]; then + echo "Verstak SVG icon source is missing: $SOURCE" >&2 + exit 1 +fi + +render_png() { + local size="$1" + local target="$2" + mkdir -p "$(dirname "$target")" + "$MAGICK" -background none "$SOURCE" -resize "${size}x${size}" "PNG32:$target" +} + +render_ico() { + local target="$1" + shift + local temporary + temporary="$(mktemp -d)" + local images=() + for size in "$@"; do + local image="$temporary/${size}.png" + render_png "$size" "$image" + images+=("$image") + done + mkdir -p "$(dirname "$target")" + "$MAGICK" "${images[@]}" "$target" + rm -rf "$temporary" +} + +render_png 256 "$ROOT/internal/shell/tray/verstak.png" +render_ico "$ROOT/internal/shell/tray/verstak.ico" 16 20 24 32 48 256 + +# Wails consumes this PNG while it prepares the Windows executable resources. +# Both files are generated build inputs and therefore deliberately ignored by Git. +render_png 1024 "$ROOT/build/appicon.png" +render_ico "$ROOT/build/windows/icon.ico" 16 32 48 64 128 256 + +echo "generated Verstak tray and application icons from $SOURCE" diff --git a/scripts/test-package-formats.sh b/scripts/test-package-formats.sh index 45b72f3..dc8a725 100755 --- a/scripts/test-package-formats.sh +++ b/scripts/test-package-formats.sh @@ -53,6 +53,8 @@ grep -Fq 'LinkId=2124701' "$ROOT/README.md" grep -Fq 'WebView2 Runtime' "$ROOT/README.md" grep -Fq 'package-deb.sh' "$ROOT/scripts/release.sh" grep -Fq 'package-appimage.sh' "$ROOT/scripts/release.sh" +grep -Fq 'generate-brand-icons.sh' "$ROOT/scripts/build.sh" +grep -Fq 'generate-brand-icons.sh' "$ROOT/scripts/build-windows.sh" grep -Fq 'package-windows-portable.sh' "$ROOT/scripts/release.sh" git -C "$ROOT" check-ignore -q verstak-desktop-res.syso grep -Fq 'chmod -R a+rX' "$ROOT/scripts/build-linux-bundle.sh"