From bf165c6be193fe367c33d26cdbf2a0b337d27232 Mon Sep 17 00:00:00 2001 From: unspeaker Date: Tue, 3 Sep 2024 18:13:10 +0300 Subject: [PATCH] wip: update core for generic Render --- crates/tek_core/src/jack_core.rs | 4 +- crates/tek_core/src/render.rs | 11 +++++ crates/tek_core/src/render_border.rs | 4 +- crates/tek_core/src/render_split.rs | 61 +++++++++++++++------------- crates/tek_core/src/render_tui.rs | 50 +++++++++-------------- 5 files changed, 68 insertions(+), 62 deletions(-) diff --git a/crates/tek_core/src/jack_core.rs b/crates/tek_core/src/jack_core.rs index 56889364..7db017ac 100644 --- a/crates/tek_core/src/jack_core.rs +++ b/crates/tek_core/src/jack_core.rs @@ -144,7 +144,9 @@ impl Jack { }) } pub fn run (self, state: impl FnOnce(JackPorts)->Box) -> Usually> - where D: Device + Process + Sized + 'static + where D: Device + Process + Sized + 'static, + T: 'static, + U: 'static { let owned_ports = JackPorts { audio_ins: register_ports(&self.client, self.audio_ins, AudioIn)?, diff --git a/crates/tek_core/src/render.rs b/crates/tek_core/src/render.rs index 0471b1c0..7d5488c6 100644 --- a/crates/tek_core/src/render.rs +++ b/crates/tek_core/src/render.rs @@ -59,3 +59,14 @@ impl Render for RwLock where R: Render { self.read().unwrap().render(to) } } + +/// Boxed closures can be rendered. +/// +/// Rendering unboxed closures should also be possible; +/// but in practice implementing the trait for an unboxed +/// `Fn` closure causes an impl conflict. +impl<'a, T, U> Render for Box Perhaps + Send + Sync + 'a> { + fn render (&self, to: &mut T) -> Perhaps { + (*self)(to) + } +} diff --git a/crates/tek_core/src/render_border.rs b/crates/tek_core/src/render_border.rs index bda9dda6..3b512a8c 100644 --- a/crates/tek_core/src/render_border.rs +++ b/crates/tek_core/src/render_border.rs @@ -28,11 +28,11 @@ pub trait BorderStyle { Ok(area) } #[inline] - fn draw_north (&self, buf: &mut Buffer, x: u16, y: u16, style: Option