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) 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) [ (20, 30, 26, 40); (26, 40, 20, 50); (20, 50, 14, 40); (14, 40, 20, 30)]; X.set_foreground xelms state.color2; List.iter (X.draw_rectangle xelms) [ (60, 50, 10, 10); (80, 60, 10, 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)