import Audio from 'resource:///com/github/Aylur/ags/service/audio.js'; import Variable from 'resource:///com/github/Aylur/ags/variable.js'; import { Label } from 'resource:///com/github/Aylur/ags/widget.js'; import OSD from './ctor.js'; import Brightness from '../../services/brightness.js'; import { SpeakerIcon } from '../misc/audio-icons.js'; import { MicIcon } from '../misc/audio-icons.js'; const AUDIO_MAX = 1.5; const ShowSpeaker = Variable(true); globalThis.showSpeaker = () => { ShowSpeaker.value = !ShowSpeaker.value; }; /** * @typedef {import('types/widgets/stack').default} Stack * @typedef {import('types/widgets/progressbar').default} ProgressBar */ /** @param {Stack} stack */ export const SpeakerOSD = (stack) => OSD({ stack, icon: { icon: SpeakerIcon.bind() }, info: { mod: ShowSpeaker, /** @param {ProgressBar} self */ logic: (self) => { if (!Audio.speaker) { return; } self.value = Audio.speaker ? Audio.speaker.volume / AUDIO_MAX : 0; self.sensitive = !Audio.speaker?.stream.is_muted; }, }, }); /** @param {Stack} stack */ export const ScreenBrightnessOSD = (stack) => OSD({ stack, icon: { icon: Brightness.bind('screenIcon') }, info: { mod: Brightness, signal: 'screen', /** @param {ProgressBar} self */ logic: (self) => { self.value = Brightness.screen; }, }, }); /** @param {Stack} stack */ export const KbdBrightnessOSD = (stack) => OSD({ stack, icon: 'keyboard-brightness-symbolic', info: { mod: Brightness, signal: 'kbd', /** @param {ProgressBar} self */ logic: (self) => { if (!self.value) { self.value = Brightness.kbd / 2; return; } self.value = Brightness.kbd / 2; self.sensitive = Brightness.kbd !== 0; }, }, }); /** @param {Stack} stack */ export const MicOSD = (stack) => OSD({ stack, icon: { icon: MicIcon.bind() }, info: { mod: Audio, signal: 'microphone-changed', /** @param {ProgressBar} self */ logic: (self) => { if (!Audio.microphone) { return; } self.value = Audio.microphone ? Audio.microphone.volume : 0; self.sensitive = !Audio.microphone?.stream.is_muted; }, }, }); /** @param {Stack} stack */ export const CapsLockOSD = (stack) => OSD({ stack, icon: { icon: Brightness.bind('capsIcon') }, info: { mod: Brightness, signal: 'caps', widget: Label({ vpack: 'center', label: 'Caps Lock', }), }, });