1use crate::preludes::widget_creation::*;
2
3#[derive(Debug, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
4pub struct Layers<W: Widget> {
7 pub roots: Vec<W>,
8 widget_data: WidgetData,
9}
10
11impl<W: Widget> Layers<W> {
12 pub fn new(roots: Vec<W>) -> Self {
13 Self {
14 roots,
15 widget_data: WidgetData::new(),
16 }
17 }
18}
19
20impl<W: Widget> Widget for Layers<W> {
21 fn draw(&mut self, canvas: &mut Canvas, state_frame: Option<&EventStateFrame>) {
22 if canvas.is_visible() == false {
23 return;
24 }
25
26 let mut inners: Vec<Canvas> = self.roots.iter().map(|x| {
27 let mut inner = canvas.new_copy_child();
28
29 inner.transform.size = x.widget_info().size_info.correct_size(inner.transform.size);
30
31 inner
32 }).collect();
33
34 for (i, widget) in self.roots.iter_mut().enumerate() {
35 widget.draw(&mut inners[i], state_frame);
36 }
37 }
38
39 fn widget_info(&self) -> WidgetInfo {
40 WidgetInfo {
41 size_info: WidgetSizeInfo::Dynamic {
42 min: None,
43 max: None,
44 },
45 }
46 }
47
48 fn widget_data(&mut self) -> &mut WidgetData {
49 return &mut self.widget_data;
50 }
51}