Menüleisten-Icon-Zustände

Autor: steipete · Aktualisiert: 2025-12-06 · Bereich: macOS-App (apps/macos)

  • Idle: Normale Icon-Animation (Blinzeln, gelegentliches Wackeln).
  • Pausiert: Status-Item nutzt appearsDisabled; keine Bewegung.
  • Voice-Trigger (große Ohren): Der Voice-Wake-Detektor ruft AppState.triggerVoiceEars(ttl: nil) auf, wenn das Wake-Word erkannt wird, und hält earBoostActive=true während die Äußerung erfasst wird. Die Ohren skalieren hoch (1,9x), bekommen kreisförmige Ohrlöcher für bessere Lesbarkeit und fallen dann via stopVoiceEars() nach 1s Stille ab. Wird nur aus der In-App-Voice-Pipeline ausgelöst.
  • Arbeitend (Agent läuft): AppState.isWorking=true treibt eine „Schwanz/Bein-Wusel”-Mikrobewegung an: schnelleres Beinwackeln und leichter Versatz während Arbeit läuft. Derzeit um WebChat-Agent-Runs geschaltet; schalte denselben Toggle um andere lange Aufgaben, wenn du sie verdrahtest.

Verdrahtungspunkte

  • Voice Wake: Runtime/Tester rufen AppState.triggerVoiceEars(ttl: nil) beim Trigger auf und stopVoiceEars() nach 1s Stille, passend zum Erfassungsfenster.
  • Agent-Aktivität: Setze AppStateStore.shared.setWorking(true/false) um Arbeitsabschnitte (bereits für WebChat-Agent-Call implementiert). Halte Abschnitte kurz und setze in defer-Blöcken zurück, um festgefahrene Animationen zu vermeiden.

Formen & Größen

  • Basis-Icon gezeichnet in CritterIconRenderer.makeIcon(blink:legWiggle:earWiggle:earScale:earHoles:).
  • Ohr-Skalierung standardmäßig 1.0; Voice-Boost setzt earScale=1.9 und schaltet earHoles=true um, ohne den Gesamtrahmen zu ändern (18×18 pt Template-Image gerendert in einen 36×36 px Retina-Backingstore).
  • Wuseln nutzt Beinwackeln bis ~1,0 mit einem kleinen horizontalen Zittern; es addiert sich auf bestehendes Idle-Wackeln.

Verhaltenshinweise

  • Kein externer CLI/Broker-Toggle für Ohren/Arbeitend; halte es intern bei den eigenen Signalen der App, um versehentliches Flattern zu vermeiden.
  • Halte TTLs kurz (<10s), damit das Icon schnell zum Ausgangszustand zurückkehrt, wenn ein Job hängt.