aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/glut_wheelevents.c68
-rw-r--r--tests/test_browser.py3
2 files changed, 71 insertions, 0 deletions
diff --git a/tests/glut_wheelevents.c b/tests/glut_wheelevents.c
new file mode 100644
index 00000000..7be01636
--- /dev/null
+++ b/tests/glut_wheelevents.c
@@ -0,0 +1,68 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <GL/glut.h>
+#include <EGL/egl.h>
+#include <emscripten.h>
+
+#define MULTILINE(...) #__VA_ARGS__
+
+int wheel_up = 0;
+int wheel_down = 0;
+
+int result = 0;
+
+void mouseCB(int button, int state, int x, int y)
+{
+ if(button == 3)
+ {
+ wheel_up = 1;
+ }
+ else if (button == 4)
+ {
+ wheel_down = 1;
+ }
+}
+
+int main(int argc, char *argv[])
+{
+ emscripten_run_script(MULTILINE(
+ Module.injectWheelEvent = function(x, y, delta) {
+ var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;
+ var event = document.createEvent("MouseEvents");
+ if (!isFirefox) {
+ // mouse wheel event for IE9, Chrome, Safari, Opera
+ event.initMouseEvent('mousewheel', true, true, window,
+ 0, Module['canvas'].offsetLeft + x, Module['canvas'].offsetTop + y, Module['canvas'].offsetLeft + x, Module['canvas'].offsetTop + y,
+ 0, 0, 0, 0, 0, null);
+ event.wheelDelta = delta;
+ } else {
+ // mouse wheel event for Firefox, the delta sign is inversed for that browser and is stored in the detail property of the mouse event
+ event.initMouseEvent('DOMMouseScroll', true, true, window,
+ -delta, Module['canvas'].offsetLeft + x, Module['canvas'].offsetTop + y, Module['canvas'].offsetLeft + x, Module['canvas'].offsetTop + y,
+ 0, 0, 0, 0, 0, null);
+ }
+ Module['canvas'].dispatchEvent(event);
+ }
+ ));
+
+
+ glutInit(&argc, argv);
+
+ glutMouseFunc(&mouseCB);
+
+ // inject wheel up event (delta > 0)
+ emscripten_run_script("Module.injectWheelEvent(100, 100, 1)");
+ if (wheel_up) {
+ printf("%s\n", "mouse wheel up event received");
+ }
+ // inject wheel down event (delta < 0)
+ emscripten_run_script("Module.injectWheelEvent(100, 100, -1)");
+ if (wheel_down) {
+ printf("%s\n", "mouse wheel down event received");
+ }
+
+ result = wheel_up && wheel_down;
+
+ REPORT_RESULT();
+ return 0;
+}
diff --git a/tests/test_browser.py b/tests/test_browser.py
index 799759a1..f4e4b89a 100644
--- a/tests/test_browser.py
+++ b/tests/test_browser.py
@@ -866,6 +866,9 @@ keydown(100);keyup(100); // trigger the end
def test_glut_touchevents(self):
self.btest('glut_touchevents.c', '1')
+ def test_glut_wheelevents(self):
+ self.btest('glut_wheelevents.c', '1')
+
def test_emscripten_get_now(self):
self.btest('emscripten_get_now.cpp', '1')