Перейти до основного вмісту

Стани піктограми рядка меню

Автор: steipete · Оновлено: 2025-12-06 · Область: macOS app (apps/macos)
  • Бездіяльність: Звичайна анімація піктограми (кліпання, періодичне похитування).
  • Призупинено: Елемент статусу використовує appearsDisabled; без руху.
  • Голосовий тригер (великі вуха): Детектор голосового пробудження викликає AppState.triggerVoiceEars(ttl: nil), коли почуто слово активації, зберігаючи earBoostActive=true, поки захоплюється висловлювання. Вуха збільшуються (1.9x), отримують круглі отвори у вухах для кращої читабельності, потім опускаються через stopVoiceEars() після 1 с тиші. Спрацьовує лише з внутрішнього голосового конвеєра app.
  • Робота (агент виконується): AppState.isWorking=true керує мікрорухом “метушні хвоста/лап”: швидше похитування лап і невелике зміщення, поки виконується робота. Зараз перемикається навколо запусків агента WebChat; додайте таке саме перемикання навколо інших довгих завдань, коли будете їх підключати.
Точки підключення
  • Голосове пробудження: runtime/tester викликає AppState.triggerVoiceEars(ttl: nil) при спрацьовуванні та stopVoiceEars() після 1 с тиші, щоб відповідати вікну захоплення.
  • Активність агента: встановлюйте AppStateStore.shared.setWorking(true/false) навколо інтервалів роботи (у виклику агента WebChat це вже зроблено). Тримайте інтервали короткими та скидайте їх у блоках defer, щоб уникнути завислих анімацій.
Форми й розміри
  • Базова піктограма малюється в CritterIconRenderer.makeIcon(blink:legWiggle:earWiggle:earScale:earHoles:).
  • Масштаб вух за замовчуванням становить 1.0; голосове підсилення встановлює earScale=1.9 і перемикає earHoles=true, не змінюючи загальний кадр (шаблонне зображення 18×18 pt рендериться в буфер Retina 36×36 px).
  • Метушня використовує похитування лап до ~1.0 з невеликим горизонтальним тремтінням; вона додається до будь-якого наявного похитування в стані бездіяльності.
Поведінкові примітки
  • Немає зовнішнього перемикача CLI/broker для вух/роботи; залишайте це внутрішнім для власних сигналів app, щоб уникнути випадкового миготіння.
  • Тримайте TTL короткими (<10s), щоб піктограма швидко поверталася до базового стану, якщо завдання зависне.