-
Notifications
You must be signed in to change notification settings - Fork 24
/
Reprocessing.rei
108 lines (91 loc) · 2.89 KB
/
Reprocessing.rei
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
/** # Reprocessing
*
* ## The Run Function
*
* This is how all of your programs start. At minimum you need a setup function, but it also doesn't make much sense to not have a draw function.
*
* @doc run
*
* ## Hot reloading
*
* Put the following in an `indexhot.re`
*
* ```reason;no-run
* Reprocessing.hotreload("./index.re")
* ```
*
* @doc hotreload
*
* ## Misc helpers
*
* The following modules are included here as a psuedo namespacing function. It is common to `open Reprocessing` and then access them as `Draw.rect`, etc.
*
* @doc Utils, Constants, Draw, Env, Events
*
* ## Handling Multiple Canvases
*
* (only supported on web target)
*
* @doc setScreenId, clearScreenId, playPause
*
* @includes
*/;
/*** Contains functions having to do with drawing to the screen */
module Draw = Reprocessing_Draw;
/*** Contains functions having to do with the environment:
* ie window properties, user input
*/
module Env = Reprocessing_Env;
/*** Contains types for events. */
module Events = Reprocessing_Events;
/*** Contains utility functions */
module Utils = Reprocessing_Utils;
/*** Contains useful constants */
module Constants = Reprocessing_Constants;
include Reprocessing_Types.TypesT;
let hotreload: (~screen: string=?, string) => bool;
/** Set the ID that will be used by subsequent calls to `run()` that don't have an explicitly-passed `~screen`.
*
* If a canvas exists on the document with the given ID, then that canvas will be used. Otherwise a canvas will be created & appended to the body.
*
* ```no-run
* # let _ = (setup, draw) => {
* Reprocessing.setScreenId("my-fancy-id");
* /* This will render to the canvas with id "my-fancy-id" */
* Reprocessing.run(~setup, ~draw, ());
* # }
* ```
*/
let setScreenId: string => unit;
let clearScreenId: unit => unit;
/** Play/pause the screen specified by the given ID. If you pass true, it will try to play it, otherwise pause.
*
* The return value indicates the status:
* - None: no screen found
* - Some(true): the screen is (now/still) playing
* - Some(false): the screen is (now/still) paused
*
* Calling this function will not necessarily change the state. Inspect the result to determine success.
*/
let playPause: (string, bool) => option(bool);
/*** Entrypoint to the graphics library. The system
* is designed for you to return a self-defined 'state'
* object from setup, which will then be passed to every
* callback you choose to implement. Updating the state
* is done by returning a different value from the callback.
*/
let run:
(
~setup: glEnvT => 'a,
~screen: string=?,
~draw: ('a, glEnvT) => 'a=?,
~mouseMove: ('a, glEnvT) => 'a=?,
~mouseDragged: ('a, glEnvT) => 'a=?,
~mouseDown: ('a, glEnvT) => 'a=?,
~mouseUp: ('a, glEnvT) => 'a=?,
~keyPressed: ('a, glEnvT) => 'a=?,
~keyReleased: ('a, glEnvT) => 'a=?,
~keyTyped: ('a, glEnvT) => 'a=?,
unit
) =>
unit;