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