/
Revery_UI.re
91 lines (78 loc) · 2.13 KB
/
Revery_UI.re
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
module Shaders = Revery_Shaders;
module Geometry = Revery_Geometry;
module Window = Revery_Core.Window;
module Performance = Revery_Core.Performance;
module Animated = Animated;
module Animation = Animation;
module Layout = Layout;
module LayoutTypes = Layout.LayoutTypes;
module Style = Style;
module Transform = Transform;
/* Expose hooks as part of the public API */
include Hooks;
let useState = UiReact.useState;
let useReducer = UiReact.useReducer;
class node = class Node.node(RenderPass.t);
class viewNode = class ViewNode.viewNode;
class textNode = class TextNode.textNode;
class imageNode = class ImageNode.imageNode;
module Mouse = Mouse;
module NodeEvents = NodeEvents;
let component = UiReact.component;
include Primitives;
type renderFunction = unit => UiReact.component;
open UiContainer;
let start =
(
~createOptions=UiContainer.Options.default,
window: Window.t,
render: renderFunction,
) => {
let rootNode = (new viewNode)();
let container = UiReact.createContainer(rootNode);
let mouseCursor: Mouse.Cursor.t = Mouse.Cursor.make();
let ui =
UiContainer.create(
window,
rootNode,
container,
mouseCursor,
createOptions,
);
let _ =
Revery_Core.Event.subscribe(
window.onMouseMove,
m => {
let evt =
Revery_Core.Events.InternalMouseMove({
mouseX: m.mouseX,
mouseY: m.mouseY,
});
Mouse.dispatch(mouseCursor, evt, rootNode);
},
);
let _ =
Revery_Core.Event.subscribe(
window.onMouseDown,
m => {
let evt = Revery_Core.Events.InternalMouseDown({button: m.button});
Mouse.dispatch(mouseCursor, evt, rootNode);
},
);
let _ =
Revery_Core.Event.subscribe(
window.onMouseUp,
m => {
let evt = Revery_Core.Events.InternalMouseUp({button: m.button});
Mouse.dispatch(mouseCursor, evt, rootNode);
},
);
Window.setShouldRenderCallback(window, () => Animated.anyActiveAnimations());
Window.setRenderCallback(
window,
() => {
let component = render();
UiRender.render(ui, component);
},
);
};