import { Astal, Gtk } from "ags/gtk4"; import { createBinding, createState, With } from "ags"; import { Wireplumber } from "../../modules/volume"; import { Windows } from "../../windows"; import { Backlights } from "../../modules/backlight"; import { secureBaseBinding, variableToBoolean } from "../../modules/utils"; import Pango from "gi://Pango?version=1.0"; import GLib from "gi://GLib?version=2.0"; import AstalWp from "gi://AstalWp?version=0.1"; import OSDMode from "./modules/osdmode"; export const OSDModes = { sink: new OSDMode({ available: createBinding(AstalWp.get_default(), "defaultSpeaker").as((sink) => Boolean(sink)), icon: secureBaseBinding( createBinding(AstalWp.get_default(), "defaultSpeaker"), "volumeIcon", "audio-volume-high-symbolic" ), value: secureBaseBinding( createBinding(AstalWp.get_default(), "defaultSpeaker"), "volume", .5 ), text: secureBaseBinding( createBinding(AstalWp.get_default(), "defaultSpeaker"), "description", "Unknown Speaker" ), max: Wireplumber.getDefault().getMaxSinkVolume() / 100 }), brightness: new OSDMode({ icon: "display-brightness-symbolic", value: secureBaseBinding( createBinding(Backlights.getDefault(), "default"), "brightness", 100 ), max: secureBaseBinding( createBinding(Backlights.getDefault(), "default"), "maxBrightness", 100 ), text: secureBaseBinding( createBinding(Backlights.getDefault(), "default"), "name", "Unknown Backlight" ), available: createBinding(Backlights.getDefault(), "available") }) } const [osdMode, setOSDMode] = createState(OSDModes.sink); let osdTimer: (GLib.Source|undefined), osdTimeout = 3500; export const OSD = (mon: number) => {(mode: OSDMode) => { if(!mode.available) return; return t ?? "")} ellipsize={Pango.EllipsizeMode.END} visible={variableToBoolean(createBinding(mode, "text"))} /> ; }} ; export function triggerOSD(mode: OSDMode) { setOSDMode(mode); Windows.getDefault().open("osd"); if(!osdTimer) { osdTimer = setTimeout(() => { osdTimer = undefined; Windows.getDefault().close("osd"); }, osdTimeout); return; } osdTimer.destroy(); osdTimer = setTimeout(() => { Windows.getDefault().close("osd"); osdTimer = undefined; }, osdTimeout); }