Files
arcrun-collector/cmd/arcrun-tray/trayicon.go
T
Leo 7ecd740f82 品牌 icon 落地:托盤/app/msix/landing favicon 用 leo 的 CIS
用戶從 rag.arcrun.dev → install.arcrun.dev → 自己的 portal → 托盤,
四個地方應該看到同一個 icon。此前最不一致的就是托盤(Fyne 內建的通用
「儲存」圖示,main.go:1016 留著 TODO)。

素材真身=InkStoneCo/arcrun-cis/(leo 用 Claude Design 做的 CIS)。

托盤(trayicon.go,新檔)
- macOS:template 單色(純黑+alpha),系統依選單列深淺自動反色。
  ⚠️ fyne v2.5.3 只有 *theme.ThemedResource 才會走 systray.SetTemplateIcon
  (driver_desktop.go:169);傳一般 StaticResource 會走 SetIcon=不反色。
- Windows:完整墨底 icon(template 是 mac 專有)。
- 兩份都用 go:embed 內嵌,不讀外部路徑——打包後工作目錄不是原始碼目錄。
- 選單列用雙 chevron 而非完整方形字符:CIS 規定 26px 以下降級成 chevron,
  方塊裡的字符只佔高度 ~28%,22pt 下只剩 ~4px 會糊掉。

app 圖示
- icon.png 換成 CIS 1024 原生;icns 重產含 16→1024 全套 Retina 階梯。

msix(Store)
- 圖示改成預先產好、隨 repo 版控的 assets/store/(含 gen-store-assets.py 可重跑)。
- 修掉一個實際的變形 bug:舊版 `sips -z 150 310 icon.png` 會把方形 icon
  **橫向拉扁**成寬磚(實測產出的字符明顯變形),違反 CIS「never skew or stretch」。
  寬磚改用橫式 lockup 等比置中於墨底。
- 補 71x71/310x310/targetsize-16/24/32/48/256,manifest 一併宣告;
  BackgroundColor 從 transparent 改成品牌 Ink #17181A。

landing favicon(rag.arcrun.dev)
- LOGO_SVG 從琥珀金圓圈暫代圖換成 CIS 正式 mark(單色,CIS:彩色 chevron
  在產品裡代表「這條關係是活的」,用在 logo 會是謊話)。
- 修掉名實不符:`/favicon.ico` 過去回的是 SVG 位元組卻標 image/svg+xml
  (線上實測 200 但 type=image/svg+xml),老瀏覽器與抓圖服務畫不出來。
  現在 .ico 回真 ICO(16/32/48 三尺寸)、apple-touch-icon.png 回真 PNG(180)。
- 三個頁面(首頁/privacy/support)補上 icon link 宣告(此前完全沒有)。

⚠️ installer 這次沒動:`install.arcrun.dev` 的真身是
`installer/oauth-prototype/worker.js`(不在本分支,見 wiki decisions-summary
「installer 有兩個 worker,改錯=白做」),另立一筆處理。

實測證據
- mac .app 執行檔內 grep 到 tray-template.png 位元組(sha f6af940d,位移 14001472);
  Windows exe 內 grep 到 tray-windows.png(sha 59f4f1ac);各自平台只嵌自己那份
  (另一份被 linker 消掉=runtime.GOOS 編譯期常數,正確)。
- msix 重打包過 makemsix unpack 回讀驗證,包內 11 張圖示齊全。
- 已部署 arcrun-landing(版本 b79d19df)。繞快取實測 rag.arcrun.dev:
  favicon.ico→image/x-icon 1573B(3 icons,sha 151e645b=與本機產出同一顆)、
  apple-touch-icon.png→image/png 180x180、首頁 head 三個 link 宣告都在。
  ⚠️ 舊版 max-age=86400 的邊緣快取未 purge(無 zone token),24h 內自然過期。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-31 20:43:55 +08:00

45 lines
1.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package main
import (
_ "embed"
"runtime"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/theme"
)
// 托盤品牌 icon2026-07-31,接 leo 的 CIS;結掉 main.go 舊 TODO「換品牌 icon」)。
//
// 兩平台要的東西不一樣,所以嵌兩份、開機時選一份:
//
// - macOS 選單列=**template icon**(純黑+alpha),系統依淺色/深色選單列自動反色。
// 直接塞墨底彩色方塊在選單列會變成「一顆黑方塊」,非常醜——這是 CIS 也講明的:
// ≤26px 的情境降級成 chevron,不用完整的 `a>>` 方塊(字在 22pt 下只剩 ~4px 高,糊掉)。
// - Windows 系統匣=完整墨底 icon(系統匣背景不固定,template 那套是 mac 專有)。
//
// ⚠️ fyne v2.5.3 的判斷點(internal/driver/glfw/driver_desktop.go:169):
// **只有 `*theme.ThemedResource` 才會走 `systray.SetTemplateIcon`**
// 傳一般的 `StaticResource` 會走 `SetIcon`=不反色。所以 mac 這條一定要包 ThemedResource
// 不能只是「給一張黑白圖」就以為會自動反色。
//
// 用 go:embed 內嵌,**不讀外部檔案路徑**——打包成 .app/.msix 後工作目錄不是原始碼目錄,
// 靠相對路徑找圖必 404(icon 不見)。
var (
//go:embed assets/tray-template.png
trayTemplatePNG []byte
//go:embed assets/tray-windows.png
trayWindowsPNG []byte
)
// trayIcon 回傳當前平台該用的托盤 icon。
func trayIcon() fyne.Resource {
if runtime.GOOS == "windows" {
return fyne.NewStaticResource("arcrun-tray.png", trayWindowsPNG)
}
// mac(與 Linux 一併走這條:深色 panel 下同樣需要單色可反轉的圖)
return theme.NewThemedResource(
fyne.NewStaticResource("arcrun-tray-template.png", trayTemplatePNG),
)
}