mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-06 19:56:42 +01:00
reenable coloring of scenes
This commit is contained in:
parent
8644d84ad6
commit
bb8e1f14eb
4 changed files with 55 additions and 38 deletions
|
|
@ -32,27 +32,37 @@ impl ArrangerCli {
|
|||
Tui::run(JackClient::new(client_name.as_str())?.activate_with(|jack|{
|
||||
let mut app = ArrangerTui::try_from(jack)?;
|
||||
app.color = ItemPalette::random();
|
||||
let track_color_1 = ItemColor::random();
|
||||
let track_color_2 = ItemColor::random();
|
||||
for i in 0..self.tracks {
|
||||
let track = app.track_add(None, Some(
|
||||
track_color_1.mix(track_color_2, i as f32 / self.tracks as f32).into()
|
||||
))?;
|
||||
track.width = 8;
|
||||
}
|
||||
let scene_color_1 = ItemColor::random();
|
||||
let scene_color_2 = ItemColor::random();
|
||||
for i in 0..self.scenes {
|
||||
let _scene = app.scene_add(None, Some(
|
||||
scene_color_1.mix(scene_color_2, i as f32 / self.scenes as f32).into()
|
||||
))?;
|
||||
}
|
||||
add_tracks(&mut app, self.tracks)?;
|
||||
add_scenes(&mut app, self.scenes)?;
|
||||
Ok(app)
|
||||
})?)?;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
fn add_tracks (app: &mut ArrangerTui, n: usize) -> Usually<()> {
|
||||
let track_color_1 = ItemColor::random();
|
||||
let track_color_2 = ItemColor::random();
|
||||
for i in 0..n {
|
||||
let track = app.track_add(None, Some(
|
||||
track_color_1.mix(track_color_2, i as f32 / n as f32).into()
|
||||
))?;
|
||||
track.width = 8;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn add_scenes (app: &mut ArrangerTui, n: usize) -> Usually<()> {
|
||||
let scene_color_1 = ItemColor::random();
|
||||
let scene_color_2 = ItemColor::random();
|
||||
for i in 0..n {
|
||||
let _scene = app.scene_add(None, Some(
|
||||
scene_color_1.mix(scene_color_2, i as f32 / n as f32).into()
|
||||
))?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test] fn verify_arranger_cli () {
|
||||
use clap::CommandFactory;
|
||||
ArrangerCli::command().debug_assert();
|
||||
|
|
|
|||
|
|
@ -32,25 +32,10 @@ impl SequencerCli {
|
|||
let jack = jack.read().unwrap();
|
||||
let midi_in = jack.register_port("in", MidiIn::default())?;
|
||||
let midi_out = jack.register_port("out", MidiOut::default())?;
|
||||
for port in self.midi_from.iter() {
|
||||
if let Some(port) = jack.port_by_name(&port) {
|
||||
jack.client().connect_ports(&port, &midi_in)?;
|
||||
} else {
|
||||
panic!("Missing MIDI output: {port}");
|
||||
}
|
||||
}
|
||||
for port in self.midi_to.iter() {
|
||||
if let Some(port) = jack.port_by_name(&port) {
|
||||
jack.client().connect_ports(&midi_out, &port)?;
|
||||
} else {
|
||||
panic!("Missing MIDI output: {port}");
|
||||
}
|
||||
}
|
||||
connect_from(&jack, &midi_in, &self.midi_from)?;
|
||||
connect_to(&jack, &midi_out, &self.midi_to)?;
|
||||
app.player.midi_ins.push(midi_in);
|
||||
app.player.midi_outs.push(midi_out);
|
||||
if let Some(_) = self.name.as_ref() {
|
||||
// TODO: sequencer.name = Arc::new(RwLock::new(name.clone()));
|
||||
}
|
||||
if let Some(_) = self.length {
|
||||
// TODO: if let Some(phrase) = sequencer.phrase.as_mut() {
|
||||
//phrase.write().unwrap().length = length;
|
||||
|
|
@ -62,6 +47,28 @@ impl SequencerCli {
|
|||
}
|
||||
}
|
||||
|
||||
fn connect_from (jack: &JackClient, input: &Port<MidiIn>, ports: &[String]) -> Usually<()> {
|
||||
for port in ports.iter() {
|
||||
if let Some(port) = jack.port_by_name(&port) {
|
||||
jack.client().connect_ports(&port, &input)?;
|
||||
} else {
|
||||
panic!("Missing MIDI output: {port}");
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn connect_to (jack: &JackClient, output: &Port<MidiOut>, ports: &[String]) -> Usually<()> {
|
||||
for port in ports.iter() {
|
||||
if let Some(port) = jack.port_by_name(&port) {
|
||||
jack.client().connect_ports(&output, &port)?;
|
||||
} else {
|
||||
panic!("Missing MIDI output: {port}");
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test] fn verify_sequencer_cli () {
|
||||
use clap::CommandFactory;
|
||||
SequencerCli::command().debug_assert();
|
||||
|
|
|
|||
|
|
@ -28,8 +28,8 @@ impl<'a> ArrangerVClips<'a> {
|
|||
let height = 1.max((pulses / PPQ) as u16);
|
||||
let playing = scene.is_playing(tracks);
|
||||
Fixed::h(height, row!([
|
||||
if playing { "▶ " } else { " " },
|
||||
Tui::bold(true, scene.name.read().unwrap().as_str()),
|
||||
Tui::bg(scene.color.base.rgb, if playing { "▶ " } else { " " }),
|
||||
Tui::fg_bg(scene.color.lightest.rgb, scene.color.base.rgb, Tui::grow_x(1, Tui::bold(true, scene.name.read().unwrap().as_str()))),
|
||||
row!((index, track, x1, x2) in ArrangerTrack::with_widths(tracks) => {
|
||||
Self::format_clip(scene, index, track, (x2 - x1) as u16, height)
|
||||
})])
|
||||
|
|
@ -51,9 +51,9 @@ impl<'a> ArrangerVClips<'a> {
|
|||
bg = color.light.rgb
|
||||
}
|
||||
};
|
||||
add(&Tui::push_x(1, Tui::bg(bg,
|
||||
add(&Tui::bg(bg,
|
||||
Tui::push_x(1, Fixed::w(w as u16, &name.as_str()[0..max_w])))
|
||||
))?;
|
||||
)?;
|
||||
}
|
||||
//add(&Background(bg))
|
||||
Ok(())
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ from!(<'a>|args: &'a ArrangerTui|ArrangerVIns<'a> = Self {
|
|||
tracks: &args.tracks,
|
||||
});
|
||||
|
||||
render!(<Tui>|self: ArrangerVIns<'a>|"");
|
||||
render!(<Tui>|self: ArrangerVIns<'a>|());
|
||||
|
||||
pub struct ArrangerVOuts<'a> {
|
||||
size: &'a Measure<Tui>,
|
||||
|
|
@ -23,4 +23,4 @@ from!(<'a>|args: &'a ArrangerTui|ArrangerVOuts<'a> = Self {
|
|||
tracks: &args.tracks,
|
||||
});
|
||||
|
||||
render!(<Tui>|self: ArrangerVOuts<'a>|"");
|
||||
render!(<Tui>|self: ArrangerVOuts<'a>|());
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue