diff --git a/vtm-gdx-html/src/org/oscim/gdx/emu/com/badlogic/gdx/backends/gwt/GwtApplication.java b/vtm-gdx-html/src/org/oscim/gdx/emu/com/badlogic/gdx/backends/gwt/GwtApplication.java index 85dcf04d..ac14dda5 100644 --- a/vtm-gdx-html/src/org/oscim/gdx/emu/com/badlogic/gdx/backends/gwt/GwtApplication.java +++ b/vtm-gdx-html/src/org/oscim/gdx/emu/com/badlogic/gdx/backends/gwt/GwtApplication.java @@ -80,7 +80,7 @@ public abstract class GwtApplication implements EntryPoint, Application { @Override public void onModuleLoad() { - this.agentInfo = computeAgentInfo(); + GwtApplication.agentInfo = computeAgentInfo(); this.listener = getApplicationListener(); this.config = getConfig(); diff --git a/vtm-gdx-html/src/org/oscim/gdx/emu/com/badlogic/gdx/backends/gwt/GwtGL20.java b/vtm-gdx-html/src/org/oscim/gdx/emu/com/badlogic/gdx/backends/gwt/GwtGL20.java index c408e3dc..3fda6187 100644 --- a/vtm-gdx-html/src/org/oscim/gdx/emu/com/badlogic/gdx/backends/gwt/GwtGL20.java +++ b/vtm-gdx-html/src/org/oscim/gdx/emu/com/badlogic/gdx/backends/gwt/GwtGL20.java @@ -25,13 +25,11 @@ import java.nio.ShortBuffer; import java.util.HashMap; import java.util.Map; +import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.GL10; import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.Pixmap; import com.badlogic.gdx.utils.GdxRuntimeException; -import com.google.gwt.canvas.client.Canvas; -import com.google.gwt.canvas.dom.client.Context2d; -import com.google.gwt.canvas.dom.client.ImageData; import com.google.gwt.core.client.GWT; import com.google.gwt.typedarrays.client.Uint8ArrayNative; import com.google.gwt.typedarrays.shared.Float32Array; @@ -434,19 +432,10 @@ public class GwtGL20 implements GL20, org.oscim.backend.GL20{ Buffer pixels) { Pixmap pixmap = Pixmap.pixmaps.get(((IntBuffer)pixels).get(0)); if (pixmap != null){ - System.err.println("load texture "+ target + " "+ width + " " + height + " " + type + " " + format); - //Canvas canvasTmp = Canvas.createIfSupported(); - //Context2d context = canvasTmp.getContext2d(); - -// canvasTmp.setCoordinateSpaceHeight(height); -// canvasTmp.setCoordinateSpaceWidth(width); -// context.drawImage(pixmap.getCanvasElement(), 0, 0); -// ImageData imageData = context.getImageData(0, 0, width, height); - - //gl.texImage2D(target, level, internalformat, format, type, imageData); + Gdx.app.log("GwtGL20", "load texture "+ target + " "+ width + " " + height + " " + type + " " + format); gl.texImage2D(target, level, internalformat, format, type, pixmap.getCanvasElement()); - }else if (format == GL20.GL_ALPHA){ - System.err.println("load byte texture " + width + " " + height + " " + type + " " + format); + } else if (format == GL20.GL_ALPHA){ + Gdx.app.log("GwtGL20", "load byte texture " + width + " " + height + " " + type + " " + format); int tmp[] = new int[(width * height) >> 2]; ((IntBuffer)pixels).get(tmp); 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 354fc02c..fe986d1d 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 @@ -35,10 +35,12 @@ import com.google.gwt.dom.client.Touch; import com.google.gwt.event.dom.client.KeyCodes; public class GwtInput implements Input { - boolean touched = false; - int mouseX, mouseY; - int deltaX, deltaY; boolean justTouched = false; + private boolean[] touched = new boolean[20]; + private int[] touchX = new int[20]; + private int[] touchY = new int[20]; + private int[] deltaX = new int[20]; + private int[] deltaY = new int[20]; Set pressedButtons = new HashSet(); Set pressedKeys = new HashSet(); InputProcessor processor; @@ -70,55 +72,47 @@ public class GwtInput implements Input { @Override public int getX() { - return mouseX; + return touchX[0]; } @Override public int getX(int pointer) { - if (pointer != 0) - return 0; - return mouseX; + return touchX[pointer]; } @Override public int getDeltaX() { - return deltaX; + return deltaX[0]; } @Override public int getDeltaX(int pointer) { - if (pointer != 0) - return 0; - return deltaX; + return deltaX[pointer]; } @Override public int getY() { - return mouseY; + return touchY[0]; } @Override public int getY(int pointer) { - if (pointer != 0) - return 0; - return mouseY; + return touchY[pointer]; } @Override public int getDeltaY() { - return deltaY; + return deltaY[0]; } @Override public int getDeltaY(int pointer) { - if (pointer != 0) - return 0; - return deltaY; + return deltaY[pointer]; } @Override public boolean isTouched() { - return touched; + return touched[0]; } @Override @@ -128,14 +122,12 @@ public class GwtInput implements Input { @Override public boolean isTouched(int pointer) { - if (pointer != 0) - return false; - return touched; + return touched[pointer]; } @Override public boolean isButtonPressed(int button) { - return button == Buttons.LEFT && touched; + return button == Buttons.LEFT && touched[0]; } @Override @@ -254,7 +246,7 @@ public class GwtInput implements Input { if (peripheral == Peripheral.HardwareKeyboard) return true; if (peripheral == Peripheral.MultitouchScreen) - return false; + return isTouchScreen(); if (peripheral == Peripheral.OnscreenKeyboard) return false; if (peripheral == Peripheral.Vibrator) @@ -356,6 +348,10 @@ public class GwtInput implements Input { return event.movementY || event.webkitMovementY || 0; }-*/; + private static native boolean isTouchScreen() /*-{ + return (('ontouchstart' in window) || (navigator.msMaxTouchPoints > 0)); + }-*/; + /** * works only for Chrome > Version 18 with enabled Mouse Lock enable in * about:flags or start Chrome with the @@ -453,12 +449,11 @@ 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); + addEventListener(canvas, "touchcancel", this, true); + addEventListener(canvas, "touchend", this, true); } @@ -474,46 +469,8 @@ public class GwtInput implements Input { private void handleEvent(NativeEvent e) { - 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) { + if (e.getType().equals("mousedown")) { + if (!e.getEventTarget().equals(canvas) || touched[0]) { float mouseX = (int) getRelativeX(e, canvas); float mouseY = (int) getRelativeY(e, canvas); if (mouseX < 0 || mouseX > Gdx.graphics.getWidth() || mouseY < 0 @@ -524,60 +481,66 @@ public class GwtInput implements Input { } hasFocus = true; this.justTouched = true; - this.touched = true; + this.touched[0] = true; this.pressedButtons.add(getButton(e.getButton())); - this.deltaX = 0; - this.deltaY = 0; + this.deltaX[0] = 0; + this.deltaY[0] = 0; if (isCursorCatched()) { - this.mouseX += getMovementXJSNI(e); - this.mouseY += getMovementYJSNI(e); + this.touchX[0] += getMovementXJSNI(e); + this.touchY[0] += getMovementYJSNI(e); } else { - this.mouseX = (int) getRelativeX(e, canvas); - this.mouseY = (int) getRelativeY(e, canvas); + this.touchX[0] = (int) getRelativeX(e, canvas); + this.touchY[0] = (int) getRelativeY(e, canvas); } this.currentEventTimeStamp = TimeUtils.nanoTime(); if (processor != null) - processor.touchDown(mouseX, mouseY, 0, getButton(e.getButton())); - } else if (e.getType().equals("mousemove")) { + processor.touchDown(touchX[0], touchY[0], 0, getButton(e.getButton())); + } + + if (e.getType().equals("mousemove")) { if (isCursorCatched()) { - this.deltaX = (int) getMovementXJSNI(e); - this.deltaY = (int) getMovementYJSNI(e); - this.mouseX += getMovementXJSNI(e); - this.mouseY += getMovementYJSNI(e); + this.deltaX[0] = (int) getMovementXJSNI(e); + this.deltaY[0] = (int) getMovementYJSNI(e); + this.touchX[0] += getMovementXJSNI(e); + this.touchY[0] += 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[0] = (int) getRelativeX(e, canvas) - touchX[0]; + this.deltaY[0] = (int) getRelativeY(e, canvas) - touchY[0]; + this.touchX[0] = (int) getRelativeX(e, canvas); + this.touchY[0] = (int) getRelativeY(e, canvas); } this.currentEventTimeStamp = TimeUtils.nanoTime(); if (processor != null) { - if (touched) - processor.touchDragged(mouseX, mouseY, 0); + if (touched[0]) + processor.touchDragged(touchX[0], touchY[0], 0); else - processor.mouseMoved(mouseX, mouseY); + processor.mouseMoved(touchX[0], touchY[0]); } - } else if (e.getType().equals("mouseup")) { - if (!touched) + } + + if (e.getType().equals("mouseup")) { + if (!touched[0]) return; this.pressedButtons.remove(getButton(e.getButton())); - this.touched = pressedButtons.size() > 0; + this.touched[0] = pressedButtons.size() > 0; if (isCursorCatched()) { - this.deltaX = (int) getMovementXJSNI(e); - this.deltaY = (int) getMovementYJSNI(e); - this.mouseX += getMovementXJSNI(e); - this.mouseY += getMovementYJSNI(e); + this.deltaX[0] = (int) getMovementXJSNI(e); + this.deltaY[0] = (int) getMovementYJSNI(e); + this.touchX[0] += getMovementXJSNI(e); + this.touchY[0] += 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[0] = (int) getRelativeX(e, canvas) - touchX[0]; + this.deltaY[0] = (int) getRelativeY(e, canvas) - touchY[0]; + this.touchX[0] = (int) getRelativeX(e, canvas); + this.touchY[0] = (int) getRelativeY(e, canvas); } this.currentEventTimeStamp = TimeUtils.nanoTime(); - this.touched = false; + this.touched[0] = false; if (processor != null) - processor.touchUp(mouseX, mouseY, 0, getButton(e.getButton())); - } else if (e.getType().equals("keydown") && hasFocus) { + processor.touchUp(touchX[0], touchY[0], 0, getButton(e.getButton())); + } + + if (e.getType().equals("keydown") && hasFocus) { System.out.println("keydown"); int code = keyForCode(e.getKeyCode()); if (code == 67) { @@ -591,17 +554,102 @@ public class GwtInput implements Input { if (processor != null) processor.keyDown(code); } - } else if (e.getType().equals("keypress") && hasFocus) { + } + + if (e.getType().equals("keypress") && hasFocus) { System.out.println("keypress"); char c = (char) e.getCharCode(); if (processor != null) processor.keyTyped(c); - } else if (e.getType().equals("keyup") && hasFocus) { + } + + 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("touchstart")) { + this.justTouched = true; + JsArray touches = e.getChangedTouches(); + for (int i = 0, j = touches.length(); i < j; i++) { + Touch touch = touches.get(i); + int touchId = touch.getIdentifier(); + touched[touchId] = true; + double r = GwtGraphics.getDevicePixelRatioJSNI(); + int x = (int) (touch.getRelativeX(canvas) * r); + int y = (int) (touch.getRelativeY(canvas) * r); + touchX[touchId] = x; + touchY[touchId] = y; + deltaX[touchId] = 0; + deltaY[touchId] = 0; + if (processor != null) { + processor.touchDown(touchX[touchId], touchY[touchId], touchId, Buttons.LEFT); + } + } + this.currentEventTimeStamp = TimeUtils.nanoTime(); + e.preventDefault(); + } + if (e.getType().equals("touchmove")) { + JsArray touches = e.getChangedTouches(); + for (int i = 0, j = touches.length(); i < j; i++) { + Touch touch = touches.get(i); + int touchId = touch.getIdentifier(); + double r = GwtGraphics.getDevicePixelRatioJSNI(); + int x = (int) (touch.getRelativeX(canvas) * r); + int y = (int) (touch.getRelativeY(canvas) * r); + deltaX[touchId] = x - touchX[touchId]; + deltaY[touchId] = y - touchY[touchId]; + touchX[touchId] = x; + touchY[touchId] = y; + if (processor != null) { + processor.touchDragged(touchX[touchId], touchY[touchId], touchId); + } + } + this.currentEventTimeStamp = TimeUtils.nanoTime(); + e.preventDefault(); + } + if (e.getType().equals("touchcancel")) { + JsArray touches = e.getChangedTouches(); + for (int i = 0, j = touches.length(); i < j; i++) { + Touch touch = touches.get(i); + int touchId = touch.getIdentifier(); + touched[touchId] = false; + double r = GwtGraphics.getDevicePixelRatioJSNI(); + int x = (int) (touch.getRelativeX(canvas) * r); + int y = (int) (touch.getRelativeY(canvas) * r); + deltaX[touchId] = x - touchX[touchId]; + deltaY[touchId] = y - touchY[touchId]; + touchX[touchId] = x; + touchY[touchId] = y; + if (processor != null) { + processor.touchUp(touchX[touchId], touchY[touchId], touchId, Buttons.LEFT); + } + } + this.currentEventTimeStamp = TimeUtils.nanoTime(); + e.preventDefault(); + } + if (e.getType().equals("touchend")) { + JsArray touches = e.getChangedTouches(); + for (int i = 0, j = touches.length(); i < j; i++) { + Touch touch = touches.get(i); + int touchId = touch.getIdentifier(); + touched[touchId] = false; + double r = GwtGraphics.getDevicePixelRatioJSNI(); + int x = (int) (touch.getRelativeX(canvas) * r); + int y = (int) (touch.getRelativeY(canvas) * r); + deltaX[touchId] = x - touchX[touchId]; + deltaY[touchId] = y - touchY[touchId]; + touchX[touchId] = x; + touchY[touchId] = y; + if (processor != null) { + processor.touchUp(touchX[touchId], touchY[touchId], touchId, Buttons.LEFT); + } + } + this.currentEventTimeStamp = TimeUtils.nanoTime(); + e.preventDefault(); } else if (e.getType().equals("mousewheel") || e.getType().equals("DOMMouseScroll")) { float dir = getMouseWheelVelocity(e); @@ -609,7 +657,6 @@ public class GwtInput implements Input { processor.scrolled(dir > 0 ? 1 : -1); } - // if(hasFocus) e.preventDefault(); }