mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-07 20:26:42 +01:00
render chain with SplitFocus
This commit is contained in:
parent
a39e694a3e
commit
c3040cef1c
12 changed files with 247 additions and 147 deletions
|
|
@ -1,5 +1,56 @@
|
|||
use crate::{core::*, model::App};
|
||||
|
||||
impl App {
|
||||
pub fn next_phrase (&mut self) {
|
||||
if let Some((track_index, track)) = self.track_mut() {
|
||||
let phrases = track.phrases.len();
|
||||
if let Some((_, scene)) = self.scene_mut() {
|
||||
if let Some(phrase_index) = scene.clips[track_index] {
|
||||
if phrase_index >= phrases - 1 {
|
||||
scene.clips[track_index] = None;
|
||||
} else {
|
||||
scene.clips[track_index] = Some(phrase_index + 1);
|
||||
}
|
||||
} else if phrases > 0 {
|
||||
scene.clips[track_index] = Some(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
pub fn prev_phrase (&mut self) {
|
||||
if let Some((track_index, track)) = self.track_mut() {
|
||||
let phrases = track.phrases.len();
|
||||
if let Some((_, scene)) = self.scene_mut() {
|
||||
if let Some(phrase_index) = scene.clips[track_index] {
|
||||
scene.clips[track_index] = if phrase_index == 0 {
|
||||
None
|
||||
} else {
|
||||
Some(phrase_index - 1)
|
||||
};
|
||||
} else if phrases > 0 {
|
||||
scene.clips[track_index] = Some(phrases - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
pub fn phrase (&self) -> Option<&Phrase> {
|
||||
let (track_id, track) = self.track()?;
|
||||
let (_, scene) = self.scene()?;
|
||||
track.phrases.get((*scene.clips.get(track_id)?)?)
|
||||
}
|
||||
pub fn phrase_mut (&mut self) -> Option<&mut Phrase> {
|
||||
let (track_id, _) = self.track()?;
|
||||
let (_, scene) = self.scene()?;
|
||||
let clip = (*scene.clips.get(track_id)?)?;
|
||||
self.track_mut()?.1.phrases.get_mut(clip)
|
||||
}
|
||||
fn phrase_id (&self) -> Option<usize> {
|
||||
let (track_id, _) = self.track()?;
|
||||
let (_, scene) = self.scene()?;
|
||||
*scene.clips.get(track_id)?
|
||||
}
|
||||
}
|
||||
|
||||
/// Define a MIDI phrase.
|
||||
#[macro_export] macro_rules! phrase {
|
||||
($($t:expr => $msg:expr),* $(,)?) => {{
|
||||
|
|
@ -87,22 +138,3 @@ impl Phrase {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl App {
|
||||
pub fn phrase (&self) -> Option<&Phrase> {
|
||||
let (track_id, track) = self.track()?;
|
||||
let (_, scene) = self.scene()?;
|
||||
track.phrases.get((*scene.clips.get(track_id)?)?)
|
||||
}
|
||||
pub fn phrase_mut (&mut self) -> Option<&mut Phrase> {
|
||||
let (track_id, _) = self.track()?;
|
||||
let (_, scene) = self.scene()?;
|
||||
let clip = (*scene.clips.get(track_id)?)?;
|
||||
self.track_mut()?.1.phrases.get_mut(clip)
|
||||
}
|
||||
pub fn phrase_id (&self) -> Option<usize> {
|
||||
let (track_id, _) = self.track()?;
|
||||
let (_, scene) = self.scene()?;
|
||||
*scene.clips.get(track_id)?
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue