Menüleisten-Icon-Zustände
Autor: steipete · Aktualisiert: 06.12.2025 · Bereich: macOS-App (apps/macos)
- Idle: Normale Icon-Animation (Blinzeln, gelegentliches Wackeln).
- Pausiert: Status-Item nutzt
appearsDisabled; keine Bewegung. - Sprachauslöser (große Ohren): Der Voice-Wake-Detector 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,9×), bekommen kreisförmige Ohrlöcher für bessere Lesbarkeit und fallen dann überstopVoiceEars()nach 1 s Stille wieder ab. Wird nur von der In-App-Voice-Pipeline ausgelöst. - Arbeitet (Agent läuft):
AppState.isWorking=truesteuert eine “Schwanz/Bein-Wusel”-Mikrobewegung: schnelleres Beinwackeln und leichter Versatz während Arbeit läuft. Wird aktuell bei WebChat-Agent-Aufrufen umgeschaltet; füge denselben Toggle bei anderen längeren Tasks hinzu, wenn du sie verdrahtest.
Verdrahtungspunkte
- Voice-Wake: Runtime/Tester rufen
AppState.triggerVoiceEars(ttl: nil)beim Trigger auf undstopVoiceEars()nach 1 s Stille, um das Erfassungsfenster zu matchen. - Agent-Aktivität: Setze
AppStateStore.shared.setWorking(true/false)um Arbeitsspannen herum (bereits bei WebChat-Agent-Aufrufen gemacht). Halte Spannen kurz und setze indefer-Blöcken zurück, um hängende Animationen zu vermeiden.
Formen & Größen
- Basis-Icon wird in
CritterIconRenderer.makeIcon(blink:legWiggle:earWiggle:earScale:earHoles:)gezeichnet. - Ohrskalierung ist standardmäßig
1.0; Voice-Boost setztearScale=1.9und schaltetearHoles=trueohne den Gesamtrahmen zu ändern (18×18 pt Template-Image gerendert in einen 36×36 px Retina-Backing-Store). - Scurry nutzt Beinwackeln bis ~1,0 mit kleinem horizontalem Ruckeln; es ist additiv zu jedem bestehenden Idle-Wackeln.
Verhaltenshinweise
- Kein externer CLI/Broker-Toggle für Ohren/Arbeiten; halte es intern zu den eigenen Signalen der App, um versehentliches Flattern zu vermeiden.
- Halte TTLs kurz (<10 s), damit das Icon schnell zur Baseline zurückkehrt, wenn ein Job hängt.