mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-06 19:56:42 +01:00
wip: removing format calls from render loop
This commit is contained in:
parent
7ad574cf2a
commit
209f35440a
2 changed files with 31 additions and 10 deletions
|
|
@ -22,6 +22,7 @@ pub use ::tek_tui::{
|
||||||
Event, KeyEvent, KeyEventKind, KeyEventState, KeyModifiers, KeyCode::{self, *},
|
Event, KeyEvent, KeyEventKind, KeyEventState, KeyModifiers, KeyCode::{self, *},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
use std::fmt::Write;
|
||||||
use clap::{self, Parser, Subcommand};
|
use clap::{self, Parser, Subcommand};
|
||||||
#[derive(Debug, Parser)]
|
#[derive(Debug, Parser)]
|
||||||
#[command(version, about, long_about = None)]
|
#[command(version, about, long_about = None)]
|
||||||
|
|
@ -149,6 +150,10 @@ impl TekCli {
|
||||||
pub keys_track: SourceIter<'static>,
|
pub keys_track: SourceIter<'static>,
|
||||||
pub keys_scene: SourceIter<'static>,
|
pub keys_scene: SourceIter<'static>,
|
||||||
pub keys_mix: SourceIter<'static>,
|
pub keys_mix: SourceIter<'static>,
|
||||||
|
|
||||||
|
pub fmt_beat: String,
|
||||||
|
pub fmt_time: String,
|
||||||
|
pub fmt_bpm: String,
|
||||||
}
|
}
|
||||||
has_size!(<TuiOut>|self: Tek|&self.size);
|
has_size!(<TuiOut>|self: Tek|&self.size);
|
||||||
has_clock!(|self: Tek|self.clock);
|
has_clock!(|self: Tek|self.clock);
|
||||||
|
|
@ -224,6 +229,9 @@ impl Tek {
|
||||||
keys_track: SourceIter(KEYS_TRACK),
|
keys_track: SourceIter(KEYS_TRACK),
|
||||||
keys_scene: SourceIter(KEYS_SCENE),
|
keys_scene: SourceIter(KEYS_SCENE),
|
||||||
keys_mix: SourceIter(KEYS_MIX),
|
keys_mix: SourceIter(KEYS_MIX),
|
||||||
|
fmt_beat: String::with_capacity(16),
|
||||||
|
fmt_time: String::with_capacity(16),
|
||||||
|
fmt_bpm: String::with_capacity(16),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
};
|
};
|
||||||
tek.sync_lead(sync_lead);
|
tek.sync_lead(sync_lead);
|
||||||
|
|
@ -373,17 +381,24 @@ impl Tek {
|
||||||
}
|
}
|
||||||
fn view_beat_stats (&self) -> impl Content<TuiOut> + use<'_> {
|
fn view_beat_stats (&self) -> impl Content<TuiOut> + use<'_> {
|
||||||
let compact = self.size.w() > 80;
|
let compact = self.size.w() > 80;
|
||||||
let clock = self.clock();
|
let clock = self.clock();
|
||||||
let now = clock.started.read().unwrap().as_ref().map(|start|clock.global.usec.get() - start.usec.get());
|
let delta = |start: &Moment|clock.global.usec.get() - start.usec.get();
|
||||||
let beat = ||now.map(|now|clock.timebase.format_beats_1(clock.timebase.usecs_to_pulse(now)))
|
if let Some(now) = clock.started.read().unwrap().as_ref().map(delta) {
|
||||||
.unwrap_or("-.-.--".into());
|
clock.timebase.format_beats_1_to(&mut self.fmt_beat, clock.timebase.usecs_to_pulse(now));
|
||||||
let time = ||now.map(|now|format!("{:.3}s", now/1000000.))
|
write!(&mut self.fmt_time, "{:.3}s", now/1000000.);
|
||||||
.unwrap_or("-.---s".into());
|
write!(&mut self.fmt_bpm, "{:.3}", clock.timebase.bpm.get());
|
||||||
let bpm = ||format!("{:.3}", clock.timebase.bpm.get());
|
} else {
|
||||||
|
write!(&mut self.fmt_beat, "-.-.--");
|
||||||
|
write!(&mut self.fmt_time, "-.---s");
|
||||||
|
write!(&mut self.fmt_bpm, "---.---");
|
||||||
|
}
|
||||||
let theme = ItemPalette::G[128];
|
let theme = ItemPalette::G[128];
|
||||||
|
let fh = |name, value|Field(theme, name, value);
|
||||||
|
let fv = |name, value|FieldV(theme, name, value);
|
||||||
Either::new(compact,
|
Either::new(compact,
|
||||||
row!(Field(theme, "BPM", bpm()), Field(theme, "Beat", beat()), Field(theme, "Time", time())),
|
row!(fh("BPM", &self.fmt_bpm), fh("Beat", &self.fmt_beat), fh("Time", &self.fmt_time)),
|
||||||
row!(FieldV(theme, "BPM", bpm()), FieldV(theme, "Beat", beat()), FieldV(theme, "Time", time())))
|
row!(fv("BPM", &self.fmt_bpm), fv("Beat", &self.fmt_beat), fv("Time", &self.fmt_time))
|
||||||
|
)
|
||||||
}
|
}
|
||||||
fn view_engine_stats (&self) -> impl Content<TuiOut> + use<'_> {
|
fn view_engine_stats (&self) -> impl Content<TuiOut> + use<'_> {
|
||||||
let compact = self.size.w() > 80;
|
let compact = self.size.w() > 80;
|
||||||
|
|
|
||||||
|
|
@ -93,10 +93,16 @@ impl Timebase {
|
||||||
}
|
}
|
||||||
/// Format a number of pulses into Beat.Bar.Pulse starting from 1
|
/// Format a number of pulses into Beat.Bar.Pulse starting from 1
|
||||||
#[inline] pub fn format_beats_1 (&self, pulse: f64) -> Arc<str> {
|
#[inline] pub fn format_beats_1 (&self, pulse: f64) -> Arc<str> {
|
||||||
|
let mut string = String::with_capacity(16);
|
||||||
|
self.format_beats_1_to(&mut string, pulse).expect("failed to format {pulse} into beat");
|
||||||
|
string.into()
|
||||||
|
}
|
||||||
|
/// Format a number of pulses into Beat.Bar.Pulse starting from 1
|
||||||
|
#[inline] pub fn format_beats_1_to (&self, w: &mut impl std::fmt::Write, pulse: f64) -> Result<(), std::fmt::Error> {
|
||||||
let pulse = pulse as usize;
|
let pulse = pulse as usize;
|
||||||
let ppq = self.ppq.get() as usize;
|
let ppq = self.ppq.get() as usize;
|
||||||
let (beats, pulses) = if ppq > 0 { (pulse / ppq, pulse % ppq) } else { (0, 0) };
|
let (beats, pulses) = if ppq > 0 { (pulse / ppq, pulse % ppq) } else { (0, 0) };
|
||||||
format!("{}.{}.{pulses:02}", beats / 4 + 1, beats % 4 + 1).into()
|
write!(w, "{}.{}.{pulses:02}", beats / 4 + 1, beats % 4 + 1)
|
||||||
}
|
}
|
||||||
/// Format a number of pulses into Beat.Bar.Pulse starting from 1
|
/// Format a number of pulses into Beat.Bar.Pulse starting from 1
|
||||||
#[inline] pub fn format_beats_1_short (&self, pulse: f64) -> Arc<str> {
|
#[inline] pub fn format_beats_1_short (&self, pulse: f64) -> Arc<str> {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue