mirror of
https://github.com/ratatui/ratatui.git
synced 2025-09-28 21:41:49 +00:00
Fix redraw for disappearing widgets
This commit is contained in:
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…
x
Reference in New Issue
Block a user