commit f6bf4e7784b786e40fb98e398b8a76668e67a8e1
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Sat Apr 30 11:45:50 2022 +0200

    Bandaged Creator: add support for two-fingered rescaling.

diff --git a/src/main/java/org/distorted/bandaged/BandagedCreatorRenderer.java b/src/main/java/org/distorted/bandaged/BandagedCreatorRenderer.java
index a6b70869..24d4c79f 100644
--- a/src/main/java/org/distorted/bandaged/BandagedCreatorRenderer.java
+++ b/src/main/java/org/distorted/bandaged/BandagedCreatorRenderer.java
@@ -61,7 +61,9 @@ public class BandagedCreatorRenderer implements GLSurfaceView.Renderer, Distorte
 {
    public static final float BRIGHTNESS = 0.333f;
    private static final int RESET_DURATION = 1000;
-   static final float SCREEN_RATIO = 0.5f;
+   private static final float MAX_SIZE_CHANGE = 1.70f;
+   private static final float MIN_SIZE_CHANGE = 0.50f;
+   private static final float INIT_RATIO = 0.5f;
 
    private final BandagedCreatorView mView;
    private final DistortedScreen mScreen;
@@ -72,16 +74,16 @@ public class BandagedCreatorRenderer implements GLSurfaceView.Renderer, Distorte
    private BandagedCubit[] mCubits;
    private boolean mInitialPhase;
    private long mStartTime;
-   private float mScaleValue;
    private float mQuatX, mQuatY, mQuatZ, mQuatW;
    private int mX, mY, mZ, mNumCubits;
-   private boolean mResetQuats, mSetQuatT, mResettingObject, mConnectingCubits, mCreatingCubits;
+   private boolean mResetQuats, mSetQuatT, mResettingObject, mConnectingCubits, mCreatingCubits, mRescaling;
    private int mIndex1, mIndex2;
    private int mSaveIcon;
    private DistortedFramebuffer mFramebuffer;
    private String mPath;
    private boolean mCubitsCreated;
    private int mWidth, mHeight;
+   private float mScaleValue, mObjectScreenRatio;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -98,7 +100,9 @@ public class BandagedCreatorRenderer implements GLSurfaceView.Renderer, Distorte
      mConnectingCubits = false;
      mCubitsCreated    = false;
      mCreatingCubits   = false;
+     mRescaling        = false;
 
+     mObjectScreenRatio= INIT_RATIO;
      mSaveIcon = -1;
      mObjSize  = new int[3];
 
@@ -260,6 +264,15 @@ public class BandagedCreatorRenderer implements GLSurfaceView.Renderer, Distorte
            }
          }
        }
+
+     if( mRescaling )
+       {
+       mRescaling = false;
+       rescaleObject();
+       for(int i=0; i<mNumCubits; i++) mCubits[i].scaleMove(mScaleValue);
+       BandagedCreatorTouchControl control = mView.getTouchControl();
+       control.setObjectRatio(mObjectScreenRatio);
+       }
      }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -538,14 +551,31 @@ public class BandagedCreatorRenderer implements GLSurfaceView.Renderer, Distorte
      mSaveIcon = -1;
      }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+   void mulObjectRatio(float ratio)
+     {
+     mObjectScreenRatio *= ratio;
+
+     if( mObjectScreenRatio>MAX_SIZE_CHANGE*INIT_RATIO) mObjectScreenRatio = MAX_SIZE_CHANGE*INIT_RATIO;
+     if( mObjectScreenRatio<MIN_SIZE_CHANGE*INIT_RATIO) mObjectScreenRatio = MIN_SIZE_CHANGE*INIT_RATIO;
+
+     mRescaling = true;
+     }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+   float getObjectRatio()
+     {
+     return mObjectScreenRatio;
+     }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
    private void rescaleObject()
      {
-     //final int min = mX<mY ? Math.min(mX, mZ) : Math.min(mY, mZ);
-     //final int size= (mX+mY+mZ-min)/2;
      final int size = mX>mY ? Math.max(mX, mZ) : Math.max(mY, mZ);
-     final float Q = SCREEN_RATIO/size;
+     final float Q = mObjectScreenRatio/size;
      mScaleValue = mWidth<mHeight ? Q*mWidth : Q*mHeight;
      mScale.set( mScaleValue,mScaleValue,mScaleValue );
      }
diff --git a/src/main/java/org/distorted/bandaged/BandagedCreatorView.java b/src/main/java/org/distorted/bandaged/BandagedCreatorView.java
index ca3d6847..cc208eb2 100644
--- a/src/main/java/org/distorted/bandaged/BandagedCreatorView.java
+++ b/src/main/java/org/distorted/bandaged/BandagedCreatorView.java
@@ -65,7 +65,7 @@ public class BandagedCreatorView extends GLSurfaceView
         BandagedCreatorActivity act = (BandagedCreatorActivity)context;
         mRenderer = new BandagedCreatorRenderer(this);
         DistortedScreen screen = mRenderer.getScreen();
-        mTouchControl = new BandagedCreatorTouchControl(BandagedCreatorRenderer.SCREEN_RATIO, screen.getFOV() );
+        mTouchControl = new BandagedCreatorTouchControl( mRenderer.getObjectRatio() , screen.getFOV() );
 
         final ActivityManager activityManager= (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
 
@@ -102,6 +102,13 @@ public class BandagedCreatorView extends GLSurfaceView
       return mTouchedIndex1;
       }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    public BandagedCreatorTouchControl getTouchControl()
+      {
+      return mTouchControl;
+      }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
     public BandagedCreatorRenderer getRenderer()
@@ -214,13 +221,10 @@ public class BandagedCreatorView extends GLSurfaceView
         mRenderer.resetQuats();
         mRotAngle = angleNow;
 
-/*
-        float distNow  = (float)Math.sqrt( (x-x2)*(x-x2) + (y-y2)*(y-y2) );
+        float distNow  = (float)Math.sqrt( (mX1-mX2)*(mX1-mX2) + (mY1-mY2)*(mY1-mY2) );
         float distQuot = mInitDistance<0 ? 1.0f : distNow/ mInitDistance;
         mInitDistance = distNow;
-        TwistyObject object = mPreRender.getObject();
-        if( object!=null ) object.setObjectRatio(distQuot, mObjectNode.getMinSize() );
- */
+        mRenderer.mulObjectRatio(distQuot);
         }
       else
         {
