Path: blob/main/test/browser/glut_wheelevents.c
7085 views
/*1* Copyright 2013 The Emscripten Authors. All rights reserved.2* Emscripten is available under two separate licenses, the MIT license and the3* University of Illinois/NCSA Open Source License. Both these licenses can be4* found in the LICENSE file.5*/67#include <assert.h>8#include <stdio.h>9#include <stdlib.h>10#include <GL/glut.h>11#include <EGL/egl.h>12#include <emscripten.h>1314#define MULTILINE(...) #__VA_ARGS__1516int wheel_up = 0;17int wheel_down = 0;1819void mouseCB(int button, int state, int x, int y) {20if (button == 3) {21wheel_up = 1;22} else if (button == 4) {23wheel_down = 1;24}25}2627int main(int argc, char *argv[]) {28emscripten_run_script(MULTILINE(29Module.injectWheelEvent = function(x, y, delta) {30var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;31var event = document.createEvent("MouseEvents");32if (!isFirefox) {33// mouse wheel event for IE9, Chrome, Safari, Opera34event.initMouseEvent('mousewheel', true, true, window,350, Module['canvas'].offsetLeft + x, Module['canvas'].offsetTop + y, Module['canvas'].offsetLeft + x, Module['canvas'].offsetTop + y,360, 0, 0, 0, 0, null);37event.wheelDelta = delta;38} else {39// mouse wheel event for Firefox, the delta sign is inversed for that browser and is stored in the detail property of the mouse event40event.initMouseEvent('DOMMouseScroll', true, true, window,41-delta, Module['canvas'].offsetLeft + x, Module['canvas'].offsetTop + y, Module['canvas'].offsetLeft + x, Module['canvas'].offsetTop + y,420, 0, 0, 0, 0, null);43}44Module['canvas'].dispatchEvent(event);45}46));474849glutInit(&argc, argv);5051glutMouseFunc(&mouseCB);5253// inject wheel up event (delta > 0)54emscripten_run_script("Module.injectWheelEvent(100, 100, 1)");55if (wheel_up) {56printf("%s\n", "mouse wheel up event received");57}58// inject wheel down event (delta < 0)59emscripten_run_script("Module.injectWheelEvent(100, 100, -1)");60if (wheel_down) {61printf("%s\n", "mouse wheel down event received");62}6364assert(wheel_up && wheel_down);6566return 0;67}686970