track down and fix clip color bug

This commit is contained in:
🪞👃🪞 2025-04-23 15:04:48 +03:00
parent 37be2f4add
commit 6b9099b087
2 changed files with 62 additions and 67 deletions

View file

@ -1,6 +1,5 @@
use crate::*;
mod view_clock; pub use self::view_clock::*;
mod view_color; pub use self::view_color::*;
mod view_memo; pub use self::view_memo::*;
mod view_meter; pub use self::view_meter::*;
mod view_ports; pub use self::view_ports::*;
@ -118,45 +117,72 @@ impl<'a> ArrangerView<'a> {
let scene_headers = Map::new(||self.scenes_with_scene_colors(),
move|(index, scene, y1, y2, previous): SceneWithColor, _|{
let same_track = true;
let height = (1 + y2 - y1) as u16;
let name = Some(scene.name.clone());
let content = Fill::x(Align::w(Tui::bold(true, Bsp::e("", name))));
let same_track = true;
let selected = same_track && *scene_selected == Some(index);
let neighbor = same_track && index > 0 && *scene_selected == Some(index - 1);
let is_last = *scene_last == index;
let theme = scene.color;
let fg = theme.lightest.rgb;
let bg = if selected { theme.light } else { theme.base }.rgb;
let hi = if let Some(previous) = previous {
if neighbor {
previous.light.rgb
} else {
previous.base.rgb
}
} else {
Reset
};
let lo = if is_last {
Reset
} else if selected {
theme.light.rgb
} else {
theme.base.rgb
};
Fill::x(map_south(y1 as u16, height, Fixed::y(height, Phat {
width: 0,
height: 0,
content: Fill::x(Align::w(Tui::bold(true, Bsp::e("", name)))),
colors: Tek::colors(
&scene.color,
previous,
same_track && *scene_selected == Some(index),
same_track && index > 0 && *scene_selected == Some(index - 1),
*scene_last == index
)
width: 0, height: 0, content, colors: [fg, bg, hi, lo]
})))
});
let scene_track_clips = per_track(*width_mid, ||self.tracks_with_sizes_scrolled(),
move|track_index, track|Map::new(||self.scenes_with_track_colors(),
move|(scene_index, scene, y1, y2, prev_scene): SceneWithColor<'a>, _|{
let (name, _fg, bg) = if let Some(clip) = &scene.clips[track_index] {
move|track_index, track|Map::new(move||self.scenes_with_track_colors(track_index),
move|(scene_index, scene, y1, y2, previous): SceneWithColor<'a>, _|{
let (name, theme) = if let Some(clip) = &scene.clips[track_index] {
let clip = clip.read().unwrap();
(Some(clip.name.clone()), clip.color.lightest.rgb, clip.color)
(Some(clip.name.clone()), clip.color)
} else {
(None, Tui::g(96), ItemPalette::G[32])
(None, ItemPalette::G[32])
};
let height = (1 + y2 - y1) as u16;
let content = Fill::x(Align::w(Tui::bold(true, Bsp::e("", name))));
let same_track = *track_selected == Some(track_index);
let height = (1 + y2 - y1) as u16;
let selected = same_track && *scene_selected == Some(scene_index);
let neighbor = same_track && scene_index > 0 && *scene_selected == Some(scene_index - 1);
let is_last = *scene_last == scene_index;
let fg = theme.lightest.rgb;
let bg = if selected { theme.light } else { theme.base }.rgb;
let hi = if let Some(previous) = previous {
if neighbor {
previous.light.rgb
} else {
previous.base.rgb
}
} else {
Reset
};
let lo = if is_last {
Reset
} else if selected {
theme.light.rgb
} else {
theme.base.rgb
};
map_south(y1 as u16, height, Bsp::b(Fixed::y(height, Phat {
width: 0,
height: 0,
content: Fill::x(Align::w(Tui::bold(true, Bsp::e("", name)))),
colors: Tek::colors(
&bg,
None,
same_track && *scene_selected == Some(scene_index),
same_track && scene_index > 0 && *scene_selected == Some(scene_index - 1),
*scene_last == scene_index
)
width: 0, height: 0, content, colors: [fg, bg, hi, lo]
}), When(
*is_editing && same_track && *scene_selected == Some(scene_index),
editor
@ -183,15 +209,16 @@ impl<'a> ArrangerView<'a> {
self.app.scenes_with_sizes(self.is_editing, Tek::H_SCENE, Tek::H_EDITOR).map_while(
move|(s, scene, y1, y2)|if y2 as u16 > self.scenes_height {
None
} else { Some((s, scene, y1, y2, if s == 0 {
None
} else {
Some(self.app.scenes()[s-1].color)
}))
})
Some((s, scene, y1, y2, if s == 0 {
None
} else {
Some(self.app.scenes()[s-1].color)
}))
})
}
pub(crate) fn scenes_with_track_colors (&self)
pub(crate) fn scenes_with_track_colors (&self, track: usize)
-> impl ScenesColors<'_>
{
self.app.scenes_with_sizes(self.is_editing, Tek::H_SCENE, Tek::H_EDITOR).map_while(
@ -201,7 +228,7 @@ impl<'a> ArrangerView<'a> {
Some((s, scene, y1, y2, if s == 0 {
None
} else {
Some(self.app.scenes[s-1].clips[self.track_selected.unwrap_or(0)].as_ref()
Some(self.app.scenes[s-1].clips[track].as_ref()
.map(|c|c.read().unwrap().color)
.unwrap_or(ItemPalette::G[32]))
}))

View file

@ -1,32 +0,0 @@
use crate::*;
impl Tek {
pub(crate) fn colors (
theme: &ItemPalette,
prev: Option<ItemPalette>,
selected: bool,
neighbor: bool,
is_last: bool,
) -> [Color;4] {
let fg = theme.lightest.rgb;
let bg = if selected { theme.light } else { theme.base }.rgb;
let hi = Self::color_hi(prev, neighbor);
let lo = Self::color_lo(theme, is_last, selected);
[fg, bg, hi, lo]
}
pub(crate) fn color_hi (prev: Option<ItemPalette>, neighbor: bool) -> Color {
prev.map(|prev|if neighbor {
prev.light.rgb
} else {
prev.base.rgb
}).unwrap_or(Reset)
}
pub(crate) fn color_lo (theme: &ItemPalette, is_last: bool, selected: bool) -> Color {
if is_last {
Reset
} else if selected {
theme.light.rgb
} else {
theme.base.rgb
}
}
}