freestanding view_scene_name

This commit is contained in:
🪞👃🪞 2025-03-05 00:55:51 +02:00
parent 7633813ab2
commit 64d520e75c

View file

@ -1,12 +1,6 @@
use crate::*;
impl Tek {
pub fn view_arranger (&self) -> impl Content<TuiOut> + use<'_> {
Bsp::s(self.view_inputs(),
Bsp::s(self.view_tracks(),
Bsp::n(self.view_outputs(),
self.view_scenes())))
}
// FIXME: The memoized arranger is too complex.
// Just render a slice of the arranger for now,
@ -48,16 +42,24 @@ impl Tek {
/// of the arranger buffer to blit in [view_arranger].
pub fn redraw_arranger (&self) {
return;
let width = self.w_tracks();
let height = self.h_scenes() + self.h_inputs() + self.h_outputs();
let buffer = Buffer::empty(ratatui::prelude::Rect { x: 0, y: 0, width, height });
let mut output = TuiOut { buffer, area: [0, 0, width, height] };
let layout = Bsp::s(self.view_inputs(),
Bsp::s(self.view_tracks(),
Bsp::n(self.view_outputs(),
self.view_scenes())));
Content::render(&layout, &mut output);
*self.arranger.write().unwrap() = output.buffer;
//let width = self.w_tracks();
//let height = self.h_scenes() + self.h_inputs() + self.h_outputs();
//let buffer = Buffer::empty(ratatui::prelude::Rect { x: 0, y: 0, width, height });
//let mut output = TuiOut { buffer, area: [0, 0, width, height] };
//let layout = Bsp::s(self.view_inputs(),
//Bsp::s(self.view_tracks(),
//Bsp::n(self.view_outputs(),
//self.view_scenes())));
//Content::render(&layout, &mut output);
//*self.arranger.write().unwrap() = output.buffer;
}
pub fn view_arranger (&self) -> impl Content<TuiOut> + use<'_> {
let ins = self.view_inputs();
let trs = self.view_tracks();
let out = self.view_outputs();
let scn = self.view_scenes();
Bsp::s(ins, Bsp::s(trs, Bsp::n(out, scn)))
}
pub fn view_tracks (&self) -> impl Content<TuiOut> + use<'_> {
@ -72,14 +74,14 @@ impl Tek {
}
pub fn view_scenes (&self) -> impl Content<TuiOut> + use<'_> {
let editing = self.is_editing();
let s = self.w_sidebar() as u16;
let w = self.w_tracks_area();
let w_full = self.w();
let h = self.h_scenes();
let h_area = self.h_tracks_area();
let selected_track = self.selected().track();
let selected_scene = self.selected().scene();
let editing = self.is_editing();
let s = self.w_sidebar() as u16;
let w = self.w_tracks_area();
let w_full = self.w();
let h = self.h_scenes();
let h_area = self.h_tracks_area();
let st = self.selected().track();
let ss = self.selected().scene();
let track_scroll = {
let offset = self.track_scroll;
let length = self.w_tracks_area() as usize;
@ -95,36 +97,25 @@ impl Tek {
Tui::bg(Reset, Bsp::s(track_scroll, Bsp::e(scene_scroll, Fixed::y(h_area, row(w, h, s,
Map::new(
move||self.scenes_with_colors(editing, h_area),
move|(s, scene, y1, y2, prev): SceneWithColor, _|self.view_scene_name(
w_full, (1 + y2 - y1) as u16, y1 as u16, s, scene, prev)),
move|(s, scene, y1, y2, prev): SceneWithColor, _|view_scene_name(
w_full,
(1 + y2 - y1) as u16,
y1 as u16,
s,
scene,
prev,
s == self.scenes.len().saturating_sub(1),
self.selected().scene(),
)
),
self.per_track(move|t, track|Map::new(
move||self.scenes_with_track_colors(editing, h_area, t),
move|(s, scene, y1, y2, prev): SceneWithColor, _|self.view_scene_clip(
w, (1 + y2 - y1) as u16, y1 as u16,
scene, prev, s, t, editing, selected_track == Some(t), selected_scene))),
() )))))
}
fn view_scene_name (
&self,
width: u16,
height: u16,
offset: u16,
index: usize,
scene: &Scene,
prev: Option<ItemPalette>,
) -> impl Content<TuiOut> + use<'_> {
Fill::x(map_south(offset, height, Fixed::y(height, scene_cell(
index == self.scenes.len().saturating_sub(1),
self.selected().scene(),
true,
index,
&scene.color,
prev,
Some(scene.name.clone()),
"",
scene.color.lightest.rgb
))))
scene, prev, s, t, editing, st == Some(t), ss)
)),
()
)))))
}
fn view_scene_clip (
@ -252,6 +243,29 @@ impl Tek {
}
fn view_scene_name (
width: u16,
height: u16,
offset: u16,
index: usize,
scene: &Scene,
prev: Option<ItemPalette>,
last: bool,
selected: Option<usize>,
) -> impl Content<TuiOut> {
Fill::x(map_south(offset, height, Fixed::y(height, scene_cell(
last,
selected,
true,
index,
&scene.color,
prev,
Some(scene.name.clone()),
"",
scene.color.lightest.rgb
))))
}
fn view_inputs <'a, T, U, V, W> (
w: u16,
s: u16,
@ -266,11 +280,8 @@ fn view_inputs <'a, T, U, V, W> (
W: Content<TuiOut>,
{
let headers = Bsp::s(Align::e("Input:"), Align::e("Into:"));
let separators = per_track_top(
w_tracks_area,
tracks_sizes,
|_, _|Tui::bg(Reset, Align::c(Bsp::s( OctaveVertical::default(), " ------ ")))
);
let sep = |_, _|Tui::bg(Reset, Align::c(Bsp::s(OctaveVertical::default(), " ------ ")));
let separators = per_track_top(w_tracks_area, tracks_sizes, sep);
Bsp::s(Bsp::s(routes, ports), row_top(w, 2, s, headers, separators, ()))
}