some more core refactor before fixing the mess

This commit is contained in:
🪞👃🪞 2024-09-06 20:11:10 +03:00
parent fe09536a45
commit 0bbf74e915
12 changed files with 31 additions and 28 deletions

View file

@ -1,6 +1,12 @@
use jack::*;
use crate::*;
submod! {
device
event
ports
}
/// A UI component that may be associated with a JACK client by the `Jack` factory.
pub trait Device<E: Engine>: Component<E> + Process {
/// Perform type erasure for collecting heterogeneous devices.
@ -228,4 +234,3 @@ fn query_ports (
ports
})
}

View file

@ -1,4 +1,5 @@
use crate::{*, jack::*};
use ::jack::*;
use crate::*;
/// A [Device] bound to a JACK client and a set of ports.
pub struct JackDevice<E: Engine> {
@ -62,3 +63,4 @@ impl<E: Engine> JackDevice<E> {
}
}

View file

@ -1,4 +1,5 @@
use crate::jack::*;
use ::jack::*;
use crate::*;
/// Notification handler used by the [Jack] factory
/// when constructing [JackDevice]s.
@ -68,4 +69,3 @@ impl<T: Fn(JackEvent) + Send> NotificationHandler for Notifications<T> {
Control::Continue
}
}

View file

@ -1,4 +1,5 @@
use crate::{*, jack::*};
use ::jack::*;
use crate::*;
/// Collection of JACK ports as [AudioIn]/[AudioOut]/[MidiIn]/[MidiOut].
#[derive(Default, Debug)]
@ -91,4 +92,3 @@ pub trait Ports {
)?}
};
}

View file

@ -25,6 +25,9 @@ pub trait HandleContext {}
pub trait RenderContext {}
submod! {
render
exit
focus
handle
keymap
render
}

View file

@ -8,6 +8,16 @@ pub trait Exit: Send {
}
}
/// Marker trait for [Component]s that can [Exit]
pub trait ExitableComponent<E>: Exit + Component<E> where E: Engine {
/// Perform type erasure for collecting heterogeneous components.
fn boxed (self) -> Box<dyn ExitableComponent<E>> where Self: Sized + 'static {
Box::new(self)
}
}
impl<E: Engine, C: Component<E> + Exit> ExitableComponent<E> for C {}
#[macro_export] macro_rules! exit {
($T:ty) => {
impl Exit for $T {
@ -20,13 +30,3 @@ pub trait Exit: Send {
}
}
}
/// Marker trait for [Component]s that can [Exit]
pub trait ExitableComponent<E>: Exit + Component<E> where E: Engine {
/// Perform type erasure for collecting heterogeneous components.
fn boxed (self) -> Box<dyn ExitableComponent<E>> where Self: Sized + 'static {
Box::new(self)
}
}
impl<E: Engine, C: Component<E> + Exit> ExitableComponent<E> for C {}

View file

@ -27,16 +27,10 @@ use better_panic::{Settings, Verbosity};
}
submod! {
audio
component
edn
engine
exit
focus
jack_core
jack_device
jack_event
jack_ports
keymap
space
time
tui

View file

@ -1 +0,0 @@
use crate::*;

View file

@ -77,7 +77,7 @@ impl<'a> Render<Tui> for RowSeparators<'a> {
if y >= to.buffer().area.height {
break
}
for x in area.x..area.width+area.y-2 {
for x in area.x..(area.width+area.y).saturating_sub(2) {
let cell = to.buffer().get_mut(x, y);
cell.modifier = Modifier::UNDERLINED;
cell.underline_color = Nord::SEPARATOR;

View file

@ -143,8 +143,8 @@ impl<'a> Render<Tui> for SequenceNotes<'a> {
let area = Rect {
x: area.x + Sequencer::H_KEYS_OFFSET as u16,
y: area.y + 1,
width: area.width - Sequencer::H_KEYS_OFFSET as u16,
height: area.height - 2
width: area.width.saturating_sub(Sequencer::H_KEYS_OFFSET as u16),
height: area.height.saturating_sub(2),
};
to.buffer_update(area, &move |cell, x, y|{
let src_x = ((x as usize + self.0.time_axis.start) * self.0.time_axis.scale) as usize;