9 |
9 |
|
10 |
10 |
package org.distorted.objectlib.main;
|
11 |
11 |
|
|
12 |
import static org.distorted.objectlib.helpers.OperatingSystemInterface.*;
|
|
13 |
|
12 |
14 |
import android.content.SharedPreferences;
|
13 |
|
import android.view.MotionEvent;
|
14 |
15 |
|
15 |
16 |
import org.distorted.library.main.QuatHelper;
|
16 |
17 |
import org.distorted.library.type.Static4D;
|
... | ... | |
30 |
31 |
public static final int MAX_QUATS = 60; // Gigaminx: 60 quats group.
|
31 |
32 |
|
32 |
33 |
public static final int NUM_SPEED_PROBES = 10;
|
33 |
|
public static final int INVALID_POINTER_ID = -1;
|
34 |
34 |
|
35 |
35 |
public static final int MODE_ROTATE = 0;
|
36 |
36 |
public static final int MODE_DRAG = 1;
|
... | ... | |
66 |
66 |
private int mFirstIndex, mLastIndex;
|
67 |
67 |
private final int mDensity;
|
68 |
68 |
|
69 |
|
private int mPointer1, mPointer2;
|
|
69 |
// private int mPointer1, mPointer2;
|
70 |
70 |
private float mX1, mY1, mX2, mY2, mX, mY;
|
71 |
71 |
private final boolean mIsAutomatic;
|
72 |
72 |
|
... | ... | |
188 |
188 |
|
189 |
189 |
private void drag(float x, float y)
|
190 |
190 |
{
|
191 |
|
if( mPointer1!=INVALID_POINTER_ID && mPointer2!=INVALID_POINTER_ID)
|
|
191 |
if( mOS.isFirstPressed() && mOS.isSecondPressed() )
|
192 |
192 |
{
|
193 |
193 |
float x2 = (mX2 - mScreenWidth*0.5f)/ mScalingSize;
|
194 |
194 |
float y2 = (mScreenHeight*0.5f - mY2)/ mScalingSize;
|
... | ... | |
312 |
312 |
|
313 |
313 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
314 |
314 |
|
315 |
|
private void prepareDown(MotionEvent event)
|
|
315 |
private void prepareDown()
|
316 |
316 |
{
|
317 |
|
mPointer1 = event.getPointerId(0);
|
318 |
|
mX1 = event.getX() - mMoveX;
|
319 |
|
mY1 = event.getY() + mMoveY;
|
320 |
|
mPointer2 = INVALID_POINTER_ID;
|
|
317 |
mOS.pressFirst();
|
|
318 |
mOS.unpressSecond();
|
|
319 |
|
|
320 |
mX1 = mOS.getFirstX() - mMoveX;
|
|
321 |
mY1 = mOS.getFirstY() + mMoveY;
|
321 |
322 |
}
|
322 |
323 |
|
323 |
324 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
324 |
325 |
|
325 |
|
private void prepareMove(MotionEvent event)
|
|
326 |
private void prepareMove()
|
326 |
327 |
{
|
327 |
|
int index1 = event.findPointerIndex(mPointer1);
|
328 |
|
|
329 |
|
if( index1>=0 )
|
|
328 |
if( mOS.isFirstPressed() )
|
330 |
329 |
{
|
331 |
|
mX1 = event.getX(index1) - mMoveX;
|
332 |
|
mY1 = event.getY(index1) + mMoveY;
|
|
330 |
mX1 = mOS.getFirstX() - mMoveX;
|
|
331 |
mY1 = mOS.getFirstY() + mMoveY;
|
333 |
332 |
}
|
334 |
333 |
|
335 |
|
int index2 = event.findPointerIndex(mPointer2);
|
336 |
|
|
337 |
|
if( index2>=0 )
|
|
334 |
if( mOS.isSecondPressed() )
|
338 |
335 |
{
|
339 |
|
mX2 = event.getX(index2) - mMoveX;
|
340 |
|
mY2 = event.getY(index2) + mMoveY;
|
|
336 |
mX2 = mOS.getSecondX() - mMoveX;
|
|
337 |
mY2 = mOS.getSecondY() + mMoveY;
|
341 |
338 |
}
|
342 |
339 |
}
|
343 |
340 |
|
344 |
341 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
345 |
342 |
|
346 |
|
private void prepareUp(MotionEvent event)
|
|
343 |
private void prepareUp()
|
347 |
344 |
{
|
348 |
|
mPointer1 = INVALID_POINTER_ID;
|
349 |
|
mPointer2 = INVALID_POINTER_ID;
|
|
345 |
mOS.unpressFirst();
|
|
346 |
mOS.unpressSecond();
|
350 |
347 |
}
|
351 |
348 |
|
352 |
349 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
353 |
350 |
|
354 |
|
private void prepareDown2(MotionEvent event)
|
|
351 |
private void prepareDown2()
|
355 |
352 |
{
|
356 |
|
int index = event.getActionIndex();
|
357 |
|
|
358 |
|
if( mPointer1==INVALID_POINTER_ID )
|
|
353 |
if( !mOS.isFirstPressed() )
|
359 |
354 |
{
|
360 |
|
mPointer1 = event.getPointerId(index);
|
361 |
|
mX1 = event.getX(index) - mMoveX;
|
362 |
|
mY1 = event.getY(index) + mMoveY;
|
|
355 |
mOS.pressFirst();
|
|
356 |
mX1 = mOS.getFirstX() - mMoveX;
|
|
357 |
mY1 = mOS.getFirstY() + mMoveY;
|
363 |
358 |
}
|
364 |
|
else if( mPointer2==INVALID_POINTER_ID )
|
|
359 |
else if( !mOS.isSecondPressed() )
|
365 |
360 |
{
|
366 |
|
mPointer2 = event.getPointerId(index);
|
367 |
|
mX2 = event.getX(index) - mMoveX;
|
368 |
|
mY2 = event.getY(index) + mMoveY;
|
|
361 |
mOS.pressSecond();
|
|
362 |
mX2 = mOS.getSecondX() - mMoveX;
|
|
363 |
mY2 = mOS.getSecondY() + mMoveY;
|
369 |
364 |
}
|
370 |
365 |
}
|
371 |
366 |
|
372 |
367 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
373 |
368 |
|
374 |
|
private void prepareUp2(MotionEvent event)
|
|
369 |
private void prepareUp2()
|
375 |
370 |
{
|
376 |
|
int index = event.getActionIndex();
|
377 |
|
|
378 |
|
if( index==event.findPointerIndex(mPointer1) ) mPointer1 = INVALID_POINTER_ID;
|
379 |
|
else if( index==event.findPointerIndex(mPointer2) ) mPointer2 = INVALID_POINTER_ID;
|
|
371 |
mOS.up2();
|
380 |
372 |
}
|
381 |
373 |
|
382 |
374 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
383 |
375 |
|
384 |
376 |
private void actionMove(float x1, float y1, float x2, float y2)
|
385 |
377 |
{
|
386 |
|
float pX = mPointer1 != INVALID_POINTER_ID ? x1 : x2;
|
387 |
|
float pY = mPointer1 != INVALID_POINTER_ID ? y1 : y2;
|
|
378 |
float pX,pY;
|
|
379 |
|
|
380 |
if( mOS.isFirstPressed() ) { pX = x1; pY=y1; }
|
|
381 |
else { pX = x2; pY=y2; }
|
388 |
382 |
|
389 |
383 |
float x = (pX - mScreenWidth*0.5f)/ mScalingSize;
|
390 |
384 |
float y = (mScreenHeight*0.5f -pY)/ mScalingSize;
|
... | ... | |
609 |
603 |
|
610 |
604 |
public void onResume()
|
611 |
605 |
{
|
612 |
|
mPointer1 = INVALID_POINTER_ID;
|
613 |
|
mPointer2 = INVALID_POINTER_ID;
|
|
606 |
mOS.unpressFirst();
|
|
607 |
mOS.unpressSecond();
|
614 |
608 |
|
615 |
609 |
unlock();
|
616 |
610 |
|
... | ... | |
847 |
841 |
|
848 |
842 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
849 |
843 |
|
850 |
|
public boolean onTouchEvent(MotionEvent event, int mode)
|
|
844 |
public boolean onTouchEvent(int mode)
|
851 |
845 |
{
|
852 |
846 |
if( mode!=MODE_NOTHING )
|
853 |
847 |
{
|
... | ... | |
865 |
859 |
else return true;
|
866 |
860 |
}
|
867 |
861 |
|
868 |
|
int action = event.getActionMasked();
|
|
862 |
int action = mOS.getAction();
|
869 |
863 |
|
870 |
864 |
switch(action)
|
871 |
865 |
{
|
872 |
|
case MotionEvent.ACTION_DOWN : prepareDown(event);
|
873 |
|
actionDown(mX1, mY1);
|
874 |
|
break;
|
875 |
|
case MotionEvent.ACTION_MOVE : prepareMove(event);
|
876 |
|
actionMove(mX1, mY1, mX2, mY2);
|
877 |
|
break;
|
878 |
|
case MotionEvent.ACTION_UP : prepareUp(event);
|
879 |
|
actionUp();
|
880 |
|
break;
|
881 |
|
case MotionEvent.ACTION_POINTER_DOWN: prepareDown2(event);
|
882 |
|
actionDown2(mX1, mY1, mX2, mY2);
|
883 |
|
break;
|
884 |
|
case MotionEvent.ACTION_POINTER_UP : prepareUp2(event);
|
885 |
|
boolean p1isUp = mPointer1==INVALID_POINTER_ID;
|
886 |
|
boolean p2isUp = mPointer2==INVALID_POINTER_ID;
|
887 |
|
actionUp2(p1isUp, mX1, mY1, p2isUp, mX2, mY2);
|
888 |
|
break;
|
|
866 |
case ACTION_DOWN_1: prepareDown();
|
|
867 |
actionDown(mX1, mY1);
|
|
868 |
break;
|
|
869 |
case ACTION_MOVE : prepareMove();
|
|
870 |
actionMove(mX1, mY1, mX2, mY2);
|
|
871 |
break;
|
|
872 |
case ACTION_UP_1 : prepareUp();
|
|
873 |
actionUp();
|
|
874 |
break;
|
|
875 |
case ACTION_DOWN_2: prepareDown2();
|
|
876 |
actionDown2(mX1, mY1, mX2, mY2);
|
|
877 |
break;
|
|
878 |
case ACTION_UP_2 : prepareUp2();
|
|
879 |
boolean p1isUp = !mOS.isFirstPressed();
|
|
880 |
boolean p2isUp = !mOS.isSecondPressed();
|
|
881 |
actionUp2(p1isUp, mX1, mY1, p2isUp, mX2, mY2);
|
|
882 |
break;
|
889 |
883 |
}
|
890 |
884 |
}
|
891 |
885 |
|
Move the interaction with touchscreen to the OSInterface