// Copyright 2023 System76 // SPDX-License-Identifier: GPL-3.0-only mod localize; mod mouse_area; use std::sync::LazyLock; use std::time::Duration; use crate::{localize::localize, pulse::DeviceInfo}; use config::{AudioAppletConfig, amplification_sink, amplification_source}; use cosmic::{ Element, Renderer, Task, Theme, app, applet::{ cosmic_panel_config::PanelAnchor, menu_button, menu_control_padding, padded_control, token::subscription::{TokenRequest, TokenUpdate, activation_token_subscription}, }, cctk::sctk::reexports::calloop, cosmic_config::CosmicConfigEntry, cosmic_theme::Spacing, iced::{ self, Alignment, Length, Subscription, widget::{self, column, row, slider}, window, }, surface, theme, widget::{Column, Row, button, container, divider, horizontal_space, icon, text}, }; use cosmic_settings_subscriptions::pulse as sub_pulse; use cosmic_time::{Instant, Timeline, anim, chain, id}; use iced::platform_specific::shell::wayland::commands::popup::{destroy_popup, get_popup}; use libpulse_binding::volume::Volume; use mpris_subscription::{MprisRequest, MprisUpdate}; use mpris2_zbus::player::PlaybackStatus; mod config; mod mpris_subscription; mod pulse; // Full, in this case, means 100%. static FULL_VOLUME: f64 = Volume::NORMAL.0 as f64; // Max volume is 150% volume. static MAX_VOLUME: f64 = FULL_VOLUME + (FULL_VOLUME * 0.5); static SHOW_MEDIA_CONTROLS: LazyLock = LazyLock::new(id::Toggler::unique); const GO_BACK: &str = "media-skip-backward-symbolic"; const GO_NEXT: &str = "media-skip-forward-symbolic"; const PAUSE: &str = "media-playback-pause-symbolic"; const PLAY: &str = "media-playback-start-symbolic"; pub fn run() -> cosmic::iced::Result { localize(); cosmic::applet::run::