1    def init_glfw =
2        Glfw.init |> ignore
3        Glfw.window_hint Glfw.context_version_major 3
4             window_hint Glfw.context_version_minor 2
5             window_hint Glfw.opengl_forward_compat Glfw.true
6             window_hint Glfw.opengl_profile Glfw.opengl_core_profile
7             window_hint Glfw.stencil_bits 0
8             window_hint Glfw.depth_bits 0
9             swap_interval 1
10   
11   type Drawer =
12       let window : OsWindow
13       let skia = skia/Skia window.width window.height
14       let mut canvas = skia.get_canvas
15       let font_manager = FontManager.new
16       let paint = Paint.new
17       paint.set_color skia/white
18   
19       let sizes_token = window.sizes.subscribe { w, h ->
20           skia.resize w h
21           canvas = skia.get_canvas }
22   
23       def update (dt : f32) (controls : List<Control>)
24                  (overlay_controls : List<Control>) =
25           canvas.draw_paint paint
26   
27           for control in controls do
28               draw canvas control
29   
30           for control in overlay_controls do
31               draw canvas control
32   
33           skia.flush
34           Glfw.swap_buffers window.window
35   
36       fun destruct =
37           sizes_token.discard
38   
39   type Dependencies =
40       val get_font : GetFont
41   
42   type Drawer
43       val dependencies = Dependencies
44           get_font = { family size -> font_manager.get_font size }
45