mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-06 11:46:41 +01:00
fix: collect enum, break: Render for Option<&T>
This commit is contained in:
parent
72f47bc837
commit
33bdf65e8d
8 changed files with 37 additions and 33 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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}");
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -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([
|
||||
|
|
|
|||
|
|
@ -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 })?;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue