From 7dc435754a91bfa1951c9bfff3551c48b78779df Mon Sep 17 00:00:00 2001 From: unspeaker Date: Fri, 24 Jan 2025 23:56:39 +0100 Subject: [PATCH] fix some more of the highlightings --- tek/src/view.rs | 117 +++++++++++++++++++---------------------- tui/src/tui_content.rs | 4 +- 2 files changed, 55 insertions(+), 66 deletions(-) diff --git a/tek/src/view.rs b/tek/src/view.rs index 16e17bd8..ab38f05f 100644 --- a/tek/src/view.rs +++ b/tek/src/view.rs @@ -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, name: Arc|Phat { + let cell = move|s, bg: &ItemPalette, last: Option, name: Arc|{ + 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 + 'a, label: impl Content + 'a diff --git a/tui/src/tui_content.rs b/tui/src/tui_content.rs index 3bd87895..f83fea44 100644 --- a/tui/src/tui_content.rs +++ b/tui/src/tui_content.rs @@ -132,8 +132,8 @@ impl Phat { } impl> Content for Phat { fn content (&self) -> impl Render { - 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)