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

@ -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 })?;