1    type FlagEvent =
2        | IsVisible bool
3        | IsHovered bool
4        | IsFocused bool
5        | IsFocusable bool
6        | IsResizable bool
7    
8    type MouseEvent =
9        | Button action : MouseAction
10                x : u32
11                y : u32
12       | Scroll x : f32
13                y : f32
14       | Move x : u32
15              y : u32
16              begin_x : u32
17              begin_y : u32
18              begin_relative_x : u32
19              begin_relative_y : u32
20       | BeginMove x : u32
21                   y : u32
22       | EndMove x : u32
23                 y : u32
24   
25   type SizeEvent =
26       | Width u32
27       | Height u32
28       | MinWidth u32
29       | MaxWidth u32
30       | MinHeight u32
31       | MaxHeight u32
32   
33   type ControlEvent =
34       | t@ FlagEvent
35       | t@ MouseEvent
36       | t@ SizeEvent
37   
38       def is_mouse_press = case self of
39           is MouseEvent/Button -> self.action.is_press
40           else -> false
41   
42       def is_mouse_release = case self of
43           is MouseEvent/Button -> self.action.is_release
44           else -> false
45