From 5c1c634e85c3e8443fd4867352e74257deff1564 Mon Sep 17 00:00:00 2001 From: Hannes Janetzek Date: Sun, 30 Jun 2013 08:50:20 +0200 Subject: [PATCH] gwt: get multitouch events --- .../badlogic/gdx/backends/gwt/GwtInput.java | 916 ++++++++++-------- 1 file changed, 495 insertions(+), 421 deletions(-) diff --git a/vtm-gdx-html/src/org/oscim/gdx/emu/com/badlogic/gdx/backends/gwt/GwtInput.java b/vtm-gdx-html/src/org/oscim/gdx/emu/com/badlogic/gdx/backends/gwt/GwtInput.java index b44f28c4..354fc02c 100644 --- a/vtm-gdx-html/src/org/oscim/gdx/emu/com/badlogic/gdx/backends/gwt/GwtInput.java +++ b/vtm-gdx-html/src/org/oscim/gdx/emu/com/badlogic/gdx/backends/gwt/GwtInput.java @@ -26,10 +26,12 @@ import com.badlogic.gdx.backends.gwt.widgets.TextInputDialogBox; import com.badlogic.gdx.backends.gwt.widgets.TextInputDialogBox.TextInputDialogListener; import com.badlogic.gdx.utils.TimeUtils; import com.google.gwt.core.client.JavaScriptObject; +import com.google.gwt.core.client.JsArray; import com.google.gwt.dom.client.CanvasElement; import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.NativeEvent; +import com.google.gwt.dom.client.Touch; import com.google.gwt.event.dom.client.KeyCodes; public class GwtInput implements Input { @@ -46,111 +48,117 @@ public class GwtInput implements Input { final CanvasElement canvas; boolean hasFocus = true; - public GwtInput (CanvasElement canvas) { + public GwtInput(CanvasElement canvas) { this.canvas = canvas; hookEvents(); } @Override - public float getAccelerometerX () { + public float getAccelerometerX() { return 0; } @Override - public float getAccelerometerY () { + public float getAccelerometerY() { return 0; } @Override - public float getAccelerometerZ () { + public float getAccelerometerZ() { return 0; } @Override - public int getX () { + public int getX() { return mouseX; } @Override - public int getX (int pointer) { - if (pointer != 0) return 0; + public int getX(int pointer) { + if (pointer != 0) + return 0; return mouseX; } @Override - public int getDeltaX () { + public int getDeltaX() { return deltaX; } @Override - public int getDeltaX (int pointer) { - if (pointer != 0) return 0; + public int getDeltaX(int pointer) { + if (pointer != 0) + return 0; return deltaX; } @Override - public int getY () { + public int getY() { return mouseY; } @Override - public int getY (int pointer) { - if (pointer != 0) return 0; + public int getY(int pointer) { + if (pointer != 0) + return 0; return mouseY; } @Override - public int getDeltaY () { + public int getDeltaY() { return deltaY; } @Override - public int getDeltaY (int pointer) { - if (pointer != 0) return 0; + public int getDeltaY(int pointer) { + if (pointer != 0) + return 0; return deltaY; } @Override - public boolean isTouched () { + public boolean isTouched() { return touched; } @Override - public boolean justTouched () { + public boolean justTouched() { return justTouched; } @Override - public boolean isTouched (int pointer) { - if (pointer != 0) return false; + public boolean isTouched(int pointer) { + if (pointer != 0) + return false; return touched; } @Override - public boolean isButtonPressed (int button) { + public boolean isButtonPressed(int button) { return button == Buttons.LEFT && touched; } @Override - public boolean isKeyPressed (int key) { - if (key == Keys.ANY_KEY) return pressedKeys.size() > 0; + public boolean isKeyPressed(int key) { + if (key == Keys.ANY_KEY) + return pressedKeys.size() > 0; return pressedKeys.contains(key); } @Override - public void getTextInput (TextInputListener listener, String title, String text) { + public void getTextInput(TextInputListener listener, String title, String text) { TextInputDialogBox dialog = new TextInputDialogBox(title, text, null); final TextInputListener capturedListener = listener; dialog.setListener(new TextInputDialogListener() { @Override - public void onPositive (String text) { + public void onPositive(String text) { if (capturedListener != null) { capturedListener.input(text); } } @Override - public void onNegative () { + public void onNegative() { if (capturedListener != null) { capturedListener.canceled(); } @@ -159,19 +167,19 @@ public class GwtInput implements Input { } @Override - public void getPlaceholderTextInput (TextInputListener listener, String title, String placeholder) { + public void getPlaceholderTextInput(TextInputListener listener, String title, String placeholder) { TextInputDialogBox dialog = new TextInputDialogBox(title, null, placeholder); final TextInputListener capturedListener = listener; dialog.setListener(new TextInputDialogListener() { @Override - public void onPositive (String text) { + public void onPositive(String text) { if (capturedListener != null) { capturedListener.input(text); } } @Override - public void onNegative () { + public void onNegative() { if (capturedListener != null) { capturedListener.canceled(); } @@ -180,162 +188,181 @@ public class GwtInput implements Input { } @Override - public void setOnscreenKeyboardVisible (boolean visible) { + public void setOnscreenKeyboardVisible(boolean visible) { } @Override - public void vibrate (int milliseconds) { + public void vibrate(int milliseconds) { } @Override - public void vibrate (long[] pattern, int repeat) { + public void vibrate(long[] pattern, int repeat) { } @Override - public void cancelVibrate () { + public void cancelVibrate() { } @Override - public float getAzimuth () { + public float getAzimuth() { return 0; } @Override - public float getPitch () { + public float getPitch() { return 0; } @Override - public float getRoll () { + public float getRoll() { return 0; } @Override - public void getRotationMatrix (float[] matrix) { + public void getRotationMatrix(float[] matrix) { } @Override - public long getCurrentEventTime () { + public long getCurrentEventTime() { return currentEventTimeStamp; } @Override - public void setCatchBackKey (boolean catchBack) { + public void setCatchBackKey(boolean catchBack) { } @Override - public void setCatchMenuKey (boolean catchMenu) { + public void setCatchMenuKey(boolean catchMenu) { } @Override - public void setInputProcessor (InputProcessor processor) { + public void setInputProcessor(InputProcessor processor) { this.processor = processor; } @Override - public InputProcessor getInputProcessor () { + public InputProcessor getInputProcessor() { return processor; } @Override - public boolean isPeripheralAvailable (Peripheral peripheral) { - if (peripheral == Peripheral.Accelerometer) return false; - if (peripheral == Peripheral.Compass) return false; - if (peripheral == Peripheral.HardwareKeyboard) return true; - if (peripheral == Peripheral.MultitouchScreen) return false; - if (peripheral == Peripheral.OnscreenKeyboard) return false; - if (peripheral == Peripheral.Vibrator) return false; + public boolean isPeripheralAvailable(Peripheral peripheral) { + if (peripheral == Peripheral.Accelerometer) + return false; + if (peripheral == Peripheral.Compass) + return false; + if (peripheral == Peripheral.HardwareKeyboard) + return true; + if (peripheral == Peripheral.MultitouchScreen) + return false; + if (peripheral == Peripheral.OnscreenKeyboard) + return false; + if (peripheral == Peripheral.Vibrator) + return false; return false; } @Override - public int getRotation () { + public int getRotation() { return 0; } @Override - public Orientation getNativeOrientation () { + public Orientation getNativeOrientation() { return Orientation.Landscape; } - /** from https://github.com/toji/game-shim/blob/master/game-shim.js - * @return is Cursor catched */ - private native boolean isCursorCatchedJSNI () /*-{ - if(!navigator.pointer) { - navigator.pointer = navigator.webkitPointer || navigator.mozPointer; - } - if(navigator.pointer) { - if(typeof(navigator.pointer.isLocked) === "boolean") { - // Chrome initially launched with this interface - return navigator.pointer.isLocked; - } else if(typeof(navigator.pointer.isLocked) === "function") { - // Some older builds might provide isLocked as a function - return navigator.pointer.isLocked(); - } else if(typeof(navigator.pointer.islocked) === "function") { - // For compatibility with early Firefox build - return navigator.pointer.islocked(); - } - } - return false; - }-*/; + /** + * from https://github.com/toji/game-shim/blob/master/game-shim.js + * + * @return is Cursor catched + */ + private native boolean isCursorCatchedJSNI() /*-{ + if (!navigator.pointer) { + navigator.pointer = navigator.webkitPointer || navigator.mozPointer; + } + if (navigator.pointer) { + if (typeof (navigator.pointer.isLocked) === "boolean") { + // Chrome initially launched with this interface + return navigator.pointer.isLocked; + } else if (typeof (navigator.pointer.isLocked) === "function") { + // Some older builds might provide isLocked as a function + return navigator.pointer.isLocked(); + } else if (typeof (navigator.pointer.islocked) === "function") { + // For compatibility with early Firefox build + return navigator.pointer.islocked(); + } + } + return false; + }-*/; - /** from https://github.com/toji/game-shim/blob/master/game-shim.js - * @param element Canvas */ - private native void setCursorCatchedJSNI (CanvasElement element) /*-{ - // Navigator pointer is not the right interface according to spec. - // Here for backwards compatibility only - if(!navigator.pointer) { - navigator.pointer = navigator.webkitPointer || navigator.mozPointer; - } - // element.requestPointerLock - if(!element.requestPointerLock) { - element.requestPointerLock = (function() { - return element.webkitRequestPointerLock || - element.mozRequestPointerLock || - function(){ - if(navigator.pointer) { - navigator.pointer.lock(element); - } - }; - })(); - } - element.requestPointerLock(); - }-*/; + /** + * from https://github.com/toji/game-shim/blob/master/game-shim.js + * + * @param element Canvas + */ + private native void setCursorCatchedJSNI(CanvasElement element) /*-{ + // Navigator pointer is not the right interface according to spec. + // Here for backwards compatibility only + if (!navigator.pointer) { + navigator.pointer = navigator.webkitPointer || navigator.mozPointer; + } + // element.requestPointerLock + if (!element.requestPointerLock) { + element.requestPointerLock = (function() { + return element.webkitRequestPointerLock + || element.mozRequestPointerLock || function() { + if (navigator.pointer) { + navigator.pointer.lock(element); + } + }; + })(); + } + element.requestPointerLock(); + }-*/; /** from https://github.com/toji/game-shim/blob/master/game-shim.js */ - private native void exitCursorCatchedJSNI () /*-{ - if(!$doc.exitPointerLock) { - $doc.exitPointerLock = (function() { - return $doc.webkitExitPointerLock || - $doc.mozExitPointerLock || - function(){ - if(navigator.pointer) { - var elem = this; - navigator.pointer.unlock(); - } - }; - })(); - } - }-*/; + private native void exitCursorCatchedJSNI() /*-{ + if (!$doc.exitPointerLock) { + $doc.exitPointerLock = (function() { + return $doc.webkitExitPointerLock || $doc.mozExitPointerLock + || function() { + if (navigator.pointer) { + var elem = this; + navigator.pointer.unlock(); + } + }; + })(); + } + }-*/; - /** from https://github.com/toji/game-shim/blob/master/game-shim.js + /** + * from https://github.com/toji/game-shim/blob/master/game-shim.js + * * @param event JavaScript Mouse Event - * @return movement in x direction */ - private native float getMovementXJSNI (NativeEvent event) /*-{ - return event.movementX || event.webkitMovementX || 0; - }-*/; + * @return movement in x direction + */ + private native float getMovementXJSNI(NativeEvent event) /*-{ + return event.movementX || event.webkitMovementX || 0; + }-*/; - /** from https://github.com/toji/game-shim/blob/master/game-shim.js + /** + * from https://github.com/toji/game-shim/blob/master/game-shim.js + * * @param event JavaScript Mouse Event - * @return movement in y direction */ - private native float getMovementYJSNI (NativeEvent event) /*-{ - return event.movementY || event.webkitMovementY || 0; - }-*/; + * @return movement in y direction + */ + private native float getMovementYJSNI(NativeEvent event) /*-{ + return event.movementY || event.webkitMovementY || 0; + }-*/; - /** works only for Chrome > Version 18 with enabled Mouse Lock enable in about:flags or start Chrome with the - * --enable-pointer-lock flag */ + /** + * works only for Chrome > Version 18 with enabled Mouse Lock enable in + * about:flags or start Chrome with the + * --enable-pointer-lock flag + */ @Override - public void setCursorCatched (boolean catched) { + public void setCursorCatched(boolean catched) { if (catched) setCursorCatchedJSNI(canvas); else @@ -343,76 +370,79 @@ public class GwtInput implements Input { } @Override - public boolean isCursorCatched () { + public boolean isCursorCatched() { return isCursorCatchedJSNI(); } @Override - public void setCursorPosition (int x, int y) { + public void setCursorPosition(int x, int y) { // FIXME?? } // kindly borrowed from our dear playn friends... - static native void addEventListener (JavaScriptObject target, String name, GwtInput handler, boolean capture) /*-{ - target - .addEventListener( - name, - function(e) { - handler.@com.badlogic.gdx.backends.gwt.GwtInput::handleEvent(Lcom/google/gwt/dom/client/NativeEvent;)(e); - }, capture); - }-*/; + static native void addEventListener(JavaScriptObject target, String name, GwtInput handler, + boolean capture) /*-{ + target + .addEventListener( + name, + function(e) { + handler.@com.badlogic.gdx.backends.gwt.GwtInput::handleEvent(Lcom/google/gwt/dom/client/NativeEvent;)(e); + }, capture); + }-*/; - private static native float getMouseWheelVelocity (NativeEvent evt) /*-{ - var delta = 0.0; - var agentInfo = @com.badlogic.gdx.backends.gwt.GwtApplication::agentInfo()(); + private static native float getMouseWheelVelocity(NativeEvent evt) /*-{ + var delta = 0.0; + var agentInfo = @com.badlogic.gdx.backends.gwt.GwtApplication::agentInfo()(); - if (agentInfo.isFirefox) { - if (agentInfo.isMacOS) { - delta = 1.0 * evt.detail; - } else { - delta = 1.0 * evt.detail / 3; - } - } else if (agentInfo.isOpera) { - if (agentInfo.isLinux) { - delta = -1.0 * evt.wheelDelta / 80; - } else { - // on mac - delta = -1.0 * evt.wheelDelta / 40; - } - } else if (agentInfo.isChrome || agentInfo.isSafari) { - delta = -1.0 * evt.wheelDelta / 120; - // handle touchpad for chrome - if (Math.abs(delta) < 1) { - if (agentInfo.isWindows) { - delta = -1.0 * evt.wheelDelta; - } else if (agentInfo.isMacOS) { - delta = -1.0 * evt.wheelDelta / 3; - } - } - } - return delta; - }-*/; + if (agentInfo.isFirefox) { + if (agentInfo.isMacOS) { + delta = 1.0 * evt.detail; + } else { + delta = 1.0 * evt.detail / 3; + } + } else if (agentInfo.isOpera) { + if (agentInfo.isLinux) { + delta = -1.0 * evt.wheelDelta / 80; + } else { + // on mac + delta = -1.0 * evt.wheelDelta / 40; + } + } else if (agentInfo.isChrome || agentInfo.isSafari) { + delta = -1.0 * evt.wheelDelta / 120; + // handle touchpad for chrome + if (Math.abs(delta) < 1) { + if (agentInfo.isWindows) { + delta = -1.0 * evt.wheelDelta; + } else if (agentInfo.isMacOS) { + delta = -1.0 * evt.wheelDelta / 3; + } + } + } + return delta; + }-*/; /** Kindly borrowed from PlayN. **/ - protected static native String getMouseWheelEvent () /*-{ - if (navigator.userAgent.toLowerCase().indexOf('firefox') != -1) { - return "DOMMouseScroll"; - } else { - return "mousewheel"; - } - }-*/; + protected static native String getMouseWheelEvent() /*-{ + if (navigator.userAgent.toLowerCase().indexOf('firefox') != -1) { + return "DOMMouseScroll"; + } else { + return "mousewheel"; + } + }-*/; /** Kindly borrowed from PlayN. **/ - protected static float getRelativeX (NativeEvent e, Element target) { - return e.getClientX() - target.getAbsoluteLeft() + target.getScrollLeft() + target.getOwnerDocument().getScrollLeft(); + protected static float getRelativeX(NativeEvent e, Element target) { + return e.getClientX() - target.getAbsoluteLeft() + target.getScrollLeft() + + target.getOwnerDocument().getScrollLeft(); } /** Kindly borrowed from PlayN. **/ - protected static float getRelativeY (NativeEvent e, Element target) { - return e.getClientY() - target.getAbsoluteTop() + target.getScrollTop() + target.getOwnerDocument().getScrollTop(); + protected static float getRelativeY(NativeEvent e, Element target) { + return e.getClientY() - target.getAbsoluteTop() + target.getScrollTop() + + target.getOwnerDocument().getScrollTop(); } - private void hookEvents () { + private void hookEvents() { addEventListener(canvas, "mousedown", this, true); addEventListener(Document.get(), "mousedown", this, true); addEventListener(canvas, "mouseup", this, true); @@ -423,22 +453,71 @@ public class GwtInput implements Input { addEventListener(Document.get(), "keydown", this, false); addEventListener(Document.get(), "keyup", this, false); addEventListener(Document.get(), "keypress", this, false); + addEventListener(canvas, "touchstart", this, true); + addEventListener(Document.get(), "touchstart", this, true); + addEventListener(canvas, "touchend", this, true); + addEventListener(Document.get(), "touchend", this, true); + addEventListener(canvas, "touchmove", this, true); + addEventListener(Document.get(), "touchmove", this, true); + } - private int getButton (int button) { - if (button == NativeEvent.BUTTON_LEFT) return Buttons.LEFT; - if (button == NativeEvent.BUTTON_RIGHT) return Buttons.RIGHT; - if (button == NativeEvent.BUTTON_MIDDLE) return Buttons.MIDDLE; + private int getButton(int button) { + if (button == NativeEvent.BUTTON_LEFT) + return Buttons.LEFT; + if (button == NativeEvent.BUTTON_RIGHT) + return Buttons.RIGHT; + if (button == NativeEvent.BUTTON_MIDDLE) + return Buttons.MIDDLE; return Buttons.LEFT; } - private void handleEvent (NativeEvent e) { + private void handleEvent(NativeEvent e) { - if (e.getType().equals("mousedown")) { + double r = GwtGraphics.getDevicePixelRatioJSNI(); + + if (e.getType().equals("touchstart")) { + this.justTouched = true; + this.deltaX = 0; + this.deltaY = 0; + this.currentEventTimeStamp = TimeUtils.nanoTime(); + + if (processor != null) { + e.preventDefault(); + JsArray ts = e.getChangedTouches(); + for (int i = 0, n = ts.length(); i < n; i++) { + Touch t = ts.get(i); + processor.touchDown((int)(r * t.getClientX()), (int) (r * t.getClientY()), t.getIdentifier(), + Buttons.LEFT); + } + } + } else if (e.getType().equals("touchend")) { + this.currentEventTimeStamp = TimeUtils.nanoTime(); + if (processor != null) { + e.preventDefault(); + JsArray ts = e.getChangedTouches(); + for (int i = 0, n = ts.length(); i < n; i++) { + Touch t = ts.get(i); + processor.touchUp((int)(r * t.getClientX()), (int) (r * t.getClientY()), t.getIdentifier(), + Buttons.LEFT); + } + } + } else if (e.getType().equals("touchmove")) { + this.currentEventTimeStamp = TimeUtils.nanoTime(); + if (processor != null) { + e.preventDefault(); + JsArray ts = e.getChangedTouches(); + for (int i = 0, n = ts.length(); i < n; i++) { + Touch t = ts.get(i); + processor.touchDragged((int)(r * t.getClientX()), (int) (r * t.getClientY()), t.getIdentifier()); + } + } + } else if (e.getType().equals("mousedown")) { if (!e.getEventTarget().equals(canvas) || touched) { - float mouseX = (int)getRelativeX(e, canvas); - float mouseY = (int)getRelativeY(e, canvas); - if (mouseX < 0 || mouseX > Gdx.graphics.getWidth() || mouseY < 0 || mouseY > Gdx.graphics.getHeight()) { + float mouseX = (int) getRelativeX(e, canvas); + float mouseY = (int) getRelativeY(e, canvas); + if (mouseX < 0 || mouseX > Gdx.graphics.getWidth() || mouseY < 0 + || mouseY > Gdx.graphics.getHeight()) { hasFocus = false; } return; @@ -453,24 +532,23 @@ public class GwtInput implements Input { this.mouseX += getMovementXJSNI(e); this.mouseY += getMovementYJSNI(e); } else { - this.mouseX = (int)getRelativeX(e, canvas); - this.mouseY = (int)getRelativeY(e, canvas); + this.mouseX = (int) getRelativeX(e, canvas); + this.mouseY = (int) getRelativeY(e, canvas); } this.currentEventTimeStamp = TimeUtils.nanoTime(); - if (processor != null) processor.touchDown(mouseX, mouseY, 0, getButton(e.getButton())); - } - - if (e.getType().equals("mousemove")) { + if (processor != null) + processor.touchDown(mouseX, mouseY, 0, getButton(e.getButton())); + } else if (e.getType().equals("mousemove")) { if (isCursorCatched()) { - this.deltaX = (int)getMovementXJSNI(e); - this.deltaY = (int)getMovementYJSNI(e); + this.deltaX = (int) getMovementXJSNI(e); + this.deltaY = (int) getMovementYJSNI(e); this.mouseX += getMovementXJSNI(e); this.mouseY += getMovementYJSNI(e); } else { - this.deltaX = (int)getRelativeX(e, canvas) - mouseX; - this.deltaY = (int)getRelativeY(e, canvas) - mouseY; - this.mouseX = (int)getRelativeX(e, canvas); - this.mouseY = (int)getRelativeY(e, canvas); + this.deltaX = (int) getRelativeX(e, canvas) - mouseX; + this.deltaY = (int) getRelativeY(e, canvas) - mouseY; + this.mouseX = (int) getRelativeX(e, canvas); + this.mouseY = (int) getRelativeY(e, canvas); } this.currentEventTimeStamp = TimeUtils.nanoTime(); if (processor != null) { @@ -479,29 +557,27 @@ public class GwtInput implements Input { else processor.mouseMoved(mouseX, mouseY); } - } - - if (e.getType().equals("mouseup")) { - if (!touched) return; + } else if (e.getType().equals("mouseup")) { + if (!touched) + return; this.pressedButtons.remove(getButton(e.getButton())); this.touched = pressedButtons.size() > 0; if (isCursorCatched()) { - this.deltaX = (int)getMovementXJSNI(e); - this.deltaY = (int)getMovementYJSNI(e); + this.deltaX = (int) getMovementXJSNI(e); + this.deltaY = (int) getMovementYJSNI(e); this.mouseX += getMovementXJSNI(e); this.mouseY += getMovementYJSNI(e); } else { - this.deltaX = (int)getRelativeX(e, canvas) - mouseX; - this.deltaY = (int)getRelativeY(e, canvas) - mouseY; - this.mouseX = (int)getRelativeX(e, canvas); - this.mouseY = (int)getRelativeY(e, canvas); + this.deltaX = (int) getRelativeX(e, canvas) - mouseX; + this.deltaY = (int) getRelativeY(e, canvas) - mouseY; + this.mouseX = (int) getRelativeX(e, canvas); + this.mouseY = (int) getRelativeY(e, canvas); } this.currentEventTimeStamp = TimeUtils.nanoTime(); this.touched = false; - if (processor != null) processor.touchUp(mouseX, mouseY, 0, getButton(e.getButton())); - } - - if (e.getType().equals("keydown") && hasFocus) { + if (processor != null) + processor.touchUp(mouseX, mouseY, 0, getButton(e.getButton())); + } else if (e.getType().equals("keydown") && hasFocus) { System.out.println("keydown"); int code = keyForCode(e.getKeyCode()); if (code == 67) { @@ -512,236 +588,234 @@ public class GwtInput implements Input { } } else { this.pressedKeys.add(code); - if (processor != null) processor.keyDown(code); + if (processor != null) + processor.keyDown(code); } - } - - if (e.getType().equals("keypress") && hasFocus) { + } else if (e.getType().equals("keypress") && hasFocus) { System.out.println("keypress"); - char c = (char)e.getCharCode(); - if (processor != null) processor.keyTyped(c); - } - - if (e.getType().equals("keyup") && hasFocus) { + char c = (char) e.getCharCode(); + if (processor != null) + processor.keyTyped(c); + } else if (e.getType().equals("keyup") && hasFocus) { System.out.println("keyup"); int code = keyForCode(e.getKeyCode()); this.pressedKeys.remove(code); - if (processor != null) processor.keyUp(code); - } - - if (e.getType().equals("mousewheel") ||e.getType().equals("DOMMouseScroll")){ + if (processor != null) + processor.keyUp(code); + } else if (e.getType().equals("mousewheel") || e.getType().equals("DOMMouseScroll")) { float dir = getMouseWheelVelocity(e); - if (dir != 0 && processor != null) processor.scrolled(dir > 0 ? 1 : -1); + if (dir != 0 && processor != null) + processor.scrolled(dir > 0 ? 1 : -1); } -// if(hasFocus) e.preventDefault(); + // if(hasFocus) e.preventDefault(); } /** borrowed from PlayN, thanks guys **/ - private static int keyForCode (int keyCode) { + private static int keyForCode(int keyCode) { switch (keyCode) { - case KeyCodes.KEY_ALT: - return Keys.ALT_LEFT; - case KeyCodes.KEY_BACKSPACE: - return Keys.BACKSPACE; - case KeyCodes.KEY_CTRL: - return Keys.CONTROL_LEFT; - case KeyCodes.KEY_DELETE: - return Keys.DEL; - case KeyCodes.KEY_DOWN: - return Keys.DOWN; - case KeyCodes.KEY_END: - return Keys.END; - case KeyCodes.KEY_ENTER: - return Keys.ENTER; - case KeyCodes.KEY_ESCAPE: - return Keys.ESCAPE; - case KeyCodes.KEY_HOME: - return Keys.HOME; - case KeyCodes.KEY_LEFT: - return Keys.LEFT; - case KeyCodes.KEY_PAGEDOWN: - return Keys.PAGE_DOWN; - case KeyCodes.KEY_PAGEUP: - return Keys.PAGE_UP; - case KeyCodes.KEY_RIGHT: - return Keys.RIGHT; - case KeyCodes.KEY_SHIFT: - return Keys.SHIFT_LEFT; - case KeyCodes.KEY_TAB: - return Keys.TAB; - case KeyCodes.KEY_UP: - return Keys.UP; + case KeyCodes.KEY_ALT: + return Keys.ALT_LEFT; + case KeyCodes.KEY_BACKSPACE: + return Keys.BACKSPACE; + case KeyCodes.KEY_CTRL: + return Keys.CONTROL_LEFT; + case KeyCodes.KEY_DELETE: + return Keys.DEL; + case KeyCodes.KEY_DOWN: + return Keys.DOWN; + case KeyCodes.KEY_END: + return Keys.END; + case KeyCodes.KEY_ENTER: + return Keys.ENTER; + case KeyCodes.KEY_ESCAPE: + return Keys.ESCAPE; + case KeyCodes.KEY_HOME: + return Keys.HOME; + case KeyCodes.KEY_LEFT: + return Keys.LEFT; + case KeyCodes.KEY_PAGEDOWN: + return Keys.PAGE_DOWN; + case KeyCodes.KEY_PAGEUP: + return Keys.PAGE_UP; + case KeyCodes.KEY_RIGHT: + return Keys.RIGHT; + case KeyCodes.KEY_SHIFT: + return Keys.SHIFT_LEFT; + case KeyCodes.KEY_TAB: + return Keys.TAB; + case KeyCodes.KEY_UP: + return Keys.UP; - case KEY_PAUSE: - return Keys.UNKNOWN; // FIXME - case KEY_CAPS_LOCK: - return Keys.UNKNOWN; // FIXME - case KEY_SPACE: - return Keys.SPACE; - case KEY_INSERT: - return Keys.INSERT; - case KEY_0: - return Keys.NUM_0; - case KEY_1: - return Keys.NUM_1; - case KEY_2: - return Keys.NUM_2; - case KEY_3: - return Keys.NUM_3; - case KEY_4: - return Keys.NUM_4; - case KEY_5: - return Keys.NUM_5; - case KEY_6: - return Keys.NUM_6; - case KEY_7: - return Keys.NUM_7; - case KEY_8: - return Keys.NUM_8; - case KEY_9: - return Keys.NUM_9; - case KEY_A: - return Keys.A; - case KEY_B: - return Keys.B; - case KEY_C: - return Keys.C; - case KEY_D: - return Keys.D; - case KEY_E: - return Keys.E; - case KEY_F: - return Keys.F; - case KEY_G: - return Keys.G; - case KEY_H: - return Keys.H; - case KEY_I: - return Keys.I; - case KEY_J: - return Keys.J; - case KEY_K: - return Keys.K; - case KEY_L: - return Keys.L; - case KEY_M: - return Keys.M; - case KEY_N: - return Keys.N; - case KEY_O: - return Keys.O; - case KEY_P: - return Keys.P; - case KEY_Q: - return Keys.Q; - case KEY_R: - return Keys.R; - case KEY_S: - return Keys.S; - case KEY_T: - return Keys.T; - case KEY_U: - return Keys.U; - case KEY_V: - return Keys.V; - case KEY_W: - return Keys.W; - case KEY_X: - return Keys.X; - case KEY_Y: - return Keys.Y; - case KEY_Z: - return Keys.Z; - case KEY_LEFT_WINDOW_KEY: - return Keys.UNKNOWN; // FIXME - case KEY_RIGHT_WINDOW_KEY: - return Keys.UNKNOWN; // FIXME - // case KEY_SELECT_KEY: return Keys.SELECT_KEY; - case KEY_NUMPAD0: - return Keys.NUM_0; - case KEY_NUMPAD1: - return Keys.NUM_1; - case KEY_NUMPAD2: - return Keys.NUM_2; - case KEY_NUMPAD3: - return Keys.NUM_3; - case KEY_NUMPAD4: - return Keys.NUM_4; - case KEY_NUMPAD5: - return Keys.NUM_5; - case KEY_NUMPAD6: - return Keys.NUM_6; - case KEY_NUMPAD7: - return Keys.NUM_7; - case KEY_NUMPAD8: - return Keys.NUM_8; - case KEY_NUMPAD9: - return Keys.NUM_9; - case KEY_MULTIPLY: - return Keys.UNKNOWN; // FIXME - case KEY_ADD: - return Keys.PLUS; - case KEY_SUBTRACT: - return Keys.MINUS; - case KEY_DECIMAL_POINT_KEY: - return Keys.PERIOD; - case KEY_DIVIDE: - return Keys.UNKNOWN; // FIXME - case KEY_F1: - return Keys.F1; - case KEY_F2: - return Keys.F2; - case KEY_F3: - return Keys.F3; - case KEY_F4: - return Keys.F4; - case KEY_F5: - return Keys.F5; - case KEY_F6: - return Keys.F6; - case KEY_F7: - return Keys.F7; - case KEY_F8: - return Keys.F8; - case KEY_F9: - return Keys.F9; - case KEY_F10: - return Keys.F10; - case KEY_F11: - return Keys.F11; - case KEY_F12: - return Keys.F12; - case KEY_NUM_LOCK: - return Keys.NUM; - case KEY_SCROLL_LOCK: - return Keys.UNKNOWN; // FIXME - case KEY_SEMICOLON: - return Keys.SEMICOLON; - case KEY_EQUALS: - return Keys.EQUALS; - case KEY_COMMA: - return Keys.COMMA; - case KEY_DASH: - return Keys.MINUS; - case KEY_PERIOD: - return Keys.PERIOD; - case KEY_FORWARD_SLASH: - return Keys.SLASH; - case KEY_GRAVE_ACCENT: - return Keys.UNKNOWN; // FIXME - case KEY_OPEN_BRACKET: - return Keys.LEFT_BRACKET; - case KEY_BACKSLASH: - return Keys.BACKSLASH; - case KEY_CLOSE_BRACKET: - return Keys.RIGHT_BRACKET; - case KEY_SINGLE_QUOTE: - return Keys.APOSTROPHE; - default: - return Keys.UNKNOWN; + case KEY_PAUSE: + return Keys.UNKNOWN; // FIXME + case KEY_CAPS_LOCK: + return Keys.UNKNOWN; // FIXME + case KEY_SPACE: + return Keys.SPACE; + case KEY_INSERT: + return Keys.INSERT; + case KEY_0: + return Keys.NUM_0; + case KEY_1: + return Keys.NUM_1; + case KEY_2: + return Keys.NUM_2; + case KEY_3: + return Keys.NUM_3; + case KEY_4: + return Keys.NUM_4; + case KEY_5: + return Keys.NUM_5; + case KEY_6: + return Keys.NUM_6; + case KEY_7: + return Keys.NUM_7; + case KEY_8: + return Keys.NUM_8; + case KEY_9: + return Keys.NUM_9; + case KEY_A: + return Keys.A; + case KEY_B: + return Keys.B; + case KEY_C: + return Keys.C; + case KEY_D: + return Keys.D; + case KEY_E: + return Keys.E; + case KEY_F: + return Keys.F; + case KEY_G: + return Keys.G; + case KEY_H: + return Keys.H; + case KEY_I: + return Keys.I; + case KEY_J: + return Keys.J; + case KEY_K: + return Keys.K; + case KEY_L: + return Keys.L; + case KEY_M: + return Keys.M; + case KEY_N: + return Keys.N; + case KEY_O: + return Keys.O; + case KEY_P: + return Keys.P; + case KEY_Q: + return Keys.Q; + case KEY_R: + return Keys.R; + case KEY_S: + return Keys.S; + case KEY_T: + return Keys.T; + case KEY_U: + return Keys.U; + case KEY_V: + return Keys.V; + case KEY_W: + return Keys.W; + case KEY_X: + return Keys.X; + case KEY_Y: + return Keys.Y; + case KEY_Z: + return Keys.Z; + case KEY_LEFT_WINDOW_KEY: + return Keys.UNKNOWN; // FIXME + case KEY_RIGHT_WINDOW_KEY: + return Keys.UNKNOWN; // FIXME + // case KEY_SELECT_KEY: return Keys.SELECT_KEY; + case KEY_NUMPAD0: + return Keys.NUM_0; + case KEY_NUMPAD1: + return Keys.NUM_1; + case KEY_NUMPAD2: + return Keys.NUM_2; + case KEY_NUMPAD3: + return Keys.NUM_3; + case KEY_NUMPAD4: + return Keys.NUM_4; + case KEY_NUMPAD5: + return Keys.NUM_5; + case KEY_NUMPAD6: + return Keys.NUM_6; + case KEY_NUMPAD7: + return Keys.NUM_7; + case KEY_NUMPAD8: + return Keys.NUM_8; + case KEY_NUMPAD9: + return Keys.NUM_9; + case KEY_MULTIPLY: + return Keys.UNKNOWN; // FIXME + case KEY_ADD: + return Keys.PLUS; + case KEY_SUBTRACT: + return Keys.MINUS; + case KEY_DECIMAL_POINT_KEY: + return Keys.PERIOD; + case KEY_DIVIDE: + return Keys.UNKNOWN; // FIXME + case KEY_F1: + return Keys.F1; + case KEY_F2: + return Keys.F2; + case KEY_F3: + return Keys.F3; + case KEY_F4: + return Keys.F4; + case KEY_F5: + return Keys.F5; + case KEY_F6: + return Keys.F6; + case KEY_F7: + return Keys.F7; + case KEY_F8: + return Keys.F8; + case KEY_F9: + return Keys.F9; + case KEY_F10: + return Keys.F10; + case KEY_F11: + return Keys.F11; + case KEY_F12: + return Keys.F12; + case KEY_NUM_LOCK: + return Keys.NUM; + case KEY_SCROLL_LOCK: + return Keys.UNKNOWN; // FIXME + case KEY_SEMICOLON: + return Keys.SEMICOLON; + case KEY_EQUALS: + return Keys.EQUALS; + case KEY_COMMA: + return Keys.COMMA; + case KEY_DASH: + return Keys.MINUS; + case KEY_PERIOD: + return Keys.PERIOD; + case KEY_FORWARD_SLASH: + return Keys.SLASH; + case KEY_GRAVE_ACCENT: + return Keys.UNKNOWN; // FIXME + case KEY_OPEN_BRACKET: + return Keys.LEFT_BRACKET; + case KEY_BACKSLASH: + return Keys.BACKSLASH; + case KEY_CLOSE_BRACKET: + return Keys.RIGHT_BRACKET; + case KEY_SINGLE_QUOTE: + return Keys.APOSTROPHE; + default: + return Keys.UNKNOWN; } }