fix some more of the highlightings

This commit is contained in:
🪞👃🪞 2025-01-24 23:56:39 +01:00
parent 77809ca289
commit 7dc435754a
2 changed files with 55 additions and 66 deletions

View file

@ -69,7 +69,7 @@ provide_num!(u16: |self: Tek| {
":sample-h" => if self.is_editing() { 0 } else { 5 }, ":sample-h" => if self.is_editing() { 0 } else { 5 },
":samples-w" => if self.is_editing() { 4 } else { 11 }, ":samples-w" => if self.is_editing() { 4 } else { 11 },
":samples-y" => if self.is_editing() { 1 } else { 0 }, ":samples-y" => if self.is_editing() { 1 } else { 0 },
":outs-y" => self.size.h().saturating_sub(self.midi_outs.len() + 7) as u16, ":outs-y" => self.size.h().saturating_sub(self.midi_outs.len() + 2) as u16,
}); });
macro_rules! per_track { macro_rules! per_track {
($area:expr;|$self:ident,$track:ident,$index:ident|$content:expr) => {{ ($area:expr;|$self:ident,$track:ident,$index:ident|$content:expr) => {{
@ -298,41 +298,44 @@ impl Tek {
let selected_track = self.selected().track(); let selected_track = self.selected().track();
let selected_scene = self.selected().scene(); let selected_scene = self.selected().scene();
let header = move||{ let header = move||{
let cell = { let cell = move|s, bg: &ItemPalette, last: Option<ItemPalette>, name: Arc<str>|{
move|i, color: &ItemPalette, last: Option<ItemPalette>, name: Arc<str>|Phat { let selected = self.selected().scene() == Some(s+1);
let neighbor = self.selected().scene() == Some(s);
Phat {
width: 0, width: 0,
height: 0, height: 0,
selected: self.selected().scene() == Some(i), selected: selected,
content: Tui::bold(true, Bsp::e("🭬", name.clone())), content: Tui::bold(true, Bsp::e("🭬", name.clone())),
fg: color.lightest.rgb, fg: bg.lightest.rgb,
top: if self.selected().scene() == Some(i) { last.map(|last|last.light.rgb) } else { last.map(|last|last.base.rgb) }, top: if neighbor { last.map(|last|last.light.rgb) } else { last.map(|last|last.base.rgb) },
mid: if self.selected().scene() == Some(i+1) { color.light } else { color.base }.rgb, mid: if selected { bg.light } else { bg.base }.rgb,
low: Some(Reset) low: Some(Reset)
} }
}; };
Align::y(Map::new(move||self.scenes_sizes(editing, 2, 15) Align::y(Map::new(
.map(|(s, scene, y1, y2)|(s, scene, y1, y2, if s == 0 { move||self.scenes_sizes(editing, 2, 15).map_while(
None move|(s, scene, y1, y2)|if y2 > size_h { None } else { Some((s, scene, y1, y2, if s == 0 {
Some(self.scenes[s].color)
} else { } else {
Some(self.scenes[s-1].color) Some(self.scenes[s-1].color)
})), move|(_, scene, y1, y2, last), s| { })) }),
move|(_, scene, y1, y2, last), s| {
let height = (1 + y2 - y1) as u16; let height = (1 + y2 - y1) as u16;
Either(y2 > size_h, (), map_south(y1 as u16, height, map_south(y1 as u16, height, Fixed::y(height,
Fixed::y(height, Outer(false, bstyle) cell(s, &scene.color, last, scene.name.clone()))) })).boxed()
.enclose(cell(s, &scene.color, last, scene.name.clone())))))
})).boxed()
}; };
let content: ThunkBox<_> = per_track!(self.size.w(); |self, track, t|{ let content: ThunkBox<_> = per_track!(self.size.w(); |self, track, t|{
let tab = " Tab "; let tab = " Tab ";
let same_track = selected_track == Some(t+1); let same_track = selected_track == Some(t+1);
Map::new(move||self.scenes_sizes(editing, 2, 15) Map::new(
.map(|(s, scene, y1, y2)|(s, scene, y1, y2, if s == 0 { move||self.scenes_sizes(editing, 2, 15).map_while(
None move|(s, scene, y1, y2)|if y2 > size_h { None } else { Some((s, scene, y1, y2, if s == 0 {
self.scenes[s].clips[t].as_ref().map(|c|c.read().unwrap().color)
} else { } else {
Some(self.scenes[s-1].color) self.scenes[s-1].clips[t].as_ref().map(|c|c.read().unwrap().color)
})), move|(_, scene, y1, y2, last), s| { })) }),
move|(_, scene, y1, y2, last), s| {
let height = (1 + y2 - y1) as u16; let height = (1 + y2 - y1) as u16;
Thunk::new(move||{
let mut fg = Tui::g(64); let mut fg = Tui::g(64);
let mut bg = ItemPalette::G[32]; let mut bg = ItemPalette::G[32];
if let Some(clip) = &scene.clips[t] { if let Some(clip) = &scene.clips[t] {
@ -344,42 +347,28 @@ impl Tek {
let selected = same_track && selected_scene == Some(s+1); let selected = same_track && selected_scene == Some(s+1);
let neighbor = same_track && selected_scene == Some(s); let neighbor = same_track && selected_scene == Some(s);
let active = editing && selected; let active = editing && selected;
let top = if neighbor { let content = move||{
last.map(|last|last.light.rgb)
} else {
last.map(|last|last.base.rgb)
};
let label = move||{
let clip = scene.clips[t].clone(); let clip = scene.clips[t].clone();
let icon = ""; let icon = "";
let name = clip.map(|c|c.read().unwrap().name.clone()); let name = clip.map(|c|c.read().unwrap().name.clone());
Align::nw(Tui::fg(fg, Bsp::e(icon, Bsp::e(Tui::bold(true, name), " ")))) Align::nw(Tui::fg(fg, Bsp::e(icon, Bsp::e(Tui::bold(true, name), " "))))
}; };
//map_south(y1 as u16, height, format!("{height}/{size_h}")) map_south(y1 as u16, height, Fixed::y(height, Either::new(active,
Either(y2 > size_h, (), map_south(y1 as u16, height,
Fixed::y(height, Outer(false, bstyle)
.enclose(Either::new(active,
Thunk::new(move||Bsp::a( Thunk::new(move||Bsp::a(
Fill::xy(Align::nw(button(tab, label()))), Fill::xy(Align::nw(button(tab, content()))),
&self.editor)), &self.editor)),
Thunk::new(move||Bsp::a( Thunk::new(move||Bsp::a(
When::new(selected, Fill::y(Align::n(button(tab, "edit")))), When::new(selected, Fill::y(Align::n(button(tab, "edit")))),
Phat { Phat {
width: 0, width: 0,
height: 3, height: 0,
selected, selected,
content: { content: content(),
let clip = scene.clips[t].clone();
let icon = "";
let name = clip.map(|c|c.read().unwrap().name.clone());
Align::nw(Tui::fg(fg, Bsp::e(icon, Bsp::e(Tui::bold(true, name), " "))))
},
fg, fg,
top, top: if neighbor { last.map(|last|last.light.rgb) } else { last.map(|last|last.base.rgb) },
mid: if selected { bg.light } else { bg.base }.rgb, mid: if selected { bg.light } else { bg.base }.rgb,
low: Some(Reset) low: Some(Reset)
}))))))) })))))
})
}) })
}); });
//let border = move|x|Outer(false, bstyle).enclose_bg(x); //let border = move|x|Outer(false, bstyle).enclose_bg(x);
@ -397,11 +386,11 @@ impl Tek {
.unwrap_or(0) .unwrap_or(0)
} }
fn w_sidebar (&self) -> u16 { fn w_sidebar (&self) -> u16 {
let w = self.size.w(); let w = (self.size.w() / 10);
let w = if w > 80 { 20 } else if w > 70 { 18 } else if w > 60 { 16 } let w = w.min(if w > 80 { 20 } else if w > 70 { 18 } else if w > 60 { 16 }
else if w > 50 { 14 } else if w > 40 { 12 } else { 10 }; else if w > 50 { 14 } else if w > 40 { 12 } else { 10 });
let w = if self.is_editing() { w / 2 } else { w }; //let w = if self.is_editing() { w / 2 } else { w };
w w as u16
} }
fn button <'a> ( fn button <'a> (
&'a self, key: impl Content<TuiOut> + 'a, label: impl Content<TuiOut> + 'a &'a self, key: impl Content<TuiOut> + 'a, label: impl Content<TuiOut> + 'a

View file

@ -132,8 +132,8 @@ impl<T> Phat<T> {
} }
impl<T: Content<TuiOut>> Content<TuiOut> for Phat<T> { impl<T: Content<TuiOut>> Content<TuiOut> for Phat<T> {
fn content (&self) -> impl Render<TuiOut> { fn content (&self) -> impl Render<TuiOut> {
let top = self.top.map(|top|Self::lo(self.mid, top)); let top = Fixed::y(1, self.top.map(|top|Self::lo(self.mid, top)));
let low = self.low.map(|low|Self::hi(self.mid, low)); let low = Fixed::y(1, self.low.map(|low|Self::hi(self.mid, low)));
let content = Tui::fg_bg(self.fg, self.mid, &self.content); let content = Tui::fg_bg(self.fg, self.mid, &self.content);
let phat = Bsp::s(top, Bsp::n(low, Fill::xy(content))); let phat = Bsp::s(top, Bsp::n(low, Fill::xy(content)));
Min::xy(self.width, self.height, phat) Min::xy(self.width, self.height, phat)