tuigui/widgets/
float_container.rs

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
37
use crate::preludes::widget_creation::*;

#[derive(Debug, Clone, Copy, Eq, PartialEq, Ord, PartialOrd, Hash)]
/// Place widgets anywhere on the available canvas space with this container
pub struct FloatContainer<W: Widget> {
    pub widget: W,
    pub widget_transform: Transform,
    widget_data: WidgetData,
}

impl<W: Widget> FloatContainer<W> {
    pub fn new(widget_transform: Transform, widget: W) -> Self {
        Self {
            widget,
            widget_transform,
            widget_data: WidgetData::new(),
        }
    }
}

impl<W: Widget> Widget for FloatContainer<W> {
    fn draw(&mut self, canvas: &mut Canvas, state_frame: &EventStateFrame) {
        let mut inner = canvas.new_child(self.widget_transform);

        inner.transform.size = self.widget.widget_info().size_info.correct_size(inner.transform.size);

        self.widget.draw(&mut inner, state_frame);
    }

    fn widget_info(&self) -> WidgetInfo {
        return self.widget.widget_info();
    }

    fn widget_data(&mut self) -> &mut WidgetData {
        return &mut self.widget_data;
    }
}