wip12 (0e)

This commit is contained in:
🪞👃🪞 2024-12-09 21:12:39 +01:00
parent 83e64a3a10
commit f5128829d6
12 changed files with 55 additions and 53 deletions

View file

@ -33,15 +33,15 @@ winit = { version = "0.30.4", features = [ "x11" ] }
[[bin]]
name = "tek_arranger"
path = "src/cli_arranger.rs"
path = "src/cli/cli_arranger.rs"
[[bin]]
name = "tek_sequencer"
path = "src/cli_sequencer.rs"
path = "src/cli/cli_sequencer.rs"
[[bin]]
name = "tek_transport"
path = "src/cli_transport.rs"
path = "src/cli/cli_transport.rs"
#[[bin]]
#name = "tek_mixer"

View file

@ -1,7 +1,7 @@
use crate::*;
mod phrase; pub(crate) use phrase::*;
mod jack; pub(crate) use jack::*;
mod jack; pub(crate) use self::jack::*;
mod clip; pub(crate) use clip::*;
mod color; pub(crate) use color::*;
mod clock; pub(crate) use clock::*;

View file

@ -1,4 +1,4 @@
use crate::*;
include!("../lib.rs");
pub fn main () -> Usually<()> {
ArrangerCli::parse().run()
@ -22,7 +22,7 @@ impl ArrangerCli {
/// Run the arranger TUI from CLI arguments.
fn run (&self) -> Usually<()> {
Tui::run(JackClient::new("tek_arranger")?.activate_with(|jack|{
let mut app = tek_tui::ArrangerTui::try_from(jack)?;
let mut app = ArrangerTui::try_from(jack)?;
if let Some(name) = self.name.as_ref() {
*app.name.write().unwrap() = name.clone();
}

View file

@ -1,4 +1,4 @@
use crate::*;
include!("../lib.rs");
pub fn main () -> Usually<()> {
SequencerCli::parse().run()
@ -20,7 +20,7 @@ pub struct SequencerCli {
impl SequencerCli {
fn run (&self) -> Usually<()> {
Tui::run(JackClient::new("tek_sequencer")?.activate_with(|jack|{
let mut app = tek_tui::SequencerTui::try_from(jack)?;
let mut app = SequencerTui::try_from(jack)?;
// TODO: create from arguments
let midi_in = app.jack.read().unwrap().register_port("in", MidiIn::default())?;
app.player.midi_ins.push(midi_in);

View file

@ -1,9 +1,9 @@
use crate::*;
include!("../lib.rs");
/// Application entrypoint.
pub fn main () -> Usually<()> {
Tui::run(JackClient::new("tek_transport")?.activate_with(|jack|{
tek_tui::TransportTui::try_from(jack)
TransportTui::try_from(jack)
})?)?;
Ok(())
}

View file

@ -39,7 +39,7 @@ pub(crate) use palette::{
okhsl::*
};
pub(crate) use clap;
pub(crate) use clap::{self, Parser};
pub(crate) use crossterm::{ExecutableCommand};
pub(crate) use crossterm::terminal::{EnterAlternateScreen, LeaveAlternateScreen, enable_raw_mode, disable_raw_mode};

View file

@ -110,7 +110,7 @@ impl Tui {
let engine = Self {
exited: Arc::new(AtomicBool::new(false)),
buffer: Buffer::empty(area),
area: area.xywh(),
area: [area.x, area.y, area.width, area.height],
backend,
};
let engine = Arc::new(RwLock::new(engine));
@ -167,7 +167,10 @@ impl Tui {
buffer.resize(size);
buffer.reset();
}
let mut output = TuiOutput { buffer, area: size.xywh() };
let mut output = TuiOutput {
buffer,
area: [size.x, size.y, size.width, size.height]
};
state.render(&mut output).expect("render failed");
buffer = engine.write().unwrap().flip(output.buffer, size);
}

View file

@ -1,8 +1,8 @@
use crate::*;
pub struct TuiInput {
exited: Arc<AtomicBool>,
event: TuiEvent,
pub(crate) exited: Arc<AtomicBool>,
pub(crate) event: TuiEvent,
}
#[derive(Debug, Clone)]

View file

@ -25,7 +25,13 @@ impl<'a, T: HasPhraseList> From<&'a T> for PhraseListView<'a> {
// TODO: Display phrases always in order of appearance
render!(|self: PhraseListView<'a>|{
let Self { title, focused, entered, phrases, index, mode } = self;
let content = col!(|add|match mode {
let border_color = if *focused {Color::Rgb(100, 110, 40)} else {Color::Rgb(70, 80, 50)};
let title_color = if *focused {Color::Rgb(150, 160, 90)} else {Color::Rgb(120, 130, 100)};
let upper_left = format!("[{}] {title}", if *entered {""} else {" "});
let upper_right = format!("({})", phrases.len());
lay!([
Lozenge(Style::default().bg(Color::Rgb(40, 50, 30)).fg(border_color))
.wrap(Tui::bg(Color::Rgb(28, 35, 25), Tui::fill_xy(col!(move|add|match mode {
Some(PhrasesMode::Import(_, ref browser)) => {
add(browser)
},
@ -61,14 +67,7 @@ render!(|self: PhraseListView<'a>|{
}
Ok(())
}
});
let border_color = if *focused {Color::Rgb(100, 110, 40)} else {Color::Rgb(70, 80, 50)};
let title_color = if *focused {Color::Rgb(150, 160, 90)} else {Color::Rgb(120, 130, 100)};
let upper_left = format!("[{}] {title}", if *entered {""} else {" "});
let upper_right = format!("({})", phrases.len());
lay!([
Lozenge(Style::default().bg(Color::Rgb(40, 50, 30)).fg(border_color))
.wrap(Tui::bg(Color::Rgb(28, 35, 25), Tui::fill_xy(content))),
})))),
Tui::fill_xy(Tui::at_nw(Tui::push_x(1, Tui::fg(title_color, upper_left.to_string())))),
Tui::fill_xy(Tui::at_ne(Tui::pull_x(1, Tui::fg(title_color, upper_right.to_string())))),
])