1    type Window
2        header_rectangle.subscribe { _, event ->
3            if event is MouseEvent/Move then
4                let v = border.position
5                let w = border.width
6                let h = border.height
7                let z = position.z
8    
9                let header_global = header_rectangle.global_position
10   
11               if event.begin_relative_x >= v.x as u32
12                  && event.begin_relative_y >= v.y as u32
13                  && event.begin_relative_x < v.x as u32 + w
14                  && event.begin_relative_y < v.y as u32 + h
15               then
16                   position = Vector3
17                       x = event.x as f32 - event.begin_relative_x as f32
18                           + global_position.x - header_global.x
19   
20                       y = event.y as f32 - event.begin_relative_y as f32
21                           + global_position.y - header_global.y
22   
23                       =z }
24   
25       resize.subscribe { _, event -> if event is MouseEvent/Move then
26           let original_right_x =
27               event.begin_x as i32 - event.begin_relative_x as i32
28               + resize.width as i32
29   
30           let original_down_y =
31               event.begin_y as i32 - event.begin_relative_y as i32
32               + resize.height as i32
33   
34           let right_x = original_right_x as i32 - event.begin_x as i32
35                         + event.x as i32
36   
37           let down_y = original_down_y as i32 - event.begin_y as i32
38                        + event.y as i32
39   
40           let v = global_position
41           let border_left = border.left
42           let border_right = border.right
43           let border_up = border.up
44           let border_down = border.down
45           let (content_width, content_height) = case content of
46               None -> (0, 0)
47               Some control -> (control.measure_width, control.measure_height)
48   
49           let min_w =
50               header_splitter.measure_width.max content_width + border_left
51               + border_right
52   
53           let min_h =
54               header_splitter.measure_height + content_height + border_up
55               + border_down
56   
57           width = right_x - v.x as i32 |> max min_w.as<i32> |> as<u32>
58           height = down_y - v.y as i32 |> max min_h.as<i32> |> as<u32> }
59   
60       header_rectangle.is_receive_mouse_move = true
61       resize.is_receive_mouse_move = true
62   
63   end@ window
64