mirror of
https://github.com/arabianq/pipewire-soundpad.git
synced 2026-07-26 05:46:59 +00:00
feat(lib, daemon, cli, gui): add volume multiplier (#175)
* initial implementation * rename DaemonConfig.volume_multiplier to default_volume_multiplier * add volume_multiplier to the FullState * add pwsp-gui integration
This commit is contained in:
@@ -217,6 +217,28 @@ kz = "Әрқашан дыбыс деңгейін есте сақтау"
|
||||
he = "זכור תמיד עוצמת קול"
|
||||
pt-BR = "Lembrar volume"
|
||||
|
||||
[gui.settings.remember_volume_multiplier]
|
||||
en = "Always remember volume multiplier"
|
||||
ru = "Всегда запоминать множитель громкости"
|
||||
es = "Recordar siempre el multiplicador de volumen"
|
||||
fr = "Toujours se souvenir du multiplicateur de volume"
|
||||
zh = "始终记住音量乘数"
|
||||
ar = "تذكر ضرب الصوت دائمًا"
|
||||
kz = "Әрқашан дыбыс деңгейін есте сақтау"
|
||||
he = "זכור תמיד עוצמת קול"
|
||||
pt-BR = "Lembrar volume"
|
||||
|
||||
[gui.settings.volume_multiplier]
|
||||
en = "Volume multiplier"
|
||||
ru = "Множитель громкости"
|
||||
es = "Multiplicador de volumen"
|
||||
fr = "Multiplicateur de volume"
|
||||
zh = "音量乘数"
|
||||
ar = "ضرب الصوت"
|
||||
kz = "Дыбыс деңгейі"
|
||||
he = "עוצמת קול"
|
||||
pt-BR = "Volume"
|
||||
|
||||
[gui.settings.remember_mic]
|
||||
en = "Always remember microphone"
|
||||
ru = "Всегда запоминать микрофон"
|
||||
|
||||
@@ -93,6 +93,24 @@ impl App for SoundpadGui {
|
||||
}
|
||||
}
|
||||
|
||||
if self.app_state.volume_multiplier_dragged {
|
||||
make_request_async(Request::set_volume_multiplier(
|
||||
self.app_state.volume_multiplier_slider_value,
|
||||
));
|
||||
|
||||
self.app_state.volume_multiplier_dragged = false;
|
||||
self.app_state.ignore_volume_multiplier_update_until =
|
||||
Some(Instant::now() + Duration::from_millis(300));
|
||||
|
||||
if self.config.save_volume_multiplier
|
||||
&& let Ok(mut daemon_config) = get_daemon_config()
|
||||
{
|
||||
daemon_config.default_volume_multiplier =
|
||||
Some(self.app_state.volume_multiplier_slider_value);
|
||||
update_daemon_config(&daemon_config).ok();
|
||||
}
|
||||
}
|
||||
|
||||
// Sync audio player state
|
||||
{
|
||||
let mut guard = self
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
use crate::gui::SoundpadGui;
|
||||
use egui::{Align, Button, Color32, ComboBox, Layout, RichText, Ui};
|
||||
use egui::{Align, Button, Color32, ComboBox, Layout, RichText, Slider, Ui};
|
||||
use egui_material_icons::icons::ICON_ARROW_BACK;
|
||||
use pwsp_lib::types::config::PreferredTheme;
|
||||
use rust_i18n::t;
|
||||
@@ -34,6 +34,10 @@ impl SoundpadGui {
|
||||
&mut self.config.save_volume,
|
||||
t!("gui.settings.remember_volume"),
|
||||
);
|
||||
let save_volume_multiplier_response = ui.checkbox(
|
||||
&mut self.config.save_volume_multiplier,
|
||||
t!("gui.settings.remember_volume_multiplier"),
|
||||
);
|
||||
let save_input_response =
|
||||
ui.checkbox(&mut self.config.save_input, t!("gui.settings.remember_mic"));
|
||||
let save_scale_response = ui.checkbox(
|
||||
@@ -46,6 +50,7 @@ impl SoundpadGui {
|
||||
);
|
||||
|
||||
if save_volume_response.changed()
|
||||
|| save_volume_multiplier_response.changed()
|
||||
|| save_input_response.changed()
|
||||
|| save_scale_response.changed()
|
||||
|| pause_on_exit_response.changed()
|
||||
@@ -88,6 +93,39 @@ impl SoundpadGui {
|
||||
}
|
||||
// --------------------------------
|
||||
|
||||
ui.separator();
|
||||
|
||||
// ----------- Sliders ------------
|
||||
// Volume multiplier
|
||||
let should_update_multiplier = !self.app_state.volume_multiplier_dragged
|
||||
&& self
|
||||
.app_state
|
||||
.ignore_volume_multiplier_update_until
|
||||
.map(|t| std::time::Instant::now() > t)
|
||||
.unwrap_or(true);
|
||||
|
||||
if should_update_multiplier {
|
||||
self.app_state.volume_multiplier_slider_value =
|
||||
self.audio_player_state.volume_multiplier;
|
||||
}
|
||||
|
||||
ui.horizontal(|ui| {
|
||||
let slider = Slider::new(
|
||||
&mut self.app_state.volume_multiplier_slider_value,
|
||||
0.01..=3.0,
|
||||
);
|
||||
let response = ui.add(slider);
|
||||
ui.label(t!("gui.settings.volume_multiplier"));
|
||||
|
||||
if response.changed() {
|
||||
// This condition is required to avoid spamming requests while dragging, but to allow changing the value via TextEdit
|
||||
if !response.dragged() || (response.dragged() && response.drag_stopped()) {
|
||||
self.app_state.volume_multiplier_dragged = true;
|
||||
}
|
||||
}
|
||||
});
|
||||
// --------------------------------
|
||||
|
||||
ui.with_layout(Layout::bottom_up(Align::Min), |ui| {
|
||||
ui.label(t!(
|
||||
"gui.settings.version",
|
||||
|
||||
Reference in New Issue
Block a user