blob: e637ab75d9d46440db3b3fe221e2a61834cd0c6d (
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 update { 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
|