69 строки
2.1 KiB
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;
|
|
}
|