Fix redraw for disappearing widgets

pull/3/head
Florian Dehau 8 years ago
parent 13f6a5a98b
commit 93f3263e2b

@ -26,6 +26,7 @@ struct App {
fetching: bool, fetching: bool,
items: Vec<String>, items: Vec<String>,
selected: usize, selected: usize,
show_episodes: bool,
} }
enum Event { enum Event {
@ -56,6 +57,7 @@ fn main() {
fetching: false, fetching: false,
items: ["1", "2", "3"].into_iter().map(|e| String::from(*e)).collect(), items: ["1", "2", "3"].into_iter().map(|e| String::from(*e)).collect(),
selected: 0, selected: 0,
show_episodes: false,
}; };
let (tx, rx) = mpsc::channel(); let (tx, rx) = mpsc::channel();
@ -94,6 +96,9 @@ fn main() {
app.selected += 1; app.selected += 1;
} }
} }
event::Key::Char('t') => {
app.show_episodes = !app.show_episodes;
}
_ => {} _ => {}
} }
} }
@ -113,10 +118,15 @@ fn draw(terminal: &mut Terminal, app: &App) {
.borders(Border::ALL) .borders(Border::ALL)
.title("Header") .title("Header")
.render(&chunks[0])); .render(&chunks[0]));
let sizes = if app.show_episodes {
vec![Size::Percent(50), Size::Percent(50)]
} else {
vec![Size::Percent(50), Size::Percent(50)]
};
tree.add(Group::default() tree.add(Group::default()
.direction(Direction::Horizontal) .direction(Direction::Horizontal)
.alignment(Alignment::Left) .alignment(Alignment::Left)
.chunks(&[Size::Percent(50), Size::Percent(50)]) .chunks(&sizes)
.render(&chunks[1], |chunks, tree| { .render(&chunks[1], |chunks, tree| {
tree.add(List::default() tree.add(List::default()
.block(|b| { .block(|b| {
@ -129,10 +139,12 @@ fn draw(terminal: &mut Terminal, app: &App) {
format!("{} {}", prefix, i) format!("{} {}", prefix, i)
}) })
.render(&chunks[0])); .render(&chunks[0]));
tree.add(Block::default() if app.show_episodes {
.borders(Border::ALL) tree.add(Block::default()
.title("Episodes") .borders(Border::ALL)
.render(&chunks[1])); .title("Episodes")
.render(&chunks[1]));
}
})); }));
tree.add(Block::default().borders(Border::ALL).title("Footer").render(&chunks[2])); tree.add(Block::default().borders(Border::ALL).title("Footer").render(&chunks[2]));
}); });

@ -39,6 +39,7 @@ impl Terminal {
} }
pub fn render(&mut self, ui: Tree) { pub fn render(&mut self, ui: Tree) {
info!("Render");
let mut buffers: Vec<Buffer> = Vec::new(); let mut buffers: Vec<Buffer> = Vec::new();
let mut previous: HashMap<(WidgetType, u64), Rect> = HashMap::new(); let mut previous: HashMap<(WidgetType, u64), Rect> = HashMap::new();
for node in ui.into_iter() { for node in ui.into_iter() {
@ -55,6 +56,9 @@ impl Terminal {
} }
previous.insert((node.widget_type, node.hash), area); previous.insert((node.widget_type, node.hash), area);
} }
for (_, area) in &self.previous {
buffers.insert(0, Buffer::empty(*area));
}
for buf in buffers { for buf in buffers {
self.render_buffer(&buf); self.render_buffer(&buf);
info!("{:?}", buf.area()); info!("{:?}", buf.area());

Loading…
Cancel
Save