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 },
":samples-w" => if self.is_editing() { 4 } else { 11 },
":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 {
($area:expr;|$self:ident,$track:ident,$index:ident|$content:expr) => {{
@ -298,41 +298,44 @@ impl Tek {
let selected_track = self.selected().track();
let selected_scene = self.selected().scene();
let header = move||{
let cell = {
move|i, color: &ItemPalette, last: Option<ItemPalette>, name: Arc<str>|Phat {
let cell = move|s, bg: &ItemPalette, last: Option<ItemPalette>, name: Arc<str>|{
let selected = self.selected().scene() == Some(s+1);
let neighbor = self.selected().scene() == Some(s);
Phat {
width: 0,
height: 0,
selected: self.selected().scene() == Some(i),
selected: selected,
content: Tui::bold(true, Bsp::e("🭬", name.clone())),
fg: color.lightest.rgb,
top: if self.selected().scene() == Some(i) { 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,
low: Some(Reset)
fg: bg.lightest.rgb,
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,
low: Some(Reset)
}
};
Align::y(Map::new(move||self.scenes_sizes(editing, 2, 15)
.map(|(s, scene, y1, y2)|(s, scene, y1, y2, if s == 0 {
None
} else {
Some(self.scenes[s-1].color)
})), move|(_, scene, y1, y2, last), s| {
let height = (1 + y2 - y1) as u16;
Either(y2 > size_h, (), map_south(y1 as u16, height,
Fixed::y(height, Outer(false, bstyle)
.enclose(cell(s, &scene.color, last, scene.name.clone())))))
})).boxed()
Align::y(Map::new(
move||self.scenes_sizes(editing, 2, 15).map_while(
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 {
Some(self.scenes[s-1].color)
})) }),
move|(_, scene, y1, y2, last), s| {
let height = (1 + y2 - y1) as u16;
map_south(y1 as u16, height, Fixed::y(height,
cell(s, &scene.color, last, scene.name.clone()))) })).boxed()
};
let content: ThunkBox<_> = per_track!(self.size.w(); |self, track, t|{
let tab = " Tab ";
let same_track = selected_track == Some(t+1);
Map::new(move||self.scenes_sizes(editing, 2, 15)
.map(|(s, scene, y1, y2)|(s, scene, y1, y2, if s == 0 {
None
} else {
Some(self.scenes[s-1].color)
})), move|(_, scene, y1, y2, last), s| {
let height = (1 + y2 - y1) as u16;
Thunk::new(move||{
Map::new(
move||self.scenes_sizes(editing, 2, 15).map_while(
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 {
self.scenes[s-1].clips[t].as_ref().map(|c|c.read().unwrap().color)
})) }),
move|(_, scene, y1, y2, last), s| {
let height = (1 + y2 - y1) as u16;
let mut fg = Tui::g(64);
let mut bg = ItemPalette::G[32];
if let Some(clip) = &scene.clips[t] {
@ -343,44 +346,30 @@ impl Tek {
// weird offsetting:
let selected = same_track && selected_scene == Some(s+1);
let neighbor = same_track && selected_scene == Some(s);
let active = editing && selected;
let top = if neighbor {
last.map(|last|last.light.rgb)
} else {
last.map(|last|last.base.rgb)
};
let label = move||{
let active = editing && selected;
let content = move||{
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), " "))))
};
//map_south(y1 as u16, height, format!("{height}/{size_h}"))
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(
Fill::xy(Align::nw(button(tab, label()))),
&self.editor)),
Thunk::new(move||Bsp::a(
When::new(selected, Fill::y(Align::n(button(tab, "edit")))),
Phat {
width: 0,
height: 3,
selected,
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,
top,
mid: if selected { bg.light } else { bg.base }.rgb,
low: Some(Reset)
})))))))
map_south(y1 as u16, height, Fixed::y(height, Either::new(active,
Thunk::new(move||Bsp::a(
Fill::xy(Align::nw(button(tab, content()))),
&self.editor)),
Thunk::new(move||Bsp::a(
When::new(selected, Fill::y(Align::n(button(tab, "edit")))),
Phat {
width: 0,
height: 0,
selected,
content: content(),
fg,
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,
low: Some(Reset)
})))))
})
})
});
//let border = move|x|Outer(false, bstyle).enclose_bg(x);
self.view_row(
@ -397,11 +386,11 @@ impl Tek {
.unwrap_or(0)
}
fn w_sidebar (&self) -> u16 {
let w = self.size.w();
let w = 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 };
let w = if self.is_editing() { w / 2 } else { w };
w
let w = (self.size.w() / 10);
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 });
//let w = if self.is_editing() { w / 2 } else { w };
w as u16
}
fn button <'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> {
fn content (&self) -> impl Render<TuiOut> {
let top = self.top.map(|top|Self::lo(self.mid, top));
let low = self.low.map(|low|Self::hi(self.mid, low));
let top = Fixed::y(1, self.top.map(|top|Self::lo(self.mid, top)));
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 phat = Bsp::s(top, Bsp::n(low, Fill::xy(content)));
Min::xy(self.width, self.height, phat)