選單列圖示狀態

作者:steipete · 更新日期:2025-12-06 · 範圍:macOS 應用程式(apps/macos

  • 閒置: 正常圖示動畫(眨眼、偶爾晃動)。
  • 暫停: 狀態項目使用 appearsDisabled;無動態。
  • 語音觸發(大耳朵): 語音喚醒偵測器在聽到喚醒詞時呼叫 AppState.triggerVoiceEars(ttl: nil),在擷取語音期間維持 earBoostActive=true。耳朵放大(1.9 倍)並加上圓形耳洞以提升可讀性,然後在靜默 1 秒後透過 stopVoiceEars() 恢復。僅由應用程式內建的語音管線觸發。
  • 工作中(代理程式執行中): AppState.isWorking=true 驅動「尾巴/腿部快跑」微動畫:工作進行時腿部擺動加快並有輕微偏移。目前在 WebChat 代理程式呼叫前後切換;新增其他長時間工作時請加上相同的切換。

接線點

  • 語音喚醒:runtime/tester 在觸發時呼叫 AppState.triggerVoiceEars(ttl: nil),靜默 1 秒後呼叫 stopVoiceEars() 以配合擷取時間窗口。
  • 代理程式活動:在工作區間前後設定 AppStateStore.shared.setWorking(true/false)(WebChat 代理程式呼叫中已完成)。保持區間短暫並在 defer 區塊中重設以避免動畫卡住。

形狀與尺寸

  • 基礎圖示在 CritterIconRenderer.makeIcon(blink:legWiggle:earWiggle:earScale:earHoles:) 中繪製。
  • 耳朵縮放預設為 1.0;語音增幅設定 earScale=1.9 並啟用 earHoles=true,不改變整體框架(18×18 pt 模板影像渲染至 36×36 px Retina 後備儲存)。
  • 快跑動畫使用最高約 1.0 的腿部擺動加上小幅水平抖動;與既有的閒置擺動疊加。

行為說明

  • 耳朵/工作狀態沒有外部 CLI/broker 切換控制;保持為應用程式內部信號驅動,避免意外的反覆切換。
  • TTL 保持短暫(<10 秒),確保工作卡住時圖示能快速回到基準狀態。