diff options
-rwxr-xr-x | script.it/dune | 10 | ||||
-rwxr-xr-x | script.it/outline/dune | 2 | ||||
-rwxr-xr-x | script.it/script.ml | 79 | ||||
-rwxr-xr-x | script.it/script_event/dune | 8 | ||||
-rwxr-xr-x | script.it/script_event/out.ml | 69 |
5 files changed, 83 insertions, 85 deletions
diff --git a/script.it/dune b/script.it/dune index dd1f7d2..2b1d446 100755 --- a/script.it/dune +++ b/script.it/dune @@ -1,16 +1,8 @@ (executable (name script) (libraries - brr - brr.note script_state - shapes - elements - blog - application - layer - worker_messages - outline + script_event ) (modes js) (modules script) diff --git a/script.it/outline/dune b/script.it/outline/dune index db080a3..73b7998 100755 --- a/script.it/outline/dune +++ b/script.it/outline/dune @@ -5,5 +5,3 @@ (modules outline) (preprocess (pps ppx_hash js_of_ocaml-ppx)) ) - - diff --git a/script.it/script.ml b/script.it/script.ml index bc79a22..200d118 100755 --- a/script.it/script.ml +++ b/script.it/script.ml @@ -6,73 +6,6 @@ open Brr_note module State = Script_state.State module Selection = Script_state.Selection -module Out = struct - type t = { point : float * float - ; timer : Elements.Timer.t - ; worker : Brr_webworkers.Worker.t - } - - let apply {point; timer ; worker} state = - match state.State.mode with - - | Edit -> - let stamp = Elements.Timer.delay timer in - Elements.Timer.stop timer; - begin match Path.Path_Builder.peek2 state.current with - (* If there is at last two points selected, handle this as a curve - creation. And we add the new point in the current path *) - | Some _ -> - - let current = State.insert_or_replace state point stamp state.current in - let path = Path.Fixed.to_fixed - (module Path.Path_Builder) - current in - - (* Create a copy from the path with all the interior points *) - let back = Path.Fixed.map - path - (fun pt -> Path.Point.copy pt @@ Path.Point.get_coord' pt) in - - let last = - Outline.{ path - ; back - ; id = Outline.get_id () - } - in - - (* Send to the worker for a full review *) - let () = State.post worker (`Complete last) in - - let state = - { state with - mode = Out - ; paths = last::state.paths - ; current = Path.Path_Builder.empty } in - state - - (* Else, check if there is a curve under the cursor, and remove it *) - | None -> - let current = Path.Path_Builder.empty in - begin match Selection.get_from_paths point state.paths with - | _, None -> - { state with - mode = Out - ; current - } - | dist, Some selection -> - State.select_segment point selection { state with current } dist - - end - end - - | mode when Elements.Timer.delay timer < 0.3 -> - State.click state mode - - | _ -> - State.longClick point state worker state.mode - -end - let post : Brr_webworkers.Worker.t -> Worker_messages.to_worker -> unit = Brr_webworkers.Worker.post @@ -466,13 +399,11 @@ let page_main id = `Generic ( State.E - ( Out.{ point = c - ; worker - ; timer - } - , (module Out: State.Handler with type t = Out.t) - - + ( Script_event.Out.{ point = c + ; worker + ; timer + } + , (module Script_event.Out: State.Handler with type t = Script_event.Out.t) ) ) diff --git a/script.it/script_event/dune b/script.it/script_event/dune new file mode 100755 index 0000000..2271b0a --- /dev/null +++ b/script.it/script_event/dune @@ -0,0 +1,8 @@ +(library + (name script_event) + (libraries + brr + script_state + ) + ) + diff --git a/script.it/script_event/out.ml b/script.it/script_event/out.ml new file mode 100755 index 0000000..45f05d3 --- /dev/null +++ b/script.it/script_event/out.ml @@ -0,0 +1,69 @@ +module State = Script_state.State +module Selection = Script_state.Selection + +(** Handle a click outside of the selection *) + +type t = { point : float * float + ; timer : Elements.Timer.t + ; worker : Brr_webworkers.Worker.t + } + +let apply {point; timer ; worker} state = + match state.State.mode with + + | Edit -> + let stamp = Elements.Timer.delay timer in + Elements.Timer.stop timer; + begin match Path.Path_Builder.peek2 state.current with + (* If there is at last two points selected, handle this as a curve + creation. And we add the new point in the current path *) + | Some _ -> + + let current = State.insert_or_replace state point stamp state.current in + let path = Path.Fixed.to_fixed + (module Path.Path_Builder) + current in + + (* Create a copy from the path with all the interior points *) + let back = Path.Fixed.map + path + (fun pt -> Path.Point.copy pt @@ Path.Point.get_coord' pt) in + + let last = + Outline.{ path + ; back + ; id = Outline.get_id () + } + in + + (* Send to the worker for a full review *) + let () = State.post worker (`Complete last) in + + let state = + { state with + mode = Out + ; paths = last::state.paths + ; current = Path.Path_Builder.empty } in + state + + (* Else, check if there is a curve under the cursor, and remove it *) + | None -> + let current = Path.Path_Builder.empty in + begin match Selection.get_from_paths point state.paths with + | _, None -> + { state with + mode = Out + ; current + } + | dist, Some selection -> + State.select_segment point selection { state with current } dist + + end + end + + | mode when Elements.Timer.delay timer < 0.3 -> + State.click state mode + + | _ -> + State.longClick point state worker state.mode + |