aboutsummaryrefslogtreecommitdiff
path: root/script.it/script_event/property.ml
blob: dbdc1dea6137d993a1d69ceb2b6f869b8eb76d67 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
module State = Script_state.State
module Selection = Script_state.Selection

let update_property worker state value f = function
  | None -> state
  | Some (Selection.Path outline) ->
    (* Change width for the whole path *)
    let outline = { outline with
                    Outline.path = Path.Fixed.map outline.Outline.path (fun p ->
                        f p value)
                  } in
    State.post worker (`Back outline);
    state
  | Some (Point (outline, point)) ->
    let path = Path.Fixed.map
        outline.path
        (fun pt ->
           match Path.Point.id pt = Path.Point.id point with
           | false -> pt
           | true -> f pt value)
    in
    let outline = {outline with path} in
    State.post worker (`Back outline);
    state

type t = { prop : [`Angle | `Width ]
         ; value : float
         ; worker : Brr_webworkers.Worker.t
         }

let process { prop; value ; worker } state =
  match prop with
  | `Angle ->
    let angle = value in
    begin match state.State.mode with

      | Selection t ->
        let state = { state with angle } in
        Selection.find_selection t state.paths
        |> update_property worker state angle Path.Point.set_angle
      | _ -> { state with angle }
    end
  | `Width ->
    let width = value in
    begin match state.State.mode with

      | Selection t ->
        let state = { state with width } in
        Selection.find_selection t state.paths
        |> update_property worker state width Path.Point.set_width
      | _ -> { state with width }
    end