Empirical
events.h
Go to the documentation of this file.
1 
18 #ifndef EMP_WEB_EVENTS_H
19 #define EMP_WEB_EVENTS_H
20 
21 #include <utility>
22 
23 #include "JSWrap.h"
24 
25 namespace emp {
26 namespace web {
27 
29  template <typename FUN_TYPE> void OnDocumentReady(FUN_TYPE && fun) {
30  // const size_t fun_id = JSWrapOnce(fun);
31  const size_t fun_id = JSWrap(std::forward<FUN_TYPE>(fun), "", true);
32  (void) fun_id;
33 
34  EM_ASM_ARGS({ $( document ).ready(function() { emp.Callback($0); }); }, fun_id);
35  }
36 
38  struct Event {
39  bool bubbles;
40  bool cancelable;
41  // bool defaultPrevented; // Has the default action already been prevented?
42  // int currentTarget; // Element whose event listeners triggered this event
43  // int eventPhase; // 0=none, 1=capturing, 2=at target, 3=bubbling
44  // bool isTrusted;
45  // int target; // Which element triggered this event?
46  // int timeStamp; // When was event created?
47  // std::string type; // E.g., "mousedown"
48  // int view; // Which window did event occur in?
49 
50  // void preventDefault() { ; }
51  // void stopImmediatePropagation() { ; } // Prevents other listeners from being called.
52  // void stopPropagation() { ; }
53 
54  template <int ARG_ID>
55  void LoadFromArg() {
56  bubbles = EM_ASM_INT({ return emp_i.cb_args[$0].bubbles; }, ARG_ID);
57  cancelable = EM_ASM_INT({ return emp_i.cb_args[$0].cancelable; }, ARG_ID);
58  }
59  };
60 
62  struct MouseEvent : public Event {
63  // All values reflect the state of devices when the event was triggered.
64  bool altKey;
65  bool ctrlKey;
66  bool metaKey;
67  bool shiftKey;
68 
69  int button;
70  int detail;
71 
72  int clientX;
73  int clientY;
74  int screenX;
75  int screenY;
76  // int buttons; ///< Which mouse buttons were pressed? Sum: (1/4/2) (Special: 8,16)
77  // int relatedTarget ///< Element related to the element that triggered the mouse event
78  // int which ///< Which mouse button was pressed? 0=none (1/2/3)
79 
80  template <int ARG_ID>
81  void LoadFromArg() {
82  Event::LoadFromArg<ARG_ID>();
83 
84  altKey = EM_ASM_INT({ return emp_i.cb_args[$0].altKey; }, ARG_ID);
85  ctrlKey = EM_ASM_INT({ return emp_i.cb_args[$0].ctrlKey; }, ARG_ID);
86  metaKey = EM_ASM_INT({ return emp_i.cb_args[$0].metaKey; }, ARG_ID);
87  shiftKey = EM_ASM_INT({ return emp_i.cb_args[$0].shiftKey; }, ARG_ID);
88  button = EM_ASM_INT({ return emp_i.cb_args[$0].button; }, ARG_ID);
89  detail = EM_ASM_INT({ return emp_i.cb_args[$0].detail; }, ARG_ID);
90  clientX = EM_ASM_INT({ return emp_i.cb_args[$0].clientX; }, ARG_ID);
91  clientY = EM_ASM_INT({ return emp_i.cb_args[$0].clientY; }, ARG_ID);
92  screenX = EM_ASM_INT({ return emp_i.cb_args[$0].screenX; }, ARG_ID);
93  screenY = EM_ASM_INT({ return emp_i.cb_args[$0].screenY; }, ARG_ID);
94  }
95  };
96 
97 
99  struct KeyboardEvent : public Event {
100  // All values reflect the state of devices when the event was triggered.
101  bool altKey;
102  bool ctrlKey;
103  bool metaKey;
104  bool shiftKey;
105 
106  int charCode;
107  int keyCode;
108 
109  template <int ARG_ID>
110  void LoadFromArg() {
111  Event::LoadFromArg<ARG_ID>();
112 
113  altKey = EM_ASM_INT({ return emp_i.cb_args[$0].altKey; }, ARG_ID);
114  ctrlKey = EM_ASM_INT({ return emp_i.cb_args[$0].ctrlKey; }, ARG_ID);
115  metaKey = EM_ASM_INT({ return emp_i.cb_args[$0].metaKey; }, ARG_ID);
116  shiftKey = EM_ASM_INT({ return emp_i.cb_args[$0].shiftKey; }, ARG_ID);
117  charCode = EM_ASM_INT({ return emp_i.cb_args[$0].charCode; }, ARG_ID);
118  keyCode = EM_ASM_INT({ return emp_i.cb_args[$0].keyCode; }, ARG_ID);
119  }
120  };
121 
122 
124  struct WheelEvent : public Event {
125  // All values reflect the state of devices when the event was triggered.
126  int deltaX;
127  int deltaY;
128  int deltaZ;
129  int deltaMode;
130 
131  template <int ARG_ID>
132  void LoadFromArg() {
133  Event::LoadFromArg<ARG_ID>();
134 
135  deltaX = EM_ASM_INT({ return emp_i.cb_args[$0].deltaX; }, ARG_ID);
136  deltaY = EM_ASM_INT({ return emp_i.cb_args[$0].deltaY; }, ARG_ID);
137  deltaZ = EM_ASM_INT({ return emp_i.cb_args[$0].deltaZ; }, ARG_ID);
138  deltaMode = EM_ASM_INT({ return emp_i.cb_args[$0].deltaMode; }, ARG_ID);
139  }
140  };
141 }
142 }
143 
144 #endif
bool shiftKey
Was "SHIFT" key pressed?
Definition: events.h:67
bool shiftKey
Was "SHIFT" key pressed?
Definition: events.h:104
bool cancelable
Can the default action be prevented?
Definition: events.h:40
void LoadFromArg()
Definition: events.h:110
bool ctrlKey
Was "CTRL" key pressed?
Definition: events.h:102
int charCode
Unicode character pressed.
Definition: events.h:106
bool metaKey
Was "META" key pressed?
Definition: events.h:66
Data common to all web events.
Definition: events.h:38
int button
Which mouse button was pressed? -1=none (0/1/2)
Definition: events.h:69
bool altKey
Was "ALT" key was pressed?
Definition: events.h:64
int deltaY
Vertical scroll amount.
Definition: events.h:127
Keyboard-specific information about web events.
Definition: events.h:99
int deltaX
Horizontal scroll amount.
Definition: events.h:126
void LoadFromArg()
Definition: events.h:132
int deltaZ
Scroll amount of a mouse wheel for the z-axis.
Definition: events.h:128
Mouse-wheel-specific information about web events.
Definition: events.h:124
bool ctrlKey
Was "CTRL" key pressed?
Definition: events.h:65
bool bubbles
Is this a bubbling event?
Definition: events.h:39
int deltaMode
The unit of measurements for delta values (pixels, lines or pages)
Definition: events.h:129
int clientY
Y-mouse postion, relative to current window.
Definition: events.h:73
void LoadFromArg()
Definition: events.h:81
int screenY
Y-mouse position, relative to the screen.
Definition: events.h:75
bool altKey
Was "ALT" key was pressed?
Definition: events.h:101
Mouse-specific information about web events.
Definition: events.h:62
int detail
How many clicks happened in short succession?
Definition: events.h:70
Wrap a C++ function and convert it to an integer that can be called from Javascript.
int keyCode
Which key was pressed on the keyboard (e.g., &#39;a&#39; and &#39;A&#39; are the same)
Definition: events.h:107
int clientX
X-mouse postion, relative to current window.
Definition: events.h:72
If we are in emscripten, make sure to include the header.
Definition: array.h:37
void OnDocumentReady(FUN_TYPE &&fun)
Runs the specified function when the document is finished loading and being set up.
Definition: events.h:29
bool metaKey
Was "META" key pressed?
Definition: events.h:103
int screenX
X-mouse position, relative to the screen.
Definition: events.h:74
void LoadFromArg()
Definition: events.h:55