-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGraphicalApplication.ml
More file actions
53 lines (38 loc) · 1.62 KB
/
GraphicalApplication.ml
File metadata and controls
53 lines (38 loc) · 1.62 KB
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
53
open General.Abbr
module Make(Frontend: sig
module Cairo: JsOfOCairo.S
val initialize_app: (dimensions:int * int
-> balls:int -> max_speed:float
-> min_radius:float -> max_radius:float
-> min_density:float -> max_density:float
-> velocity_vectors:bool -> previous_positions:int
-> 'a) -> 'a
module GraphicalView: sig
val with_context: (context:Cairo.context -> unit) -> unit
val on_resized: (dimensions:(int * int) -> unit) -> unit
end
module Timer: sig
val set_recurring: seconds:float -> (unit -> unit) -> unit
end
module Toolbar: sig
val on_display_settings_changed: (velocity_vectors:bool -> previous_positions:int -> unit) -> unit
val on_randomize: (balls:int -> max_speed:float -> min_radius:float -> max_radius:float -> min_density:float -> max_density:float -> unit) -> unit
end
end) = struct
module Cairo = Frontend.Cairo
module Application = Application.Make(Cairo)
let application = Frontend.initialize_app Application.create
let resize ~dimensions =
Application.resize application ~dimensions
let () = Frontend.GraphicalView.on_resized resize
let interval = 1. /. 25.
let advance () =
let date = Application.date application +. interval in
Application.advance application ~date;
Frontend.GraphicalView.with_context (Application.draw application)
let () = Frontend.Timer.set_recurring ~seconds:interval advance
let set_display = Application.set_display application
let () = Frontend.Toolbar.on_display_settings_changed set_display
let randomize = Application.randomize application
let () = Frontend.Toolbar.on_randomize randomize
end