diff --git a/jack/src/jack_port.rs b/jack/src/jack_port.rs index c5e09bd9..650458a5 100644 --- a/jack/src/jack_port.rs +++ b/jack/src/jack_port.rs @@ -1,5 +1,21 @@ use crate::*; +pub struct JackPort { + pub port: Port, + pub connect: Vec +} + +impl JackPort { + //pub fn new (jack: &impl RegisterPort +} + +#[derive(Clone, PartialEq)] +pub enum PortConnect { + Exact(Arc), + Wildcard(Arc), + RegExp(Arc), +} + /// This is a utility trait for things that may register or connect [Port]s. /// It contains shorthand methods to this purpose. It's implemented for /// `Arc>` for terse port registration in the diff --git a/src/main.rs b/src/main.rs index b3018354..b9b3f635 100644 --- a/src/main.rs +++ b/src/main.rs @@ -114,9 +114,9 @@ pub fn main () -> Usually<()> { None, Some(ItemColor::random().into()) ))); let midi_in = jack.read().unwrap().register_port("i", MidiIn::default())?; - connect_from(&jack, &midi_in, &midi_from)?; + connect_from(jack, &midi_in, &midi_from)?; let midi_out = jack.read().unwrap().register_port("o", MidiOut::default())?; - connect_to(&jack, &midi_out, &midi_to)?; + connect_to(jack, &midi_out, &midi_to)?; Sequencer { _jack: jack.clone(), pool: PoolModel::from(&phrase), @@ -156,9 +156,13 @@ pub fn main () -> Usually<()> { TekMode::Groovebox { midi_from, midi_to, l_from, r_from, l_to, r_to, .. } => engine.run(&jack.activate_with(|jack|Ok({ + let ppq = 96; let phrase = Arc::new(RwLock::new(MidiClip::new( - "Clip", true, 4 * player.clock.timebase.ppq.get() as usize, - None, Some(ItemColor::random().into()) + "Clip", + true, + 4 * ppq, + None, + Some(ItemColor::random().into()) ))); let mut player = MidiPlayer::new(jack, &"sequencer", Some(&phrase), &midi_from, @@ -166,9 +170,9 @@ pub fn main () -> Usually<()> { )?; player.play_phrase = Some((Moment::zero(&player.clock.timebase), Some(phrase.clone()))); let sampler = Sampler::new(jack, &"sampler", - midi_from, - &[l_from, r_from], - &[l_to, r_to ], + &midi_from, + &[&l_from, &r_from], + &[&l_to, &r_to ], )?; jack.read().unwrap().client().connect_ports( &player.midi_outs[0], diff --git a/tui/src/tui_buffer.rs b/tui/src/tui_buffer.rs index 37f41739..fbb95739 100644 --- a/tui/src/tui_buffer.rs +++ b/tui/src/tui_buffer.rs @@ -1,5 +1,17 @@ use crate::*; +pub fn buffer_update (buf: &mut Buffer, area: [u16;4], callback: &impl Fn(&mut Cell, u16, u16)) { + for row in 0..area.h() { + let y = area.y() + row; + for col in 0..area.w() { + let x = area.x() + col; + if x < buf.area.width && y < buf.area.height { + callback(buf.get_mut(x, y), col, row); + } + } + } +} + #[derive(Default)] pub struct BigBuffer { pub width: usize, diff --git a/tui/src/tui_engine.rs b/tui/src/tui_engine.rs index 4477110b..cd880ff4 100644 --- a/tui/src/tui_engine.rs +++ b/tui/src/tui_engine.rs @@ -2,9 +2,9 @@ use crate::*; pub struct Tui { pub exited: Arc, - pub buffer: Buffer, pub backend: CrosstermBackend, - pub area: [u16;4], // FIXME auto resize + pub buffer: Buffer, + pub area: [u16;4], } impl Tui { diff --git a/tui/src/tui_output.rs b/tui/src/tui_output.rs index d01c28d0..c9b440fd 100644 --- a/tui/src/tui_output.rs +++ b/tui/src/tui_output.rs @@ -79,23 +79,3 @@ pub fn buffer_update (buf: &mut Buffer, area: [u16;4], callback: &impl Fn(&mut C } } } - -/////////////////////////////////////////////////////////////////////////////////////////////////// - -//impl Area for Rect { - //fn x (&self) -> u16 { self.x } - //fn y (&self) -> u16 { self.y } - //fn w (&self) -> u16 { self.width } - //fn h (&self) -> u16 { self.height } -//} - -pub fn half_block (lower: bool, upper: bool) -> Option { - match (lower, upper) { - (true, true) => Some('█'), - (true, false) => Some('▄'), - (false, true) => Some('▀'), - _ => None - } -} - -//impl> Render for T {}