Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
emscripten-core
GitHub Repository: emscripten-core/emscripten
Path: blob/main/test/browser/glut_wheelevents.c
7085 views
1
/*
2
* Copyright 2013 The Emscripten Authors. All rights reserved.
3
* Emscripten is available under two separate licenses, the MIT license and the
4
* University of Illinois/NCSA Open Source License. Both these licenses can be
5
* found in the LICENSE file.
6
*/
7
8
#include <assert.h>
9
#include <stdio.h>
10
#include <stdlib.h>
11
#include <GL/glut.h>
12
#include <EGL/egl.h>
13
#include <emscripten.h>
14
15
#define MULTILINE(...) #__VA_ARGS__
16
17
int wheel_up = 0;
18
int wheel_down = 0;
19
20
void mouseCB(int button, int state, int x, int y) {
21
if (button == 3) {
22
wheel_up = 1;
23
} else if (button == 4) {
24
wheel_down = 1;
25
}
26
}
27
28
int main(int argc, char *argv[]) {
29
emscripten_run_script(MULTILINE(
30
Module.injectWheelEvent = function(x, y, delta) {
31
var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;
32
var event = document.createEvent("MouseEvents");
33
if (!isFirefox) {
34
// mouse wheel event for IE9, Chrome, Safari, Opera
35
event.initMouseEvent('mousewheel', true, true, window,
36
0, Module['canvas'].offsetLeft + x, Module['canvas'].offsetTop + y, Module['canvas'].offsetLeft + x, Module['canvas'].offsetTop + y,
37
0, 0, 0, 0, 0, null);
38
event.wheelDelta = delta;
39
} else {
40
// mouse wheel event for Firefox, the delta sign is inversed for that browser and is stored in the detail property of the mouse event
41
event.initMouseEvent('DOMMouseScroll', true, true, window,
42
-delta, Module['canvas'].offsetLeft + x, Module['canvas'].offsetTop + y, Module['canvas'].offsetLeft + x, Module['canvas'].offsetTop + y,
43
0, 0, 0, 0, 0, null);
44
}
45
Module['canvas'].dispatchEvent(event);
46
}
47
));
48
49
50
glutInit(&argc, argv);
51
52
glutMouseFunc(&mouseCB);
53
54
// inject wheel up event (delta > 0)
55
emscripten_run_script("Module.injectWheelEvent(100, 100, 1)");
56
if (wheel_up) {
57
printf("%s\n", "mouse wheel up event received");
58
}
59
// inject wheel down event (delta < 0)
60
emscripten_run_script("Module.injectWheelEvent(100, 100, -1)");
61
if (wheel_down) {
62
printf("%s\n", "mouse wheel down event received");
63
}
64
65
assert(wheel_up && wheel_down);
66
67
return 0;
68
}
69
70