diff --git a/SPD-classes/src/main/java/com/watabou/input/InputHandler.java b/SPD-classes/src/main/java/com/watabou/input/InputHandler.java index 88020a246..9f6bb25f5 100644 --- a/SPD-classes/src/main/java/com/watabou/input/InputHandler.java +++ b/SPD-classes/src/main/java/com/watabou/input/InputHandler.java @@ -78,6 +78,20 @@ public class InputHandler extends InputAdapter { public void removeInputProcessor(InputProcessor processor){ multiplexer.removeProcessor(processor); } + + public void emulateTouch(int button, boolean down){ + PointF hoverPos = PointerEvent.currentHoverPos(); + if (down){ + multiplexer.touchDown((int)hoverPos.x, (int)hoverPos.y, 10+button, button); + } else { + multiplexer.touchUp((int)hoverPos.x, (int)hoverPos.y, 10+button, button); + } + } + + public void emulateDrag(int button){ + PointF hoverPos = PointerEvent.currentHoverPos(); + multiplexer.touchDragged((int)hoverPos.x, (int)hoverPos.y, 10+button); + } public void processAllEvents(){ PointerEvent.processPointerEvents(); @@ -91,8 +105,10 @@ public class InputHandler extends InputAdapter { @Override public synchronized boolean touchDown(int screenX, int screenY, int pointer, int button) { - ControllerHandler.setControllerPointer(false); - ControllerHandler.controllerActive = false; + if (pointer < 10) { + ControllerHandler.setControllerPointer(false); + ControllerHandler.controllerActive = false; + } if (button >= 3 && KeyBindings.isKeyBound( button + 1000 )) { KeyEvent.addKeyEvent( new KeyEvent( button + 1000, true ) ); diff --git a/SPD-classes/src/main/java/com/watabou/input/KeyEvent.java b/SPD-classes/src/main/java/com/watabou/input/KeyEvent.java index cbaf43865..c6ca34959 100644 --- a/SPD-classes/src/main/java/com/watabou/input/KeyEvent.java +++ b/SPD-classes/src/main/java/com/watabou/input/KeyEvent.java @@ -21,6 +21,7 @@ package com.watabou.input; +import com.watabou.noosa.Game; import com.watabou.utils.Signal; import java.util.ArrayList; @@ -63,13 +64,13 @@ public class KeyEvent { public static synchronized void processKeyEvents(){ for (KeyEvent k : keyEvents){ if (KeyBindings.getActionForKey(k) == GameAction.LEFT_CLICK){ - PointerEvent.emulateMouseButton(PointerEvent.LEFT, k.pressed); + Game.inputHandler.emulateTouch(PointerEvent.LEFT, k.pressed); if (KeyBindings.bindingKey) keySignal.dispatch(k); } else if (KeyBindings.getActionForKey(k) == GameAction.RIGHT_CLICK){ - PointerEvent.emulateMouseButton(PointerEvent.RIGHT, k.pressed); + Game.inputHandler.emulateTouch(PointerEvent.RIGHT, k.pressed); if (KeyBindings.bindingKey) keySignal.dispatch(k); } else if (KeyBindings.getActionForKey(k) == GameAction.MIDDLE_CLICK){ - PointerEvent.emulateMouseButton(PointerEvent.MIDDLE, k.pressed); + Game.inputHandler.emulateTouch(PointerEvent.MIDDLE, k.pressed); if (KeyBindings.bindingKey) keySignal.dispatch(k); } else { keySignal.dispatch(k); diff --git a/SPD-classes/src/main/java/com/watabou/input/PointerEvent.java b/SPD-classes/src/main/java/com/watabou/input/PointerEvent.java index 4e9352cd2..9cf1c7478 100644 --- a/SPD-classes/src/main/java/com/watabou/input/PointerEvent.java +++ b/SPD-classes/src/main/java/com/watabou/input/PointerEvent.java @@ -121,14 +121,6 @@ public class PointerEvent { } return lastHoverPos.clone(); } - - public static synchronized void emulateMouseButton( int button, boolean down ){ - if (down){ - addPointerEvent(new PointerEvent((int)lastHoverPos.x, (int)lastHoverPos.y, 1000+button, Type.DOWN, button)); - } else { - addPointerEvent(new PointerEvent((int)lastHoverPos.x, (int)lastHoverPos.y, 1000+button, Type.UP, button)); - } - } public static synchronized void addPointerEvent( PointerEvent event ){ pointerEvents.add( event ); @@ -155,10 +147,9 @@ public class PointerEvent { //add drag events for any emulated presses if (hovered){ - for (int i = 1000+LEFT; i <= 1000+FORWARD; i++){ + for (int i = 10+LEFT; i <= 10+FORWARD; i++){ if (activePointers.containsKey(i)){ - //add to front in case pointer is also being released this frame - pointerEvents.add(0, new PointerEvent((int)lastHoverPos.x, (int)lastHoverPos.y, i, Type.DOWN, i)); + Game.inputHandler.emulateDrag(i-10); } } } @@ -187,7 +178,7 @@ public class PointerEvent { } if (clearKeyboardThisPress){ //most press events should clear the keyboard - Gdx.input.setOnscreenKeyboardVisible(false); + Game.platform.setOnscreenKeyboardVisible(false); } } pointerEvents.clear(); diff --git a/SPD-classes/src/main/java/com/watabou/noosa/TextInput.java b/SPD-classes/src/main/java/com/watabou/noosa/TextInput.java index b997c6a71..d28db7efa 100644 --- a/SPD-classes/src/main/java/com/watabou/noosa/TextInput.java +++ b/SPD-classes/src/main/java/com/watabou/noosa/TextInput.java @@ -101,12 +101,20 @@ public class TextInput extends Component { enterPressed(); } } + }); } + textField.setOnscreenKeyboard(new TextField.OnscreenKeyboard() { + @Override + public void show(boolean visible) { + Game.platform.setOnscreenKeyboardVisible(visible); + } + }); + container.setActor(textField); stage.setKeyboardFocus(textField); - Gdx.input.setOnscreenKeyboardVisible(true); + Game.platform.setOnscreenKeyboardVisible(true); } public void enterPressed(){ @@ -209,7 +217,7 @@ public class TextInput extends Component { stage.dispose(); skin.dispose(); Game.inputHandler.removeInputProcessor(stage); - Gdx.input.setOnscreenKeyboardVisible(false); + Game.platform.setOnscreenKeyboardVisible(false); if (!DeviceCompat.isDesktop()) Game.platform.updateSystemUI(); } } diff --git a/SPD-classes/src/main/java/com/watabou/utils/PlatformSupport.java b/SPD-classes/src/main/java/com/watabou/utils/PlatformSupport.java index fc254b5cc..5d34b7b7d 100644 --- a/SPD-classes/src/main/java/com/watabou/utils/PlatformSupport.java +++ b/SPD-classes/src/main/java/com/watabou/utils/PlatformSupport.java @@ -51,6 +51,10 @@ public abstract class PlatformSupport { return Gdx.net.openURI( uri ); } + public void setOnscreenKeyboardVisible(boolean value){ + Gdx.input.setOnscreenKeyboardVisible(value); + } + //TODO should consider spinning this into its own class, rather than platform support getting ever bigger protected static HashMap> fonts; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java index a5dc4d040..f59ee3df5 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java @@ -1097,8 +1097,8 @@ public class GameScene extends PixelScene { for (Gizmo g : scene.members){ if (g instanceof Window) offsetToInherit = ((Window) g).getOffset(); } - if (scene.lastOffset != null && offsetToInherit == null) { - offsetToInherit = scene.lastOffset; + if (lastOffset != null) { + offsetToInherit = lastOffset; } if (offsetToInherit != null) { wnd.offset(offsetToInherit); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndTextInput.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndTextInput.java index aaabd32d7..871344151 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndTextInput.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndTextInput.java @@ -49,12 +49,10 @@ public class WndTextInput extends Window { super(); //need to offset to give space for the soft keyboard - if (!DeviceCompat.isDesktop()) { - if (PixelScene.landscape()) { - offset(0, -45); - } else { - offset(0, multiLine ? -60 : -45); - } + if (PixelScene.landscape()) { + offset(0, -45); + } else { + offset(0, multiLine ? -60 : -45); } final int width;