feat: add fps flag

This commit is contained in:
talwat 2025-05-05 13:16:01 +02:00
parent 315fa105bf
commit 2ccf073646
2 changed files with 8 additions and 9 deletions

View File

@ -39,6 +39,10 @@ struct Args {
#[clap(long, short)] #[clap(long, short)]
paused: bool, paused: bool,
/// FPS of the UI.
#[clap(long, short, default_value_t = 12)]
fps: u8,
/// Include ALSA & other logs. /// Include ALSA & other logs.
#[clap(long, short)] #[clap(long, short)]
debug: bool, debug: bool,

View File

@ -36,18 +36,10 @@ use super::{Messages, Player};
mod components; mod components;
mod input; mod input;
/// Self explanitory.
const FPS: usize = 12;
/// How long the audio bar will be visible for when audio is adjusted. /// How long the audio bar will be visible for when audio is adjusted.
/// This is in frames. /// This is in frames.
const AUDIO_BAR_DURATION: usize = 10; const AUDIO_BAR_DURATION: usize = 10;
/// How long to wait in between frames.
/// This is fairly arbitrary, but an ideal value should be enough to feel
/// snappy but not require too many resources.
const FRAME_DELTA: f32 = 1.0 / FPS as f32;
lazy_static! { lazy_static! {
/// The volume timer, which controls how long the volume display should /// The volume timer, which controls how long the volume display should
/// show up and when it should disappear. /// show up and when it should disappear.
@ -157,6 +149,7 @@ async fn interface(
player: Arc<Player>, player: Arc<Player>,
minimalist: bool, minimalist: bool,
borderless: bool, borderless: bool,
fps: u8,
width: usize, width: usize,
) -> eyre::Result<()> { ) -> eyre::Result<()> {
let mut window = Window::new(width, borderless); let mut window = Window::new(width, borderless);
@ -196,7 +189,8 @@ async fn interface(
window.draw(menu, false)?; window.draw(menu, false)?;
sleep(Duration::from_secs_f32(FRAME_DELTA)).await; let delta = 1.0 / (fps as f32);
sleep(Duration::from_secs_f32(delta)).await;
} }
} }
@ -279,6 +273,7 @@ pub async fn start(player: Arc<Player>, sender: Sender<Messages>, args: Args) ->
Arc::clone(&player), Arc::clone(&player),
args.minimalist, args.minimalist,
args.borderless, args.borderless,
args.fps,
21 + args.width.min(32) * 2, 21 + args.width.min(32) * 2,
)); ));