mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-06 19:56:42 +01:00
browse phrases
This commit is contained in:
parent
625956766e
commit
83830d9cb3
9 changed files with 86 additions and 84 deletions
|
|
@ -117,18 +117,28 @@ impl Launcher {
|
|||
}
|
||||
}
|
||||
|
||||
fn active_track (&self) -> Option<&Track> {
|
||||
if self.cursor.0 >= 1 {
|
||||
self.tracks.get(self.cursor.0 as usize - 1 as usize)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
fn track <'a> (&'a self) -> Option<(usize, &'a Track)> {
|
||||
match self.col() { 0 => None, _ => {
|
||||
let id = self.col() as usize - 1;
|
||||
self.tracks.get(id).map(|t|(id, t))
|
||||
} }
|
||||
}
|
||||
fn active_sequencer <'a> (&'a self) -> Option<std::sync::MutexGuard<Sequencer>> {
|
||||
self.active_track().map(|t|t.sequencer.state())
|
||||
fn scene <'a> (&'a self) -> Option<(usize, &'a Scene)> {
|
||||
match self.row() { 0 => None, _ => {
|
||||
let id = self.row() as usize - 1;
|
||||
self.scenes.get(id).map(|t|(id, t))
|
||||
} }
|
||||
}
|
||||
fn active_chain <'a> (&'a self) -> Option<std::sync::MutexGuard<Chain>> {
|
||||
self.active_track().map(|t|t.chain.state())
|
||||
fn sequencer <'a> (&'a self) -> Option<MutexGuard<Sequencer>> {
|
||||
self.track().map(|t|t.1.sequencer.state())
|
||||
}
|
||||
fn chain <'a> (&'a self) -> Option<MutexGuard<Chain>> {
|
||||
self.track().map(|t|t.1.chain.state())
|
||||
}
|
||||
fn phrase_id (&self) -> Option<usize> {
|
||||
let (track_id, _) = self.track()?;
|
||||
let (_, scene) = self.scene()?;
|
||||
*scene.clips.get(track_id)?
|
||||
}
|
||||
}
|
||||
impl DynamicDevice<Launcher> {
|
||||
|
|
@ -228,49 +238,41 @@ fn draw_section_sequencer (state: &Launcher, buf: &mut Buffer, area: Rect) -> Us
|
|||
},
|
||||
_ => {},
|
||||
};
|
||||
if let Some(track) = state.tracks.get(state.col().saturating_sub(1)) {
|
||||
let frame = state.position;
|
||||
let timebase = &state.timebase;
|
||||
let tick = (frame as f64 / timebase.frames_per_tick()) as usize;
|
||||
let state = track.sequencer.state();
|
||||
let zoom = state.resolution;
|
||||
if let Some((_, track)) = state.track() {
|
||||
let frame = state.position;
|
||||
let timebase = &state.timebase;
|
||||
let tick = (frame as f64 / timebase.frames_per_tick()) as usize;
|
||||
let sequencer = track.sequencer.state();
|
||||
let zoom = sequencer.resolution;
|
||||
|
||||
let steps = if let Some(_phrase) = state.phrase() {
|
||||
0
|
||||
} else {
|
||||
0
|
||||
} / 4;
|
||||
let steps = if let Some(_phrase) = sequencer.phrase() { 0 } else { 0 } / 4; // TODO
|
||||
|
||||
crate::device::sequencer::horizontal::timer(buf, x+5, y,
|
||||
steps,
|
||||
state.steps * zoom,
|
||||
state.time_axis.0,
|
||||
state.time_axis.1
|
||||
steps, sequencer.steps * zoom, sequencer.time_axis.0, sequencer.time_axis.1
|
||||
);
|
||||
|
||||
let keys_area = Rect { x, y: y + 1, width, height };
|
||||
crate::device::sequencer::horizontal::keys(buf, keys_area,
|
||||
state.note_axis.1
|
||||
crate::device::sequencer::horizontal::keys(buf, Rect { x, y: y + 1, width, height },
|
||||
sequencer.note_axis.1
|
||||
)?;
|
||||
|
||||
if let Some(phrase) = state.phrase() {
|
||||
crate::device::sequencer::horizontal::lanes(buf, x, y + 1,
|
||||
&phrase,
|
||||
state.timebase.ppq() as u32,
|
||||
state.resolution as u32,
|
||||
state.time_axis.0 as u32,
|
||||
state.time_axis.1 as u32,
|
||||
state.note_axis.0 as u32,
|
||||
state.note_axis.1 as u32,
|
||||
);
|
||||
if let Some(id) = state.phrase_id() {
|
||||
if let Some(phrase) = sequencer.phrases.get(id) {
|
||||
crate::device::sequencer::horizontal::lanes(buf, x, y + 1,
|
||||
&phrase,
|
||||
sequencer.timebase.ppq() as u32,
|
||||
sequencer.resolution as u32,
|
||||
sequencer.time_axis.0 as u32,
|
||||
sequencer.time_axis.1 as u32,
|
||||
sequencer.note_axis.0 as u32,
|
||||
sequencer.note_axis.1 as u32,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
let cursor_style = match view {
|
||||
LauncherView::Sequencer => Style::default().green().not_dim(),
|
||||
_ => Style::default().green().dim(),
|
||||
};
|
||||
crate::device::sequencer::horizontal::cursor(buf, x, y + 1, cursor_style,
|
||||
state.time_cursor,
|
||||
state.note_cursor
|
||||
sequencer.time_cursor,
|
||||
sequencer.note_cursor
|
||||
);
|
||||
}
|
||||
Ok(area)
|
||||
|
|
@ -290,8 +292,8 @@ fn draw_section_chains (state: &Launcher, buf: &mut Buffer, area: Rect) -> Usual
|
|||
},
|
||||
_ => {},
|
||||
};
|
||||
let chain = state.active_chain();
|
||||
let plugins = if let Some(chain) = &chain {
|
||||
let chain = state.chain();
|
||||
let _ = if let Some(chain) = &chain {
|
||||
let (_, plugins) = crate::device::chain::draw_as_row(
|
||||
&*chain, buf, area, style
|
||||
)?;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue