#include #include #include #include #include #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; }