Estados del icono de la barra de menús
Ámbito: app de macOS (apps/macos). Renderizado: CritterIconRenderer.makeIcon(...). Cableado de animación/estado: CritterStatusLabel + CritterStatusLabel+Behavior.swift.
Estados
| Estado | Activador | Visual |
|---|---|---|
| Inactivo | Predeterminado | Animación normal de parpadeo/meneo |
| Pausado | isPaused=true | El elemento de estado usa appearsDisabled; sin movimiento |
| Activación por voz (orejas grandes) | Se oyó la palabra de activación | Las orejas escalan a 1.9x con earHoles=true (agujeros circulares para legibilidad); desaparece tras el silencio |
| Trabajando | isWorking=true o un IconState activo | Meneo de patas más rápido (legWiggle hasta 1.0) más un pequeño desplazamiento horizontal; aditivo al meneo inactivo |
chevron.left.slash.chevron.right para exec) puede renderizarse encima del mismo icono de criatura cuando una sesión tiene un trabajo o una herramienta activos. Esa insignia proviene de IconState/ActivityKind; consulta Barra de menús para ver el modelo de estado completo.
Orejas de activación por voz
- Activador:
AppStateStore.shared.triggerVoiceEars(ttl: nil), llamado desde la canalización de captura de activación por voz (VoiceWakeRuntime) y desde las herramientas de depuración/prueba de activación por voz (VoiceWakeTester,VoiceWakeOverlayController). - Detener:
stopVoiceEars(), llamado cuando finaliza la captura. - Ventana de silencio antes de finalizar:
2.0snormalmente,5.0ssi solo se oyó la palabra activadora y no siguió más habla (VoiceWakeRuntime.silenceWindow/triggerOnlySilenceWindow). - Mientras está reforzado, los temporizadores inactivos de parpadeo/meneo/patas/orejas se suspenden (
earBoostActivecontrola la tarea de animación enCritterStatusLabel+Behavior).
Formas y tamaños
- Lienzo: imagen de plantilla de 18x18 pt, renderizada en un almacén de respaldo de mapa de bits de 36x36 px (2x) para que el icono se mantenga nítido en Retina.
- La escala de orejas predeterminada es
1.0; el refuerzo por voz estableceearScale=1.9yearHoles=truesin cambiar el marco general. - El correteo de patas usa
legWigglehasta1.0con una pequeña sacudida horizontal.
Notas de comportamiento
- No hay interruptor externo de CLI/broker para las orejas o el estado de trabajo; ambos se controlan internamente mediante señales de la app (
AppState.setWorking,AppState.triggerVoiceEars) para evitar oscilaciones accidentales. - Mantén cualquier TTL nuevo corto (muy por debajo de 10 s) para que el icono vuelva rápidamente al estado base si un trabajo se cuelga.