From 0bbf74e915691204e4072594c188f677a9b5c8f4 Mon Sep 17 00:00:00 2001 From: unspeaker Date: Fri, 6 Sep 2024 20:11:10 +0300 Subject: [PATCH] some more core refactor before fixing the mess --- .../tek_core/src/{jack_core.rs => audio.rs} | 7 ++++++- .../src/{jack_device.rs => audio/device.rs} | 4 +++- .../src/{jack_event.rs => audio/event.rs} | 4 ++-- .../src/{jack_ports.rs => audio/ports.rs} | 4 ++-- crates/tek_core/src/engine.rs | 5 ++++- crates/tek_core/src/{ => engine}/exit.rs | 20 +++++++++---------- crates/tek_core/src/{ => engine}/focus.rs | 0 crates/tek_core/src/{ => engine}/keymap.rs | 0 crates/tek_core/src/lib.rs | 8 +------- crates/tek_core/src/render.rs | 1 - crates/tek_sequencer/src/arranger_view_v.rs | 2 +- crates/tek_sequencer/src/sequencer_view_h.rs | 4 ++-- 12 files changed, 31 insertions(+), 28 deletions(-) rename crates/tek_core/src/{jack_core.rs => audio.rs} (99%) rename crates/tek_core/src/{jack_device.rs => audio/device.rs} (98%) rename crates/tek_core/src/{jack_event.rs => audio/event.rs} (98%) rename crates/tek_core/src/{jack_ports.rs => audio/ports.rs} (99%) rename crates/tek_core/src/{ => engine}/exit.rs (100%) rename crates/tek_core/src/{ => engine}/focus.rs (100%) rename crates/tek_core/src/{ => engine}/keymap.rs (100%) delete mode 100644 crates/tek_core/src/render.rs diff --git a/crates/tek_core/src/jack_core.rs b/crates/tek_core/src/audio.rs similarity index 99% rename from crates/tek_core/src/jack_core.rs rename to crates/tek_core/src/audio.rs index 4b0a0738..fd0f8207 100644 --- a/crates/tek_core/src/jack_core.rs +++ b/crates/tek_core/src/audio.rs @@ -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: Component + Process { /// Perform type erasure for collecting heterogeneous devices. @@ -228,4 +234,3 @@ fn query_ports ( ports }) } - diff --git a/crates/tek_core/src/jack_device.rs b/crates/tek_core/src/audio/device.rs similarity index 98% rename from crates/tek_core/src/jack_device.rs rename to crates/tek_core/src/audio/device.rs index 24049bc2..984acb84 100644 --- a/crates/tek_core/src/jack_device.rs +++ b/crates/tek_core/src/audio/device.rs @@ -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 { @@ -62,3 +63,4 @@ impl JackDevice { } } + diff --git a/crates/tek_core/src/jack_event.rs b/crates/tek_core/src/audio/event.rs similarity index 98% rename from crates/tek_core/src/jack_event.rs rename to crates/tek_core/src/audio/event.rs index ab187998..1edc007e 100644 --- a/crates/tek_core/src/jack_event.rs +++ b/crates/tek_core/src/audio/event.rs @@ -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 NotificationHandler for Notifications { Control::Continue } } - diff --git a/crates/tek_core/src/jack_ports.rs b/crates/tek_core/src/audio/ports.rs similarity index 99% rename from crates/tek_core/src/jack_ports.rs rename to crates/tek_core/src/audio/ports.rs index 63ab4f69..eac8ff39 100644 --- a/crates/tek_core/src/jack_ports.rs +++ b/crates/tek_core/src/audio/ports.rs @@ -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 { )?} }; } - diff --git a/crates/tek_core/src/engine.rs b/crates/tek_core/src/engine.rs index 114d5c97..05fbbae7 100644 --- a/crates/tek_core/src/engine.rs +++ b/crates/tek_core/src/engine.rs @@ -25,6 +25,9 @@ pub trait HandleContext {} pub trait RenderContext {} submod! { - render + exit + focus handle + keymap + render } diff --git a/crates/tek_core/src/exit.rs b/crates/tek_core/src/engine/exit.rs similarity index 100% rename from crates/tek_core/src/exit.rs rename to crates/tek_core/src/engine/exit.rs index ee9eaa5b..db5a0a1c 100644 --- a/crates/tek_core/src/exit.rs +++ b/crates/tek_core/src/engine/exit.rs @@ -8,6 +8,16 @@ pub trait Exit: Send { } } +/// Marker trait for [Component]s that can [Exit] +pub trait ExitableComponent: Exit + Component where E: Engine { + /// Perform type erasure for collecting heterogeneous components. + fn boxed (self) -> Box> where Self: Sized + 'static { + Box::new(self) + } +} + +impl + Exit> ExitableComponent 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: Exit + Component where E: Engine { - /// Perform type erasure for collecting heterogeneous components. - fn boxed (self) -> Box> where Self: Sized + 'static { - Box::new(self) - } -} - -impl + Exit> ExitableComponent for C {} diff --git a/crates/tek_core/src/focus.rs b/crates/tek_core/src/engine/focus.rs similarity index 100% rename from crates/tek_core/src/focus.rs rename to crates/tek_core/src/engine/focus.rs diff --git a/crates/tek_core/src/keymap.rs b/crates/tek_core/src/engine/keymap.rs similarity index 100% rename from crates/tek_core/src/keymap.rs rename to crates/tek_core/src/engine/keymap.rs diff --git a/crates/tek_core/src/lib.rs b/crates/tek_core/src/lib.rs index c0163643..7ae9fb84 100644 --- a/crates/tek_core/src/lib.rs +++ b/crates/tek_core/src/lib.rs @@ -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 diff --git a/crates/tek_core/src/render.rs b/crates/tek_core/src/render.rs deleted file mode 100644 index c7b7e813..00000000 --- a/crates/tek_core/src/render.rs +++ /dev/null @@ -1 +0,0 @@ -use crate::*; diff --git a/crates/tek_sequencer/src/arranger_view_v.rs b/crates/tek_sequencer/src/arranger_view_v.rs index 0c06b4c3..58c06a21 100644 --- a/crates/tek_sequencer/src/arranger_view_v.rs +++ b/crates/tek_sequencer/src/arranger_view_v.rs @@ -77,7 +77,7 @@ impl<'a> Render 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; diff --git a/crates/tek_sequencer/src/sequencer_view_h.rs b/crates/tek_sequencer/src/sequencer_view_h.rs index 53f302cc..2bd21cc7 100644 --- a/crates/tek_sequencer/src/sequencer_view_h.rs +++ b/crates/tek_sequencer/src/sequencer_view_h.rs @@ -143,8 +143,8 @@ impl<'a> Render 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;