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 {
} else { Some(self.scenes[s].color)
Some(self.scenes[s-1].color) } else {
})), move|(_, scene, y1, y2, last), s| { Some(self.scenes[s-1].color)
let height = (1 + y2 - y1) as u16; })) }),
Either(y2 > size_h, (), map_south(y1 as u16, height, move|(_, scene, y1, y2, last), s| {
Fixed::y(height, Outer(false, bstyle) let height = (1 + y2 - y1) as u16;
.enclose(cell(s, &scene.color, last, scene.name.clone()))))) map_south(y1 as u16, height, Fixed::y(height,
})).boxed() 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 {
} else { self.scenes[s].clips[t].as_ref().map(|c|c.read().unwrap().color)
Some(self.scenes[s-1].color) } else {
})), move|(_, scene, y1, y2, last), s| { self.scenes[s-1].clips[t].as_ref().map(|c|c.read().unwrap().color)
let height = (1 + y2 - y1) as u16; })) }),
Thunk::new(move||{ move|(_, scene, y1, y2, last), s| {
let height = (1 + y2 - y1) as u16;
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] {
@ -343,44 +346,30 @@ impl Tek {
// weird offsetting: // weird offsetting:
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, Thunk::new(move||Bsp::a(
Fixed::y(height, Outer(false, bstyle) Fill::xy(Align::nw(button(tab, content()))),
.enclose(Either::new(active, &self.editor)),
Thunk::new(move||Bsp::a( Thunk::new(move||Bsp::a(
Fill::xy(Align::nw(button(tab, label()))), When::new(selected, Fill::y(Align::n(button(tab, "edit")))),
&self.editor)), Phat {
Thunk::new(move||Bsp::a( width: 0,
When::new(selected, Fill::y(Align::n(button(tab, "edit")))), height: 0,
Phat { selected,
width: 0, content: content(),
height: 3, fg,
selected, top: if neighbor { last.map(|last|last.light.rgb) } else { last.map(|last|last.base.rgb) },
content: { mid: if selected { bg.light } else { bg.base }.rgb,
let clip = scene.clips[t].clone(); low: Some(Reset)
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,
top,
mid: if selected { bg.light } else { bg.base }.rgb,
low: Some(Reset)
})))))))
}) })
})
}); });
//let border = move|x|Outer(false, bstyle).enclose_bg(x); //let border = move|x|Outer(false, bstyle).enclose_bg(x);
self.view_row( self.view_row(
@ -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)