Box widgets
This way, widgets containing other widgets can be heterogenous. Wenever a widget is expeted, *any* widget will work.
This commit is contained in:
parent
dea0384162
commit
8eda1ad97d
5 changed files with 5 additions and 5 deletions
|
|
@ -255,7 +255,7 @@ impl EuphRoom {
|
||||||
|
|
||||||
let mut list = self.nick_list.list();
|
let mut list = self.nick_list.list();
|
||||||
Self::render_rows(&mut list, joined);
|
Self::render_rows(&mut list, joined);
|
||||||
list.render(frame, pos, size).await;
|
Box::new(list).render(frame, pos, size).await;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render_hsplit(frame: &mut Frame, hsplit: i32) {
|
fn render_hsplit(frame: &mut Frame, hsplit: i32) {
|
||||||
|
|
|
||||||
|
|
@ -146,7 +146,7 @@ impl Rooms {
|
||||||
let rooms = self.stabilize_rooms().await;
|
let rooms = self.stabilize_rooms().await;
|
||||||
let mut list = self.list.list().focus(true);
|
let mut list = self.list.list().focus(true);
|
||||||
self.render_rows(&mut list, rooms).await;
|
self.render_rows(&mut list, rooms).await;
|
||||||
list.render(frame, Pos::ZERO, frame.size()).await;
|
Box::new(list).render(frame, Pos::ZERO, frame.size()).await;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn handle_key_event(
|
pub async fn handle_key_event(
|
||||||
|
|
|
||||||
|
|
@ -8,5 +8,5 @@ use toss::frame::{Frame, Pos, Size};
|
||||||
pub trait Widget {
|
pub trait Widget {
|
||||||
fn size(&self, frame: &mut Frame, max_width: Option<u16>, max_height: Option<u16>) -> Size;
|
fn size(&self, frame: &mut Frame, max_width: Option<u16>, max_height: Option<u16>) -> Size;
|
||||||
|
|
||||||
async fn render(self, frame: &mut Frame, pos: Pos, size: Size);
|
async fn render(self: Box<Self>, frame: &mut Frame, pos: Pos, size: Size);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -308,7 +308,7 @@ impl<Id: Clone + Eq + Send> Widget for List<Id> {
|
||||||
Size::new(width as u16, height as u16)
|
Size::new(width as u16, height as u16)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn render(self, frame: &mut Frame, pos: Pos, size: Size) {
|
async fn render(self: Box<Self>, frame: &mut Frame, pos: Pos, size: Size) {
|
||||||
let mut guard = self.state.lock();
|
let mut guard = self.state.lock();
|
||||||
guard.stabilize(&self.rows, size.height.into());
|
guard.stabilize(&self.rows, size.height.into());
|
||||||
for (i, row) in self.rows.into_iter().enumerate() {
|
for (i, row) in self.rows.into_iter().enumerate() {
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,7 @@ impl Widget for Text {
|
||||||
Size::new(min_width as u16, min_height as u16)
|
Size::new(min_width as u16, min_height as u16)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn render(self, frame: &mut Frame, pos: Pos, size: Size) {
|
async fn render(self: Box<Self>, frame: &mut Frame, pos: Pos, size: Size) {
|
||||||
for (i, line) in self
|
for (i, line) in self
|
||||||
.wrapped(frame, Some(size.width))
|
.wrapped(frame, Some(size.width))
|
||||||
.into_iter()
|
.into_iter()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue