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