From: Amélia Coutard-Sander Date: Sat, 26 Jul 2025 21:35:15 +0000 (+0200) Subject: Prévision de l'effet d'un ajout de goutte X-Git-Url: https://git.ameliathe1st.gay/?a=commitdiff_plain;h=fac5cac262f14227df0a9465d98d9f4b641ffcba;p=marbrures.git Prévision de l'effet d'un ajout de goutte --- diff --git a/marbrures/main.ml b/marbrures/main.ml index 900f458..e8dcb45 100644 --- a/marbrures/main.ml +++ b/marbrures/main.ml @@ -37,9 +37,10 @@ let drop c r = let marbling : (Shape.t * Js.js_string Js.t) list ref = ref [] -let add_drop c r color = - marbling := - List.fold_right (fun (sh, color) rest -> (apply_drop c r sh, color) :: rest) !marbling [(drop c r, color)] +let marbling_view : (Shape.t * Js.js_string Js.t) list ref = ref [] + +let add_drop c r color marbling = + List.fold_right (fun (sh, color) rest -> (apply_drop c r sh, color) :: rest) marbling [(drop c r, color)] let main () = ctx##.fillStyle := Js.string "#00001f"; @@ -49,23 +50,40 @@ let main () = ctx##.fillStyle := color; Shape.path ctx shape; ctx##fill) - !marbling + !marbling_view let _interval_id = Dom_html.window##setInterval (Js.wrap_callback main) (1000.0 /. 60.0) -let _mouse_listener = - Dom_html.addEventListener canvas Dom_html.Event.click - (Dom.handler (fun ev -> - add_drop - (float_of_int ev##.offsetX, float_of_int ev##.offsetY) - (Random.float 50. +. 25.) - (Js.string +let _mouse_listener, _click_listener, _mouseout_listener = + let r = ref 0. + and color = ref (Js.string "") in + let reset () = + r := Random.float 50. +. 25.; + color := + Js.string ("rgb(" ^ string_of_int (Random.int 128 + 127) ^ " " ^ string_of_int (Random.int 128 + 127) ^ " " ^ string_of_int (Random.int 128 + 127) - ^ ")")); - Js.bool true)) - (Js.bool false) + ^ ")") + in + reset (); + ( Dom_html.addEventListener canvas Dom_html.Event.mousemove + (Dom.handler (fun ev -> + marbling_view := add_drop (float_of_int ev##.offsetX, float_of_int ev##.offsetY) !r !color !marbling; + Js.bool true)) + (Js.bool false), + Dom_html.addEventListener canvas Dom_html.Event.click + (Dom.handler (fun ev -> + marbling := add_drop (float_of_int ev##.offsetX, float_of_int ev##.offsetY) !r !color !marbling; + reset (); + marbling_view := add_drop (float_of_int ev##.offsetX, float_of_int ev##.offsetY) !r !color !marbling; + Js.bool true)) + (Js.bool false), + Dom_html.addEventListener canvas Dom_html.Event.mouseout + (Dom.handler (fun _ev -> + marbling_view := !marbling; + Js.bool true)) + (Js.bool false) )