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