الانتقال إلى المحتوى الرئيسي

حالات أيقونة شريط القوائم

المؤلف: steipete · آخر تحديث: 2025-12-06 · النطاق: تطبيق macOS ‏(apps/macos)
  • الخمول: حركة الأيقونة العادية (رمش، واهتزاز خفيف من حين لآخر).
  • الإيقاف المؤقت: يستخدم عنصر الحالة appearsDisabled؛ بلا حركة.
  • مشغل الصوت (آذان كبيرة): يستدعي كاشف التنبيه الصوتي AppState.triggerVoiceEars(ttl: nil) عند سماع كلمة التنبيه، مما يُبقي earBoostActive=true أثناء التقاط العبارة. تكبر الأذنان (1.9x)، وتحصلان على فتحات دائرية للوضوح، ثم تنخفضان عبر stopVoiceEars() بعد ثانية واحدة من الصمت. ولا يتم تشغيل هذا إلا من مسار الصوت داخل التطبيق.
  • العمل جارٍ (الوكيل يعمل): يقود AppState.isWorking=true حركة دقيقة من نوع “حركة ذيل/أرجل سريعة”: اهتزاز أسرع للأرجل مع انزياح طفيف أثناء وجود العمل قيد التنفيذ. يتم تبديله حاليًا حول تشغيلات وكيل WebChat؛ أضف المفتاح نفسه حول المهام الطويلة الأخرى عند توصيلها.
نقاط الربط
  • التنبيه الصوتي: يستدعي runtime/tester الأمر AppState.triggerVoiceEars(ttl: nil) عند التشغيل وstopVoiceEars() بعد ثانية واحدة من الصمت لمطابقة نافذة الالتقاط.
  • نشاط الوكيل: اضبط AppStateStore.shared.setWorking(true/false) حول فترات العمل (وقد تم ذلك بالفعل في استدعاء وكيل WebChat). أبقِ هذه الفترات قصيرة وأعد الضبط داخل كتل defer لتجنب تعلق الرسوم المتحركة.
الأشكال والأحجام
  • تُرسَم الأيقونة الأساسية في CritterIconRenderer.makeIcon(blink:legWiggle:earWiggle:earScale:earHoles:).
  • يكون مقياس الأذن افتراضيًا 1.0؛ ويضبط التعزيز الصوتي earScale=1.9 ويبدّل earHoles=true من دون تغيير الإطار العام (صورة template بحجم 18×18 نقطة تُرسَم داخل backing store بحجم 36×36 بكسل Retina).
  • تستخدم حركة scurry اهتزازًا للأرجل يصل إلى نحو ~1.0 مع اهتزاز أفقي صغير؛ وهي تُضاف إلى أي اهتزاز خمول موجود.
ملاحظات سلوكية
  • لا يوجد تبديل خارجي عبر CLI/broker للأذنين/حالة العمل؛ احتفظ به داخليًا ضمن إشارات التطبيق نفسه لتجنب الاهتزاز العرضي.
  • أبقِ قيم TTL قصيرة (<10s) حتى تعود الأيقونة إلى خط الأساس سريعًا إذا علقت مهمة ما.