1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
use super::{Color, Event, Rect, Renderer}; use std::any::Any; use std::cell::Cell; pub struct WidgetCore { pub rect: Cell<Rect>, pub bg: Color, pub fg: Color, } impl WidgetCore { pub fn new() -> Self { WidgetCore { rect: Cell::new(Rect::default()), bg: Color::white(), fg: Color::black(), } } pub fn bg(mut self, color: Color) -> Self { self.bg = color; self } pub fn fg(mut self, color: Color) -> Self { self.fg = color; self } } pub trait Widget : Any { fn rect(&self) -> &Cell<Rect>; fn draw(&self, renderer: &mut Renderer, focused: bool); fn event(&self, event: Event, focused: bool, redraw: &mut bool) -> bool; }