|
|
|
@ -27,27 +27,34 @@ import com.jme3.util.RingBuffer; |
|
|
|
|
*/ |
|
|
|
|
public class AndroidInput extends GLSurfaceView implements TouchInput, |
|
|
|
|
GestureDetector.OnGestureListener, ScaleGestureDetector.OnScaleGestureListener |
|
|
|
|
{ |
|
|
|
|
private final static Logger logger = Logger.getLogger(AndroidInput.class.getName()); |
|
|
|
|
private boolean isInitialized = false; |
|
|
|
|
private RawInputListener listener = null; |
|
|
|
|
|
|
|
|
|
{ |
|
|
|
|
final private static int MAX_EVENTS = 1024; |
|
|
|
|
|
|
|
|
|
// Custom settings
|
|
|
|
|
public boolean mouseEventsEnabled = true; |
|
|
|
|
public boolean mouseEventsInvertY = false; |
|
|
|
|
|
|
|
|
|
public boolean keyboardEventsEnabled = false; |
|
|
|
|
|
|
|
|
|
public boolean dontSendHistory = false; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Used to transfer events from android thread to GLThread
|
|
|
|
|
final private RingBuffer<TouchEvent> eventQueue = new RingBuffer<TouchEvent>(MAX_EVENTS); |
|
|
|
|
final private RingBuffer<TouchEvent> eventPoolUnConsumed = new RingBuffer<TouchEvent>(MAX_EVENTS); |
|
|
|
|
final private RingBuffer<TouchEvent> eventPool = new RingBuffer<TouchEvent>(MAX_EVENTS); |
|
|
|
|
final private HashMap<Integer, Vector2f> lastPositions = new HashMap<Integer, Vector2f>(); |
|
|
|
|
|
|
|
|
|
public boolean fireMouseEvents = true; |
|
|
|
|
public boolean fireKeyboardEvents = false; |
|
|
|
|
public boolean dontSendHistory = false; |
|
|
|
|
|
|
|
|
|
// Internal
|
|
|
|
|
private ScaleGestureDetector scaledetector; |
|
|
|
|
private GestureDetector detector; |
|
|
|
|
private int lastX; |
|
|
|
|
private int lastY; |
|
|
|
|
|
|
|
|
|
private final static Logger logger = Logger.getLogger(AndroidInput.class.getName()); |
|
|
|
|
private boolean isInitialized = false; |
|
|
|
|
private RawInputListener listener = null; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static final int[] ANDROID_TO_JME = { |
|
|
|
|
0x0, // unknown
|
|
|
|
@ -173,8 +180,8 @@ public class AndroidInput extends GLSurfaceView implements TouchInput, |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Fetches a touch event from the reuse pool |
|
|
|
|
* @param wait |
|
|
|
|
* @return |
|
|
|
|
* @param wait if true waits for a reusable event to get available/released by an other thread, if false returns a new one if needed |
|
|
|
|
* @return a usable TouchEvent |
|
|
|
|
*/ |
|
|
|
|
private TouchEvent getNextFreeTouchEvent(boolean wait) |
|
|
|
|
{ |
|
|
|
@ -486,6 +493,7 @@ public class AndroidInput extends GLSurfaceView implements TouchInput, |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// --------------- INSIDE GLThread ---------------
|
|
|
|
|
@Override |
|
|
|
|
public void update() |
|
|
|
|
{ |
|
|
|
@ -511,14 +519,18 @@ public class AndroidInput extends GLSurfaceView implements TouchInput, |
|
|
|
|
{ |
|
|
|
|
listener.onTouchEvent(event); |
|
|
|
|
|
|
|
|
|
if (fireMouseEvents) |
|
|
|
|
if (mouseEventsEnabled) |
|
|
|
|
{ |
|
|
|
|
newX = this.getWidth() - (int) event.getX(); |
|
|
|
|
newY = this.getHeight() - (int) event.getY(); |
|
|
|
|
if (mouseEventsInvertY) |
|
|
|
|
newY = this.getHeight() - (int) event.getY(); |
|
|
|
|
else |
|
|
|
|
newY = (int) event.getY(); |
|
|
|
|
|
|
|
|
|
switch (event.getType()) |
|
|
|
|
{ |
|
|
|
|
case DOWN: |
|
|
|
|
// Handle mouse events
|
|
|
|
|
// Handle mouse down event
|
|
|
|
|
btn = new MouseButtonEvent(0, true, newX, newY); |
|
|
|
|
btn.setTime(event.getTime()); |
|
|
|
|
listener.onMouseButtonEvent(btn); |
|
|
|
@ -528,7 +540,7 @@ public class AndroidInput extends GLSurfaceView implements TouchInput, |
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
case UP: |
|
|
|
|
// Handle mouse events
|
|
|
|
|
// Handle mouse up event
|
|
|
|
|
btn = new MouseButtonEvent(0, false, newX, newY); |
|
|
|
|
btn.setTime(event.getTime()); |
|
|
|
|
listener.onMouseButtonEvent(btn); |
|
|
|
@ -576,8 +588,9 @@ public class AndroidInput extends GLSurfaceView implements TouchInput, |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// --------------- Gesture detected callback events ----------------------------------
|
|
|
|
|
// --------------- ENDOF INSIDE GLThread ---------------
|
|
|
|
|
|
|
|
|
|
// --------------- Gesture detected callback events ---------------
|
|
|
|
|
|
|
|
|
|
public boolean onDown(MotionEvent event) |
|
|
|
|
{ |
|
|
|
@ -694,13 +707,12 @@ public class AndroidInput extends GLSurfaceView implements TouchInput, |
|
|
|
|
@Override |
|
|
|
|
public void setSimulateMouse(boolean simulate) |
|
|
|
|
{ |
|
|
|
|
fireMouseEvents = simulate; |
|
|
|
|
mouseEventsEnabled = simulate; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void setSimulateKeyboard(boolean simulate) |
|
|
|
|
{ |
|
|
|
|
fireKeyboardEvents = simulate; |
|
|
|
|
keyboardEventsEnabled = simulate; |
|
|
|
|
} |
|
|
|
|
@Override |
|
|
|
|
public void setOmitHistoricEvents(boolean dontSendHistory) |
|
|
|
@ -708,4 +720,22 @@ public class AndroidInput extends GLSurfaceView implements TouchInput, |
|
|
|
|
this.dontSendHistory = dontSendHistory; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// TODO: move to TouchInput
|
|
|
|
|
public boolean isMouseEventsEnabled() { |
|
|
|
|
return mouseEventsEnabled; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void setMouseEventsEnabled(boolean mouseEventsEnabled) { |
|
|
|
|
this.mouseEventsEnabled = mouseEventsEnabled; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public boolean isMouseEventsInvertY() { |
|
|
|
|
return mouseEventsInvertY; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void setMouseEventsInvertY(boolean mouseEventsInvertY) { |
|
|
|
|
this.mouseEventsInvertY = mouseEventsInvertY; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|