reenable coloring of scenes

This commit is contained in:
🪞👃🪞 2024-12-24 23:31:05 +01:00
parent 8644d84ad6
commit bb8e1f14eb
4 changed files with 55 additions and 38 deletions

View file

@ -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();

View file

@ -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();

View file

@ -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(())

View file

@ -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>|());