mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-06 19:56:42 +01:00
wip: refactoring groovebox render
This commit is contained in:
parent
304ce35cbb
commit
8cbe621b07
1 changed files with 37 additions and 41 deletions
|
|
@ -12,7 +12,7 @@ pub struct Groovebox {
|
||||||
pub player: MidiPlayer,
|
pub player: MidiPlayer,
|
||||||
pub pool: PoolModel,
|
pub pool: PoolModel,
|
||||||
pub editor: MidiEditorModel,
|
pub editor: MidiEditorModel,
|
||||||
pub sampler: crate::sampler::Sampler,
|
pub sampler: Sampler,
|
||||||
|
|
||||||
pub size: Measure<Tui>,
|
pub size: Measure<Tui>,
|
||||||
pub status: bool,
|
pub status: bool,
|
||||||
|
|
@ -120,52 +120,48 @@ render!(<Tui>|self:Groovebox|{
|
||||||
let color = self.player.play_phrase().as_ref()
|
let color = self.player.play_phrase().as_ref()
|
||||||
.and_then(|(_,p)|p.as_ref().map(|p|p.read().unwrap().color))
|
.and_then(|(_,p)|p.as_ref().map(|p|p.read().unwrap().color))
|
||||||
.clone();
|
.clone();
|
||||||
|
let transport = Fixed::h(3, row!([
|
||||||
|
PlayPause(self.clock().is_rolling()),
|
||||||
|
TransportView::new(self, color, true),
|
||||||
|
]));
|
||||||
|
let selector = Push::x(sampler_w, Fixed::h(1, row!(![
|
||||||
|
PhraseSelector::play_phrase(&self.player),
|
||||||
|
PhraseSelector::next_phrase(&self.player),
|
||||||
|
])));
|
||||||
|
let pool = move|x|Split::w(false, pool_w, Pull::y(1, Fill::h(Align::e(PoolView(&self.pool)))), x);
|
||||||
|
let sampler = move|x|Split::e(false, sampler_w, Fill::wh(col!([
|
||||||
|
Meters(self.sampler.input_meter.as_ref()),
|
||||||
|
GrooveboxSamples(self)
|
||||||
|
])), x);
|
||||||
|
let status = EditStatus(&self.sampler, &self.editor, note_pt, pool(sampler(&self.editor)));
|
||||||
Fill::wh(lay!([
|
Fill::wh(lay!([
|
||||||
&self.size,
|
&self.size,
|
||||||
Fill::wh(Align::s(Fixed::h(2, GrooveboxStatus::from(self)))),
|
Fill::wh(Align::s(Fixed::h(2, GrooveboxStatus::from(self)))),
|
||||||
Shrink::y(2, col!([
|
Shrink::y(2, col!(![transport, selector, status]))
|
||||||
Fixed::h(3, row!([
|
|
||||||
PlayPause(self.clock().is_rolling()),
|
|
||||||
TransportView::new(self, color, true),
|
|
||||||
])),
|
|
||||||
Push::x(sampler_w, Fixed::h(1, row!([
|
|
||||||
PhraseSelector::play_phrase(&self.player),
|
|
||||||
PhraseSelector::next_phrase(&self.player),
|
|
||||||
]))),
|
|
||||||
row!([
|
|
||||||
Split::n(false, 9,
|
|
||||||
col!([
|
|
||||||
row!(|add|{
|
|
||||||
if let Some(sample) = &self.sampler.mapped[note_pt] {
|
|
||||||
add(&format!("Sample {}", sample.read().unwrap().end))?;
|
|
||||||
}
|
|
||||||
add(&MidiEditStatus(&self.editor))?;
|
|
||||||
Ok(())
|
|
||||||
}),
|
|
||||||
lay!([
|
|
||||||
Outer(Style::default().fg(TuiTheme::g(128))),
|
|
||||||
Fill::w(Fixed::h(8, if let Some((_, sample)) = &self.sampler.recording {
|
|
||||||
SampleViewer(Some(sample.clone()))
|
|
||||||
} else if let Some(sample) = &self.sampler.mapped[note_pt] {
|
|
||||||
SampleViewer(Some(sample.clone()))
|
|
||||||
} else {
|
|
||||||
SampleViewer(None)
|
|
||||||
})),
|
|
||||||
]),
|
|
||||||
]),
|
|
||||||
Split::w(false, pool_w,
|
|
||||||
Pull::y(1, Fill::h(Align::e(PoolView(&self.pool)))),
|
|
||||||
Split::e(false, sampler_w, Fill::wh(col!([
|
|
||||||
Meters(self.sampler.input_meter.as_ref()),
|
|
||||||
GrooveboxSamples(self),
|
|
||||||
])), Fill::h(&self.editor))
|
|
||||||
)
|
|
||||||
),
|
|
||||||
]),
|
|
||||||
]))
|
|
||||||
]))
|
]))
|
||||||
});
|
});
|
||||||
|
|
||||||
|
struct EditStatus<'a, T: Render<Tui>>(&'a Sampler, &'a MidiEditor, usize, T);
|
||||||
|
render!(<Tui>|self: EditStatus<'a, T: Render<Tui>>|Split::n(false, 9, col!(![
|
||||||
|
row!(|add|{
|
||||||
|
if let Some(sample) = &self.0.mapped[self.2] {
|
||||||
|
add(&format!("Sample {}", sample.read().unwrap().end))?;
|
||||||
|
}
|
||||||
|
add(&MidiEditStatus(&self.1))?;
|
||||||
|
Ok(())
|
||||||
|
}),
|
||||||
|
lay!([
|
||||||
|
Outer(Style::default().fg(TuiTheme::g(128))),
|
||||||
|
Fill::w(Fixed::h(8, if let Some((_, sample)) = &self.0.recording {
|
||||||
|
SampleViewer(Some(sample.clone()))
|
||||||
|
} else if let Some(sample) = &self.0.mapped[self.2] {
|
||||||
|
SampleViewer(Some(sample.clone()))
|
||||||
|
} else {
|
||||||
|
SampleViewer(None)
|
||||||
|
})),
|
||||||
|
]),
|
||||||
|
]), self.3));
|
||||||
|
|
||||||
struct GrooveboxSamples<'a>(&'a Groovebox);
|
struct GrooveboxSamples<'a>(&'a Groovebox);
|
||||||
render!(<Tui>|self: GrooveboxSamples<'a>|{
|
render!(<Tui>|self: GrooveboxSamples<'a>|{
|
||||||
let note_lo = self.0.editor.note_lo().load(Relaxed);
|
let note_lo = self.0.editor.note_lo().load(Relaxed);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue