Project

General

Profile

« Previous | Next » 

Revision 82b0cf8e

Added by Leszek Koltunski over 1 year ago

Move the interaction with touchscreen to the OSInterface

View differences:

build.gradle
22 22
}
23 23

  
24 24
dependencies {
25
    api project(':distorted-library')
26
}
25
    api project(':distorted-library-opengl')
26
}
27

  
src/main/java/org/distorted/objectlib/helpers/OperatingSystemInterface.java
11 11

  
12 12
///////////////////////////////////////////////////////////////////////////////////////////////////
13 13

  
14
import android.view.MotionEvent;
15

  
14 16
public interface OperatingSystemInterface
15 17
  {
16
  int ACTION_DOWN_1 = 1;
17
  int ACTION_UP_1   = 2;
18
  int ACTION_DOWN_2 = 3;
19
  int ACTION_UP_2   = 4;
20
  int ACTION_MOVE   = 5;
18
  int ACTION_DOWN_1 = MotionEvent.ACTION_DOWN;
19
  int ACTION_UP_1   = MotionEvent.ACTION_UP;
20
  int ACTION_DOWN_2 = MotionEvent.ACTION_POINTER_DOWN;
21
  int ACTION_UP_2   = MotionEvent.ACTION_POINTER_UP;
22
  int ACTION_MOVE   = MotionEvent.ACTION_MOVE;
23

  
24
  int INVALID_POINTER_ID = -1;
21 25

  
22 26
  int getScreenDensity();
23
  /*
27

  
24 28
  int getAction();
29
  void up2();
25 30
  boolean isFirstPressed();
26 31
  boolean isSecondPressed();
32
  void pressFirst();
33
  void unpressFirst();
34
  void pressSecond();
35
  void unpressSecond();
27 36
  float getFirstX();
28 37
  float getFirstY();
29 38
  float getSecondX();
30 39
  float getSecondY();
31
   */
32 40
  }
src/main/java/org/distorted/objectlib/main/ObjectControl.java
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

  

Also available in: Unified diff