| var hitRegionEventList = { |
| click : { |
| send : function(x, y) { |
| eventSender.mouseMoveTo(x, y); |
| eventSender.mouseDown(); |
| eventSender.mouseUp(); |
| }, |
| getId : function(event) { return event.region; } |
| }, |
| touchstart : { |
| send : function(x, y) { |
| eventSender.clearTouchPoints(); |
| eventSender.addTouchPoint(x, y); |
| eventSender.touchStart(); |
| eventSender.touchEnd(); |
| }, |
| getId : function(event) { return event.targetTouches[0].region; } |
| } |
| }; |
| |
| function clickCanvas(x, y, scaleFactor) |
| { |
| if (!window.eventSender) |
| return "This test requires eventSender"; |
| |
| var actualId = null; |
| var result = {}; |
| |
| function listener(event) { |
| result[event.type] = hitRegionEventList[event.type].getId(event); |
| canvas.removeEventListener(type, listener, false); |
| } |
| |
| if (scaleFactor === undefined) |
| scaleFactor = 1; |
| var rect = canvas.getBoundingClientRect(); |
| var translatedCanvasLeft = rect.left * scaleFactor * window.devicePixelRatio; |
| var translatedCanvasTop = rect.top * scaleFactor * window.devicePixelRatio; |
| for (var type in hitRegionEventList) { |
| canvas.addEventListener(type, listener, false); |
| hitRegionEventList[type].send(translatedCanvasLeft + x, translatedCanvasTop + y); |
| } |
| |
| // single actualId guarantees that results of eventlist are same |
| for (var type in hitRegionEventList) { |
| if (result[type] === undefined) |
| result[type] = "no event sent to canvas"; |
| if (actualId === null) { |
| actualId = result[type]; |
| } else { |
| if (actualId != result[type]) { |
| // some results of eventlist are different, makes log |
| !function() { |
| actualId = "{"; |
| for (var type in hitRegionEventList) { |
| actualId += type + ": '" + result[type] + "'; "; |
| } |
| actualId += "}"; |
| }(); |
| break; |
| } |
| } |
| } |
| |
| for (var type in hitRegionEventList) { |
| canvas.removeEventListener(type, listener, false); |
| } |
| |
| return actualId; |
| } |