emscripten/tests/glut_wheelevents.c

69 строки
2.1 KiB
C

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