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 00c21f21a..765d8afe6 100644 --- a/SPD-classes/src/main/java/com/watabou/input/InputHandler.java +++ b/SPD-classes/src/main/java/com/watabou/input/InputHandler.java @@ -90,13 +90,13 @@ public class InputHandler extends InputAdapter { @Override public synchronized boolean touchDown(int screenX, int screenY, int pointer, int button) { Gdx.input.setOnscreenKeyboardVisible(false); //in-game events never need keyboard, so hide it - PointerEvent.addPointerEvent(new PointerEvent(screenX, screenY, pointer, PointerEvent.Type.DOWN)); + PointerEvent.addPointerEvent(new PointerEvent(screenX, screenY, pointer, PointerEvent.Type.DOWN, button)); return true; } @Override public synchronized boolean touchUp(int screenX, int screenY, int pointer, int button) { - PointerEvent.addPointerEvent(new PointerEvent(screenX, screenY, pointer, PointerEvent.Type.UP)); + PointerEvent.addPointerEvent(new PointerEvent(screenX, screenY, pointer, PointerEvent.Type.UP, button)); return true; } @@ -142,7 +142,7 @@ public class InputHandler extends InputAdapter { @Override public boolean scrolled(float amountX, float amountY) { - ScrollEvent.addScrollEvent( new ScrollEvent(PointerEvent.lastHoverPos, amountY)); + ScrollEvent.addScrollEvent( new ScrollEvent(PointerEvent.currentHoverPos(), amountY)); return true; } } 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 16f1848fb..4817c610e 100644 --- a/SPD-classes/src/main/java/com/watabou/input/PointerEvent.java +++ b/SPD-classes/src/main/java/com/watabou/input/PointerEvent.java @@ -21,6 +21,7 @@ package com.watabou.input; +import com.badlogic.gdx.Input; import com.watabou.utils.PointF; import com.watabou.utils.Signal; @@ -35,17 +36,29 @@ public class PointerEvent { HOVER } + //buttons + public static final int NONE = -1; + public static final int LEFT = Input.Buttons.LEFT; + public static final int RIGHT = Input.Buttons.RIGHT; + public static final int MIDDLE = Input.Buttons.MIDDLE; + public PointF start; public PointF current; public int id; public Type type; + public int button; public boolean handled; //for hover events, to ensure hover always ends even with overlapping elements - + public PointerEvent( int x, int y, int id, Type type){ + this(x, y, id, type, NONE); + } + + public PointerEvent( int x, int y, int id, Type type, int button){ start = current = new PointF(x, y); this.id = id; this.type = type; handled = false; + this.button = button; } public void update( PointerEvent other ){ @@ -87,7 +100,12 @@ public class PointerEvent { // Accumulated pointer events private static ArrayList pointerEvents = new ArrayList<>(); private static HashMap activePointers = new HashMap<>(); - static PointF lastHoverPos = new PointF(); + + private static PointF lastHoverPos = new PointF(); + + public static PointF currentHoverPos(){ + return lastHoverPos.clone(); + } public static synchronized void addPointerEvent( PointerEvent event ){ pointerEvents.add( event ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Button.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Button.java index ce41284fe..db866454d 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Button.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Button.java @@ -62,7 +62,19 @@ public class Button extends Component { @Override protected void onClick( PointerEvent event ) { if (!processed) { - Button.this.onClick(); + killTooltip(); + switch (event.button){ + case PointerEvent.LEFT: default: + Button.this.onClick(); + break; + case PointerEvent.RIGHT: + Button.this.onRightClick(); + break; + case PointerEvent.MIDDLE: + Button.this.onMiddleClick(); + break; + } + } } @@ -131,7 +143,13 @@ public class Button extends Component { protected void onPointerDown() {} protected void onPointerUp() {} - protected void onClick() {} + protected void onClick() {} //left click, default key type + protected void onRightClick() { + onClick(); + } + protected void onMiddleClick() { + onClick(); + } protected boolean onLongClick() { return false; }