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ältearBoostActive=truewährend die Äußerung erfasst wird. Die Ohren skalieren hoch (1,9x), bekommen kreisförmige Ohrlöcher für bessere Lesbarkeit und fallen dann viastopVoiceEars()nach 1s Stille ab. Wird nur aus der In-App-Voice-Pipeline ausgelöst. - Arbeitend (Agent läuft):
AppState.isWorking=truetreibt 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 undstopVoiceEars()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 indefer-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 setztearScale=1.9und schaltetearHoles=trueum, 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.