mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-06 19:56:42 +01:00
midi: return old values from cursor traits
This commit is contained in:
parent
397e71edee
commit
e9c825e865
6 changed files with 76 additions and 92 deletions
|
|
@ -160,14 +160,14 @@ impl NoteRange for MidiEditor {
|
|||
|
||||
impl NotePoint for MidiEditor {
|
||||
fn note_len (&self) -> usize { self.mode.note_len() }
|
||||
fn set_note_len (&self, x: usize) { self.mode.set_note_len(x) }
|
||||
fn set_note_len (&self, x: usize) -> usize { self.mode.set_note_len(x) }
|
||||
fn note_pos (&self) -> usize { self.mode.note_pos() }
|
||||
fn set_note_pos (&self, x: usize) { self.mode.set_note_pos(x) }
|
||||
fn set_note_pos (&self, x: usize) -> usize { self.mode.set_note_pos(x) }
|
||||
}
|
||||
|
||||
impl TimePoint for MidiEditor {
|
||||
fn time_pos (&self) -> usize { self.mode.time_pos() }
|
||||
fn set_time_pos (&self, x: usize) { self.mode.set_time_pos(x) }
|
||||
fn set_time_pos (&self, x: usize) -> usize { self.mode.set_time_pos(x) }
|
||||
}
|
||||
|
||||
impl MidiViewer for MidiEditor {
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ pub struct MidiPointModel {
|
|||
/// Note coordinate of cursor
|
||||
pub note_pos: Arc<AtomicUsize>,
|
||||
/// Length of note that will be inserted, in pulses
|
||||
pub note_len: Arc<AtomicUsize>,
|
||||
pub note_len: Arc<AtomicUsize>,
|
||||
}
|
||||
|
||||
impl Default for MidiPointModel {
|
||||
|
|
@ -21,30 +21,52 @@ impl Default for MidiPointModel {
|
|||
}
|
||||
|
||||
pub trait NotePoint {
|
||||
fn note_len (&self) -> usize;
|
||||
fn set_note_len (&self, x: usize);
|
||||
fn note_pos (&self) -> usize;
|
||||
fn set_note_pos (&self, x: usize);
|
||||
fn note_end (&self) -> usize { self.note_pos() + self.note_len() }
|
||||
/// Get the current length of the note cursor.
|
||||
fn note_len (&self) -> usize;
|
||||
/// Set the length of the note cursor, returning the previous value.
|
||||
fn set_note_len (&self, x: usize) -> usize;
|
||||
/// Get the current pitch of the note cursor.
|
||||
fn note_pos (&self) -> usize;
|
||||
/// Set the current pitch fo the note cursor, returning the previous value.
|
||||
fn set_note_pos (&self, x: usize) -> usize;
|
||||
}
|
||||
|
||||
pub trait TimePoint {
|
||||
fn time_pos (&self) -> usize;
|
||||
fn set_time_pos (&self, x: usize);
|
||||
/// Get the current time position of the note cursor.
|
||||
fn time_pos (&self) -> usize;
|
||||
/// Set the current time position of the note cursor, returning the previous value.
|
||||
fn set_time_pos (&self, x: usize) -> usize;
|
||||
}
|
||||
|
||||
pub trait MidiPoint: NotePoint + TimePoint {}
|
||||
pub trait MidiPoint: NotePoint + TimePoint {
|
||||
/// Get the current end of the note cursor.
|
||||
fn note_end (&self) -> usize {
|
||||
self.time_pos() + self.note_len()
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: NotePoint + TimePoint> MidiPoint for T {}
|
||||
|
||||
impl NotePoint for MidiPointModel {
|
||||
fn note_len (&self) -> usize { self.note_len.load(Relaxed)}
|
||||
fn set_note_len (&self, x: usize) { self.note_len.store(x, Relaxed) }
|
||||
fn note_pos (&self) -> usize { self.note_pos.load(Relaxed).min(127) }
|
||||
fn set_note_pos (&self, x: usize) { self.note_pos.store(x.min(127), Relaxed) }
|
||||
fn note_len (&self) -> usize {
|
||||
self.note_len.load(Relaxed)
|
||||
}
|
||||
fn set_note_len (&self, x: usize) -> usize {
|
||||
self.note_len.swap(x, Relaxed)
|
||||
}
|
||||
fn note_pos (&self) -> usize {
|
||||
self.note_pos.load(Relaxed).min(127)
|
||||
}
|
||||
fn set_note_pos (&self, x: usize) -> usize {
|
||||
self.note_pos.swap(x.min(127), Relaxed)
|
||||
}
|
||||
}
|
||||
|
||||
impl TimePoint for MidiPointModel {
|
||||
fn time_pos (&self) -> usize { self.time_pos.load(Relaxed) }
|
||||
fn set_time_pos (&self, x: usize) { self.time_pos.store(x, Relaxed) }
|
||||
fn time_pos (&self) -> usize {
|
||||
self.time_pos.load(Relaxed)
|
||||
}
|
||||
fn set_time_pos (&self, x: usize) -> usize {
|
||||
self.time_pos.swap(x, Relaxed)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -242,14 +242,14 @@ impl NoteRange for PianoHorizontal {
|
|||
|
||||
impl NotePoint for PianoHorizontal {
|
||||
fn note_len (&self) -> usize { self.point.note_len() }
|
||||
fn set_note_len (&self, x: usize) { self.point.set_note_len(x) }
|
||||
fn set_note_len (&self, x: usize) -> usize { self.point.set_note_len(x) }
|
||||
fn note_pos (&self) -> usize { self.point.note_pos() }
|
||||
fn set_note_pos (&self, x: usize) { self.point.set_note_pos(x) }
|
||||
fn set_note_pos (&self, x: usize) -> usize { self.point.set_note_pos(x) }
|
||||
}
|
||||
|
||||
impl TimePoint for PianoHorizontal {
|
||||
fn time_pos (&self) -> usize { self.point.time_pos() }
|
||||
fn set_time_pos (&self, x: usize) { self.point.set_time_pos(x) }
|
||||
fn set_time_pos (&self, x: usize) -> usize { self.point.set_time_pos(x) }
|
||||
}
|
||||
|
||||
impl MidiViewer for PianoHorizontal {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue