So, my multi-touch control is looking good… until i discover multi-touch is missing from JUCE Android !!
so here you go,
JuceAppActivity.java
[code] private native void handleMouseDown (int id, float x, float y, long time);
private native void handleMouseDrag (int id, float x, float y, long time);
private native void handleMouseUp (int id, float x, float y, long time);
@Override
public boolean onTouchEvent (MotionEvent event)
{
int action = event.getAction();
switch (action & MotionEvent.ACTION_MASK)
{
case MotionEvent.ACTION_DOWN:
{
int id = event.getPointerId(0);
handleMouseDown (id, event.getX(), event.getY(), event.getEventTime());
return true;
}
case MotionEvent.ACTION_MOVE:
{
int n = event.getPointerCount();
for (int i = 0; i < n; ++i)
{
int id = event.getPointerId(i);
handleMouseDrag (id, event.getX(i), event.getY(i), event.getEventTime());
}
return true;
}
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
{
int id = event.getPointerId(0);
handleMouseUp (id, event.getX(), event.getY(), event.getEventTime());
return true;
}
case MotionEvent.ACTION_POINTER_UP:
{
int i = (action & MotionEvent.ACTION_POINTER_INDEX_MASK)
>> MotionEvent.ACTION_POINTER_INDEX_SHIFT;
int id = event.getPointerId(i);
handleMouseUp (id, event.getX(i), event.getY(i), event.getEventTime());
return true;
}
case MotionEvent.ACTION_POINTER_DOWN:
{
int i = (action & MotionEvent.ACTION_POINTER_INDEX_MASK)
>> MotionEvent.ACTION_POINTER_INDEX_SHIFT;
int id = event.getPointerId(i);
handleMouseDown (id, event.getX(i), event.getY(i), event.getEventTime());
return true;
}
default: break;
}
return false;
}[/code]
modules\juce_gui_basics\native\juce_android_Windowing.cpp
[code] static const int maxTouch = 4;
void handleMouseDownCallback (int id, float x, float y, int64 time)
{
lastMousePos.setXY ((int) x, (int) y);
currentModifiers = currentModifiers.withoutMouseButtons();
handleMouseEvent (id, lastMousePos, currentModifiers, time);
currentModifiers = currentModifiers.withoutMouseButtons().withFlags (ModifierKeys::leftButtonModifier);
handleMouseEvent (id, lastMousePos, currentModifiers, time);
}
void handleMouseDragCallback (int id, float x, float y, int64 time)
{
lastMousePos.setXY ((int) x, (int) y);
handleMouseEvent (id, lastMousePos, currentModifiers, time);
}
void handleMouseUpCallback (int id, float x, float y, int64 time)
{
lastMousePos.setXY ((int) x, (int) y);
currentModifiers = currentModifiers.withoutMouseButtons();
handleMouseEvent (id, lastMousePos, currentModifiers, time);
}
…
JUCE_VIEW_CALLBACK (void, handleMouseDown, (JNIEnv* env, jobject view, jint id, jfloat x, jfloat y, jlong time), handleMouseDownCallback (id, (float) x, (float) y, (int64) time))
JUCE_VIEW_CALLBACK (void, handleMouseDrag, (JNIEnv* env, jobject view, jint id, jfloat x, jfloat y, jlong time), handleMouseDragCallback (id, (float) x, (float) y, (int64) time))
JUCE_VIEW_CALLBACK (void, handleMouseUp, (JNIEnv* env, jobject view, jint id, jfloat x, jfloat y, jlong time), handleMouseUpCallback (id, (float) x, (float) y, (int64) time))
[/code]
– hugh.