fix: collect enum, break: Render for Option<&T>

This commit is contained in:
🪞👃🪞 2024-08-21 18:22:35 +03:00
parent 72f47bc837
commit 33bdf65e8d
8 changed files with 37 additions and 33 deletions

View file

@ -137,6 +137,7 @@ mod plugin {
let features = FeaturesBuilder { min_block_length: 1, max_block_length: 65536 };
let features = world.build_features(features);
let mut plugin = None;
#[allow(clippy::never_loop)]
for p in world.iter_plugins() {
plugin = Some(p);
break

View file

@ -76,23 +76,23 @@ impl Render for () {
}
}
impl<T: Render> Render for &T {
fn render (&self, buf: &mut Buffer, area: Rect) -> Usually<Rect> {
(*self).render(buf, area)
}
fn into_collected <'a> (self) -> Collected<'a> where Self: Sized + 'a {
Collected::Ref(self)
}
}
//impl<T: Render> Render for &T {
//fn render (&self, buf: &mut Buffer, area: Rect) -> Usually<Rect> {
//(*self).render(buf, area)
//}
//fn into_collected <'a> (self) -> Collected<'a> where Self: Sized + 'a {
//Collected::Ref(self)
//}
//}
impl<T: Render> Render for &mut T {
fn render (&self, buf: &mut Buffer, area: Rect) -> Usually<Rect> {
(**self).render(buf, area)
}
fn into_collected <'a> (self) -> Collected<'a> where Self: Sized + 'a {
Collected::Ref(self)
}
}
//impl<T: Render> Render for &mut T {
//fn render (&self, buf: &mut Buffer, area: Rect) -> Usually<Rect> {
//(**self).render(buf, area)
//}
//fn into_collected <'a> (self) -> Collected<'a> where Self: Sized + 'a {
//Collected::Ref(self)
//}
//}
impl<T: Render> Render for Option<T> {
fn render (&self, b: &mut Buffer, a: Rect) -> Usually<Rect> {
@ -103,21 +103,27 @@ impl<T: Render> Render for Option<T> {
}
}
impl Render for Box<dyn Render> {
impl<'a> Render for Box<dyn Render + 'a> {
fn render (&self, buf: &mut Buffer, area: Rect) -> Usually<Rect> {
(**self).render(buf, area)
}
fn into_collected <'a> (self) -> Collected<'a> where Self: Sized + 'a {
fn into_collected <'b> (self) -> Collected<'b> where Self: Sized + 'b {
Collected::Box(self)
}
}
impl Render for Box<dyn Fn(&mut Buffer, Rect) -> Usually<Rect> + Send + Sync> {
impl<'a, T: Fn(&mut Buffer, Rect) -> Usually<Rect> + Send + Sync + 'a> Render for T {
fn render (&self, b: &mut Buffer, a: Rect) -> Usually<Rect> {
(*self)(b, a)
}
}
//impl<'a> Render for Box<dyn Fn(&mut Buffer, Rect) -> Usually<Rect> + Send + Sync + 'a> {
//fn render (&self, b: &mut Buffer, a: Rect) -> Usually<Rect> {
//(*self)(b, a)
//}
//}
impl<T: Render> Render for Arc<Mutex<T>> {
fn render (&self, b: &mut Buffer, a: Rect) -> Usually<Rect> {
self.lock().unwrap().render(b, a)

View file

@ -25,12 +25,12 @@ impl<'a> Collection<'a> {
}
pub trait Collect<'a> {
fn add_box (self, item: Box<dyn Render>) -> Self;
fn add_box (self, item: Box<dyn Render + 'a>) -> Self;
fn add_ref (self, item: &'a dyn Render) -> Self;
}
impl<'a> Collect<'a> for Collection<'a> {
fn add_box (mut self, item: Box<dyn Render>) -> Self {
fn add_box (mut self, item: Box<dyn Render + 'a>) -> Self {
self.0.push(Collected::Box(item));
self
}

View file

@ -44,9 +44,8 @@ impl LV2Plugin {
let features = FeaturesBuilder { min_block_length: 1, max_block_length: 65536 };
let features = world.build_features(features);
let mut plugin = None;
for p in world.iter_plugins() {
if let Some(p) = world.iter_plugins().next() {
plugin = Some(p);
break
}
let plugin = plugin.unwrap();
let err = &format!("init {uri}");

View file

@ -20,8 +20,6 @@ impl ArrangerViewMode {
}
}
use std::iter::IntoIterator;
struct Split<'a>(Collection<'a>, Direction);
impl<'a> Split<'a> {
@ -37,8 +35,8 @@ impl<'a> Render for Split<'a> {
}
impl<'a> Collect<'a> for Split<'a> {
fn add (mut self, item: Box<dyn Render>) -> Self {
self.0 = self.0.add(item);
fn add_box (mut self, item: Box<dyn Render + 'a>) -> Self {
self.0 = self.0.add_box(item);
self
}
fn add_ref (mut self, item: &'a dyn Render) -> Self {
@ -79,10 +77,10 @@ render!(Arranger |self, buf, area| {
});
if let Some(direction) = self.show_sequencer {
layout = layout.add(Box::new(Split::new(direction)
.add(arrangement)));
let sequencer = Box::new(Split::new(direction).add_box(arrangement));
layout = layout.add_box(sequencer);
} else {
layout = layout.add(arrangement);
layout = layout.add_box(arrangement);
}
layout.render(buf, area)

View file

@ -3,7 +3,7 @@ use crate::*;
pub fn draw (state: &Arranger, buf: &mut Buffer, mut area: Rect) -> Usually<Rect> {
area.height = area.height.min((2 + state.tracks.len() * 2) as u16);
Layered([
&to_fill_bg(Nord::bg_lo(state.focused, state.entered)),
&FillBg(Nord::bg_lo(state.focused, state.entered)),
&Split::right([
&track_name_column(state),
&track_mon_column(state),

View file

@ -31,7 +31,7 @@ pub fn draw (
area.height = 2 + (rows[rows.len() - 1].1 / 96) as u16;
let offset = 3 + scene_name_max_len(state.scenes.as_ref()) as u16;
Layered([
&to_fill_bg(Nord::bg_lo(state.focused, state.entered)),
&FillBg(Nord::bg_lo(state.focused, state.entered)),
&column_separators(offset, cols),
&cursor_focus(state, offset, cols, rows),
&Split::down([

View file

@ -37,7 +37,7 @@ render!(TransportToolbar |self, buf, area| {
// Beats per minute
&|buf: &mut Buffer, Rect { x, y, .. }: Rect|{
"BPM".blit(buf, x, y, Some(not_dim))?;
let width = format!("{}.{:03}", bpm, bpm % 1).blit(buf, x, y + 1, Some(not_dim_bold))?.width;
let width = format!("{}.{:03}", bpm, bpm * 1000 % 1000).blit(buf, x, y + 1, Some(not_dim_bold))?.width;
let area = Rect { x, y, width: (width + 2).max(10), height: 2 };
if self.focused && self.entered && self.selected == TransportFocus::BPM {
corners.draw(buf, Rect { x: area.x - 1, ..area })?;