From fac5cac262f14227df0a9465d98d9f4b641ffcba Mon Sep 17 00:00:00 2001 From: =?utf8?q?Am=C3=A9lia=20Coutard-Sander?= Date: Sat, 26 Jul 2025 23:35:15 +0200 Subject: [PATCH] =?utf8?q?Pr=C3=A9vision=20de=20l'effet=20d'un=20ajout=20d?= =?utf8?q?e=20goutte?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- marbrures/main.ml | 46 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 32 insertions(+), 14 deletions(-) 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) ) -- 2.51.0