+ break;
+ case 48: // 0
+ case 49: // 1
+ case 50: // 2
+ case 51: // 3
+ case 52: // 4
+ case 53: // 5
+ case 54: // 6
+ case 55: // 7
+ case 56: // 8
+ zoomTo(aEvent.which - 38);
+ break;
+ case 57: // 9
+ zoomTo(9);
+ break;
+ case 96: // 0 (numpad)
+ case 97: // 1 (numpad)
+ case 98: // 2 (numpad)
+ case 99: // 3 (numpad)
+ case 100: // 4 (numpad)
+ case 101: // 5 (numpad)
+ case 102: // 6 (numpad)
+ case 103: // 7 (numpad)
+ case 104: // 8 (numpad)
+ zoomTo(aEvent.which - 86);
+ break;
+ case 105: // 9 (numpad)
+ zoomTo(9);
+ break;
+ default: // not supported
+ console.log("key not supported: " + aEvent.which);
+ break;
+ }
+
+ // Move if needed.
+ if (dX || dY) {
+ gPos.x -= dX * gZoomFactor;
+ gPos.y -= dY * gZoomFactor;
+ if (true) { // use optimized path
+ var mapData = gMapContext.getImageData(0, 0,
+ gMapCanvas.width,
+ gMapCanvas.height);
+ gMapContext.clearRect(0, 0, gMapCanvas.width, gMapCanvas.height);
+ gMapContext.putImageData(mapData, dX, dY);
+ drawMap({left: (dX > 0) ? dX : 0,
+ right: (dX < 0) ? -dX : 0,
+ top: (dY > 0) ? dY : 0,
+ bottom: (dY < 0) ? -dY : 0});
+ }
+ else {
+ drawMap(false, true);
+ }