菜单栏图标状态

菜单栏图标状态

适用范围

在以下情况使用此页面:

  • 更改菜单栏图标行为

作者:steipete · 更新:2025-12-06 · 范围:macOS 应用(apps/macos

  • 空闲:正常图标动画(眨眼、偶尔摆动)。
  • 暂停:状态项使用 appearsDisabled;无运动。
  • 语音触发(大耳朵):语音唤醒检测器在听到唤醒词时调用 AppState.triggerVoiceEars(ttl: nil),在捕获话语时保持 earBoostActive=true。耳朵放大(1.9x),获得圆形耳孔以提高可读性,然后在 1s 静音后通过 stopVoiceEars() 下降。仅从应用内语音管道触发。
  • 工作中(智能体运行)AppState.isWorking=true 驱动"尾部/腿部急跑"微运动:工作时更快的腿部摆动和轻微偏移。目前围绕 WebChat 智能体运行切换;在连接其他长时间任务时添加相同的切换。

连接点

  • 语音唤醒:运行时/测试器在触发时调用 AppState.triggerVoiceEars(ttl: nil),在 1s 静音后调用 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/代理切换耳朵/工作;保持内部应用自己的信号以避免意外摆动。
  • 保持 TTL 短(<10s),以便图标在作业挂起时快速返回基线。