mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-06 19:56:42 +01:00
down to 1 weirdest error
This commit is contained in:
parent
254e19db0d
commit
f3c67f95b5
1 changed files with 67 additions and 74 deletions
|
|
@ -86,7 +86,7 @@ impl<'a> Content<TuiOut> for ArrangerView<'a> {
|
||||||
let bg = |x|Tui::bg(Reset, x);
|
let bg = |x|Tui::bg(Reset, x);
|
||||||
//let track_scroll = |x|Bsp::s(&self.track_scroll, x);
|
//let track_scroll = |x|Bsp::s(&self.track_scroll, x);
|
||||||
//let scene_scroll = |x|Bsp::e(&self.scene_scroll, x);
|
//let scene_scroll = |x|Bsp::e(&self.scene_scroll, x);
|
||||||
outs(tracks(devices(ins(bg(self.scenes(None))))))
|
outs(tracks(devices(ins(bg(self.scenes(&None))))))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -150,7 +150,7 @@ impl<'a> ArrangerView<'a> {
|
||||||
pub(crate) const H_EDITOR: usize = 15;
|
pub(crate) const H_EDITOR: usize = 15;
|
||||||
|
|
||||||
/// Render scenes with clips
|
/// Render scenes with clips
|
||||||
pub(crate) fn scenes (&'a self, editor: Option<MidiEditor>) -> impl Content<TuiOut> + 'a {
|
pub(crate) fn scenes (&'a self, editor: &'a Option<MidiEditor>) -> impl Content<TuiOut> + 'a {
|
||||||
/// A scene with size and color.
|
/// A scene with size and color.
|
||||||
type SceneWithColor<'a> = (usize, &'a Scene, usize, usize, Option<ItemTheme>);
|
type SceneWithColor<'a> = (usize, &'a Scene, usize, usize, Option<ItemTheme>);
|
||||||
let Self {
|
let Self {
|
||||||
|
|
@ -163,85 +163,78 @@ impl<'a> ArrangerView<'a> {
|
||||||
let selection = Has::<Option<Selection>>::get(self.arrangement);
|
let selection = Has::<Option<Selection>>::get(self.arrangement);
|
||||||
let selected_track = selection.map(|s|s.track()).flatten();
|
let selected_track = selection.map(|s|s.track()).flatten();
|
||||||
let selected_scene = selection.map(|s|s.scene()).flatten();
|
let selected_scene = selection.map(|s|s.scene()).flatten();
|
||||||
|
|
||||||
let scenes_with_scene_colors = ||HasScenes::scenes_with_sizes(self.arrangement,
|
|
||||||
*is_editing,
|
|
||||||
Self::H_SCENE,
|
|
||||||
Self::H_EDITOR,
|
|
||||||
selected_track,
|
|
||||||
selected_scene,
|
|
||||||
).map_while(|(s, scene, y1, y2)|if y2 as u16 > *scenes_height {
|
|
||||||
None
|
|
||||||
} else {
|
|
||||||
Some((s, scene, y1, y2, if s == 0 {
|
|
||||||
None
|
|
||||||
} else {
|
|
||||||
Some(arrangement.scenes()[s-1].color)
|
|
||||||
}))
|
|
||||||
});
|
|
||||||
|
|
||||||
let scene_header = |(s, scene, y1, y2, previous): SceneWithColor, _|{
|
|
||||||
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(s);
|
|
||||||
let neighbor = same_track && s > 0 && *scene_selected == Some(s - 1);
|
|
||||||
let is_last = *scene_last == s;
|
|
||||||
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, colors: [fg, bg, hi, lo]
|
|
||||||
})))
|
|
||||||
};
|
|
||||||
|
|
||||||
let scenes_with_track_colors = |track: usize| arrangement.scenes_with_sizes(
|
|
||||||
self.is_editing,
|
|
||||||
Self::H_SCENE,
|
|
||||||
Self::H_EDITOR,
|
|
||||||
selected_track,
|
|
||||||
selected_scene,
|
|
||||||
).map_while(|(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.arrangement.scenes[s-1].clips[track].as_ref()
|
|
||||||
.map(|c|c.read().unwrap().color)
|
|
||||||
.unwrap_or(ItemTheme::G[32]))
|
|
||||||
}))
|
|
||||||
});
|
|
||||||
|
|
||||||
Tryptich::center(*scenes_height)
|
Tryptich::center(*scenes_height)
|
||||||
|
|
||||||
.left(*width_side, Map::new(
|
.left(*width_side, Map::new(
|
||||||
||scenes_with_scene_colors(),
|
move||arrangement.scenes_with_sizes(
|
||||||
scene_header))
|
*is_editing,
|
||||||
|
Self::H_SCENE,
|
||||||
|
Self::H_EDITOR,
|
||||||
|
selected_track,
|
||||||
|
selected_scene,
|
||||||
|
).map_while(|(s, scene, y1, y2)|if y2 as u16 > *scenes_height {
|
||||||
|
None
|
||||||
|
} else {
|
||||||
|
Some((s, scene, y1, y2, if s == 0 {
|
||||||
|
None
|
||||||
|
} else {
|
||||||
|
Some(arrangement.scenes()[s-1].color)
|
||||||
|
}))
|
||||||
|
}),
|
||||||
|
move |(s, scene, y1, y2, previous): SceneWithColor, _|{
|
||||||
|
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(s);
|
||||||
|
let neighbor = same_track && s > 0 && *scene_selected == Some(s - 1);
|
||||||
|
let is_last = *scene_last == s;
|
||||||
|
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, colors: [fg, bg, hi, lo]
|
||||||
|
})))
|
||||||
|
}))
|
||||||
|
|
||||||
.middle(*width_mid, per_track(
|
.middle(*width_mid, per_track(
|
||||||
*width_mid,
|
*width_mid,
|
||||||
||self.tracks_with_sizes_scrolled(),
|
||self.tracks_with_sizes_scrolled(),
|
||||||
|track_index, track|Map::new(
|
move|track_index, track|Map::new(
|
||||||
||scenes_with_track_colors(track_index),
|
move||arrangement.scenes_with_sizes(
|
||||||
|(s, scene, y1, y2, previous): SceneWithColor<'a>, _|{
|
self.is_editing,
|
||||||
|
Self::H_SCENE,
|
||||||
|
Self::H_EDITOR,
|
||||||
|
selected_track,
|
||||||
|
selected_scene,
|
||||||
|
).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.arrangement.scenes[s-1].clips[track_index].as_ref()
|
||||||
|
.map(|c|c.read().unwrap().color)
|
||||||
|
.unwrap_or(ItemTheme::G[32]))
|
||||||
|
}))
|
||||||
|
}),
|
||||||
|
move|(s, scene, y1, y2, previous): SceneWithColor<'a>, _|{
|
||||||
let (name, theme) = if let Some(clip) = &scene.clips[track_index] {
|
let (name, theme) = if let Some(clip) = &scene.clips[track_index] {
|
||||||
let clip = clip.read().unwrap();
|
let clip = clip.read().unwrap();
|
||||||
(Some(clip.name.clone()), clip.color)
|
(Some(clip.name.clone()), clip.color)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue