]> git.ameliathe1st.gay Git - marbrures.git/commitdiff
Prévision de l'effet d'un ajout de goutte
authorAmélia Coutard-Sander <git@ameliathe1st.gay>
Sat, 26 Jul 2025 21:35:15 +0000 (23:35 +0200)
committerAmélia Coutard-Sander <git@ameliathe1st.gay>
Sat, 26 Jul 2025 21:35:15 +0000 (23:35 +0200)
marbrures/main.ml

index 900f458efa330b399ada54ebfc232f1356d499ed..e8dcb45db0f8c7977edb27cbfbc6ace3f9c01c14 100644 (file)
@@ -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) )