pixelab_widgets/
label.rs

1use pixelab_core::{Backend, Bitmap, Event, Handler, Widget};
2
3pub struct Label {
4    pub backend: Backend,
5    on_event: Option<Box<dyn FnMut(&mut Label, Event, &mut Handler)>>,
6}
7impl Label {
8    pub fn new() -> Self {
9        Self {
10            backend: Backend::new(),
11            on_event: None,
12        }
13    }
14    pub fn on_event(&mut self, f: impl 'static + FnMut(&mut Self, Event, &mut Handler)) {
15        self.on_event = Some(Box::new(f));
16    }
17    pub fn handle_on_event(&mut self, event: Event, handler: &mut Handler) {
18        if let Some(mut f) = self.on_event.take() {
19            f(self, event, handler);
20            self.on_event = Some(f)
21        }
22    }
23}
24impl Widget for Label {
25    fn init(&mut self) {
26        self.backend.create_buffer().unwrap();
27        self.backend.clear(self.backend.background_color).unwrap();
28    }
29
30    fn draw(&mut self, _fb: &mut Box<dyn Bitmap + 'static>) {
31        //println!("draw")
32    }
33
34    fn event(&mut self, event: Event, handler: &mut Handler) {
35        self.handle_on_event(event, handler);
36    }
37
38    fn backend(&mut self) -> &mut Backend {
39        &mut self.backend
40    }
41}