Saltar al contenido principal

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

EstadoActivadorVisual
InactivoPredeterminadoAnimación normal de parpadeo/meneo
PausadoisPaused=trueEl elemento de estado usa appearsDisabled; sin movimiento
Activación por voz (orejas grandes)Se oyó la palabra de activaciónLas orejas escalan a 1.9x con earHoles=true (agujeros circulares para legibilidad); desaparece tras el silencio
TrabajandoisWorking=true o un IconState activoMeneo de patas más rápido (legWiggle hasta 1.0) más un pequeño desplazamiento horizontal; aditivo al meneo inactivo
Una insignia de actividad de herramienta (puck de SF Symbol, por ejemplo 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.0s normalmente, 5.0s si 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 (earBoostActive controla la tarea de animación en CritterStatusLabel+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 establece earScale=1.9 y earHoles=true sin cambiar el marco general.
  • El correteo de patas usa legWiggle hasta 1.0 con 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.

Relacionado