1 let create_mesh (width : u32 2 height : u32 3 left : u32 4 right : u32 5 up : u32 6 down : u32) = 7 let border_z = 0 8 let left_quad = 9 let up_left = Vector3 0 0 border_z 10 let up_right = Vector3 left.as<f32> 0 border_z 11 let down_left = Vector3 0 (height as f32 - down as f32) border_z 12 let down_right = Vector3 left.as<f32> (height as f32 - down as f32) border_z 13 14 Quad.create =up_left =up_right =down_left =down_right 15 color = Vector3 1 1 1 16 17 let right_quad = 18 let up_left = Vector3 (width as f32 - right as f32) 0 border_z 19 let up_right = Vector3 (width as f32 - right as f32 + right as f32) 20 0 21 border_z 22 23 let down_left = Vector3 (width as f32 - right as f32) 24 (height as f32 - down as f32) 25 border_z 26 27 let down_right = Vector3 width.as<f32> 28 (height as f32 - down as f32) 29 border_z 30 31 Quad.create =up_left =up_right =down_left =down_right 32 color = Vector3 1 1 1 33 34 let up_quad = 35 let up_left = Vector3 0 0 border_z 36 let up_right = Vector3 (width as f32 - left as f32) 0 border_z 37 let down_left = Vector3 0 up.as<f32> border_z 38 let down_right = Vector3 (width as f32 - left as f32) up.as<f32> 39 border_z 40 41 Quad.create =up_left =up_right =down_left =down_right 42 color = Vector3 1 1 1 43 44 let down_quad = 45 let up_left = Vector3 0 (height as f32 - down as f32) border_z 46 let up_right = Vector3 width.as<f32> 47 (height as f32 - down as f32) 48 border_z 49 50 let down_left = Vector3 0 height.as<f32> border_z 51 let down_right = Vector3 width.as<f32> 52 height.as<f32> 53 border_z 54 55 Quad.create =up_left =up_right =down_left =down_right 56 color = Vector3 1 1 1 57 58 let quads = [left_quad, right_quad, up_quad, down_quad] 59 MeshMemory.from_quads quads 60 61 type Border 62 let material : ControlMaterial @auto 63 64 let size = get_size_atom self 65 let thickness = 66 (left@atom, right@atom, up@atom, down@atom) |> to_atom 67 68 val memory@atom = (size, thickness) 69 |> to_atom 70 |> map { self ((width, height), thickness) -> 71 if width == 0 || height == 0 72 then None 73 else Some (width, height, thickness) } 74 75 |> option_map_discard { self (width, height, (left, right, up, down)) -> 76 create_mesh width height left right up down } 77 78 val drawable = Drawable 79 mesh = Mesh.from_memory memory@atom 80 material = material.unwrap 81 82 maybe_drawable = drawable 83 color@atom.bind { drawable.color = _ } |> push_token 84