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 }
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}