open Caml_xss let dims = ref (180, 80) let mk_color (r, g, b) = (r * 257, g * 257, b * 257) let _color0 = mk_color (255, 255, 255) let _color1 = mk_color (120, 80, 255) let _color2 = mk_color (255, 160, 26) let _color3 = mk_color (20, 250, 62) let coords_losange (x, y) = [ (10 + x, 0 + y, 16 + x, 10 + y); (16 + x, 10 + y, 10 + x, 20 + y); (10 + x, 20 + y, 4 + x, 10 + y); ( 4 + x, 10 + y, 10 + x, 0 + y); ] module UserSaver = struct type state = { colormap: Caml_xss.colormap; color0: pixel; color1: pixel; color2: pixel; color3: pixel; } type user_calls = { saver_init: x_elems -> state; saver_draw: x_elems -> state -> int; saver_reshape: x_elems -> state -> int -> int -> unit; saver_free: x_elems -> state -> unit; } let user_saver = { saver_init = (fun xelms -> let colormap = X.default_colormap xelms in let color0 = X.alloc_color xelms colormap _color0 in let color1 = X.alloc_color xelms colormap _color1 in let color2 = X.alloc_color xelms colormap _color2 in let color3 = X.alloc_color xelms colormap _color3 in { colormap; color0; color1; color2; color3; } ); saver_reshape = (fun xelms state w h -> dims := (w, h); ); saver_free = (fun xelms state -> print_newline ()); saver_draw = (fun xelms state -> X.set_foreground xelms state.color0; List.iter (X.draw_point xelms) [ (20, 20); (22, 20); (24, 20)]; X.set_foreground xelms state.color1; List.iter (X.draw_line xelms) (coords_losange (20, 30)); X.set_foreground xelms state.color2; List.iter (X.draw_rectangle xelms) [ (60, 50, 10, 10); (80, 60, 10, 10)]; List.iter (X.draw_point xelms) [ (60 + 10, 50 + 10); (80 + 10, 60 + 10)]; X.set_foreground xelms state.color3; X.draw_arc xelms (40, 60, 20, 20, 0, 360*64); (300_000) ); } end module SomeSaver = MakeSaver(UserSaver)