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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
use crate::{
Data, Env, Event, EventCtx, LayoutCtx, PaintCtx, UpdateCtx, Window,
widget::{Align, Flex, Padding},
};
#[derive(Clone, Default)]
pub struct WindowBox<D: Data + 'static + Default>(
pub WindowType<D>,
);
#[derive(Clone)]
pub enum WindowType<D: Data + 'static + Default> {
None,
Align(Window<D, Align<D>>),
Flex(Window<D, Flex<D>>),
Padding(Window<D, Padding<D>>),
}
impl<D: Data + 'static + Default> Default for WindowType<D> {
fn default() -> Self { WindowType::None }
}
impl<D: Data + 'static + Default> WindowBox<D> {
pub fn new() -> Self {
WindowBox(
WindowType::None,
)
}
}
impl<D: Data + 'static + Default> WindowBox<D> {
pub fn event(
&mut self,
ctx: &mut EventCtx<D>,
event: &Event,
data: &mut D,
env: &Env
) {
match &mut self.0 {
WindowType::Align(w) => w.event(ctx, event, data, env),
WindowType::Flex(w) => w.event(ctx, event, data, env),
WindowType::Padding(w) => w.event(ctx, event, data, env),
WindowType::None => {}
};
}
pub fn update(
&mut self,
ctx: &mut UpdateCtx<D>,
data: &D,
env: &Env
) {
match &mut self.0 {
WindowType::Align(w) => w.update(ctx, data, env),
WindowType::Flex(w) => w.update(ctx, data, env),
WindowType::Padding(w) => w.update(ctx, data, env),
WindowType::None => {}
};
}
pub fn layout(
&mut self,
layout_ctx: &mut LayoutCtx,
data: &D,
env: &Env,
) {
match &mut self.0 {
WindowType::Align(w) => w.layout(layout_ctx, data, env),
WindowType::Flex(w) => w.layout(layout_ctx, data, env),
WindowType::Padding(w) => w.layout(layout_ctx, data, env),
WindowType::None => {}
};
}
pub fn paint(
&mut self,
paint_ctx: &mut PaintCtx,
data: &D,
env: &Env
) {
match &mut self.0 {
WindowType::Align(w) => w.paint(paint_ctx, data, env),
WindowType::Flex(w) => w.paint(paint_ctx, data, env),
WindowType::Padding(w) => w.paint(paint_ctx, data, env),
WindowType::None => {}
};
}
pub fn has_active(
&mut self,
) -> bool {
match &mut self.0 {
WindowType::Align(w) => w.root.state.has_active,
WindowType::Flex(w) => w.root.state.has_active,
WindowType::Padding(w) => w.root.state.has_active,
WindowType::None => false
}
}
}