commit d1484abac201bf99f4309033cc1e4e15c2b8edb2
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Wed Apr 10 00:50:00 2019 +0100

    App: some progress changing to cube size.

diff --git a/.gitignore b/.gitignore
index 796b96d1..4169be3d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
 /build
+distorted-cube.iml
diff --git a/src/main/java/org/distorted/magic/RubikRenderer.java b/src/main/java/org/distorted/magic/RubikRenderer.java
index 8f2cb935..6a5c8134 100644
--- a/src/main/java/org/distorted/magic/RubikRenderer.java
+++ b/src/main/java/org/distorted/magic/RubikRenderer.java
@@ -49,6 +49,8 @@ class RubikRenderer implements GLSurfaceView.Renderer, EffectListener
     private boolean mCanRotate;
     private RubikCube mCube;
 
+    private int mScreenWidth, mScreenHeight;
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
     RubikRenderer(RubikSurfaceView v)
@@ -62,6 +64,8 @@ class RubikRenderer implements GLSurfaceView.Renderer, EffectListener
       mQuatCurrent     = new Static4D(0,0,0,1);
       mQuatAccumulated = initializeQuat();
 
+      mScreenWidth = mScreenHeight = 0;
+
       mMove  = new Static3D(0,0,0);
       mScale = new Static3D(1,1,1);
 
@@ -129,15 +133,12 @@ class RubikRenderer implements GLSurfaceView.Renderer, EffectListener
       mScreen.setProjection( fovInDegrees, 0.1f);
       mView.setScreenSize(width,height);
       mView.setCameraDist(cameraDistance);
+      mScreen.resize(width, height);
 
-      mCubeSizeInScreenSpace = CUBE_SCREEN_RATIO*(width>height ? height:width);
-      float texSize = mCube.getTextureSize();
-      float scaleFactor = mCubeSizeInScreenSpace/(texSize*mCube.getSize());
-
-      mMove.set( (width-scaleFactor*texSize)/2 , (height-scaleFactor*texSize)/2 , -scaleFactor*texSize/2 );
-      mScale.set(scaleFactor,scaleFactor,scaleFactor);
+      recomputeScaleFactor(width,height);
 
-      mScreen.resize(width, height);
+      mScreenHeight = height;
+      mScreenWidth  = width;
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -184,16 +185,31 @@ class RubikRenderer implements GLSurfaceView.Renderer, EffectListener
 
      if( oldSize!=newSize )
        {
-       if( mCube!=null )
+       mCube = new RubikCube(newSize, mMove, mScale, mQuatCurrent, mQuatAccumulated);
+       mCube.createTexture();
+
+       if( mScreenWidth!=0 )
          {
-         mScreen.detachAll();
+         recomputeScaleFactor(mScreenWidth,mScreenHeight);
          }
 
-       mCube = new RubikCube(newSize, mMove, mScale, mQuatCurrent, mQuatAccumulated);
+       mScreen.detachAll();
        mCube.attachToScreen(mScreen);
        }
      }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+   void recomputeScaleFactor(int screenWidth, int screenHeight)
+     {
+     mCubeSizeInScreenSpace = CUBE_SCREEN_RATIO*(screenWidth>screenHeight ? screenHeight:screenWidth);
+     float texSize = mCube.getTextureSize();
+     float scaleFactor = mCubeSizeInScreenSpace/(texSize*mCube.getSize());
+
+     mMove.set( (screenWidth-scaleFactor*texSize)/2 , (screenHeight-scaleFactor*texSize)/2 , -scaleFactor*texSize/2 );
+     mScale.set(scaleFactor,scaleFactor,scaleFactor);
+     }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
    void scrambleCube()
diff --git a/src/main/java/org/distorted/magic/RubikSurfaceView.java b/src/main/java/org/distorted/magic/RubikSurfaceView.java
index 6b68eb7b..0c2c2d69 100644
--- a/src/main/java/org/distorted/magic/RubikSurfaceView.java
+++ b/src/main/java/org/distorted/magic/RubikSurfaceView.java
@@ -55,7 +55,6 @@ class RubikSurfaceView extends GLSurfaceView
     private Static4D mQuatCurrent, mQuatAccumulated;
     private int mRotationVect;
     private RubikRenderer mRenderer;
-    private RubikCube mCube;
 
     private float[] mPoint, mCamera, mTouchPointCastOntoFace, mDiff, mTouchPoint; // all in screen space
     private int mLastTouchedFace;
@@ -82,7 +81,6 @@ class RubikSurfaceView extends GLSurfaceView
 
         mRenderer = new RubikRenderer(this);
         mRenderer.createCube(RubikActivity.DEFAULT_SIZE);
-        mCube = mRenderer.getCube();
 
         mQuatCurrent     = new Static4D(0,0,0,1);
         mQuatAccumulated = mRenderer.initializeQuat();
@@ -241,7 +239,7 @@ class RubikSurfaceView extends GLSurfaceView
       mTouchPoint[1] = mPoint[1];
       mTouchPoint[2] = mPoint[2];
 
-      mCube.addNewRotation(mRotationVect,offset);
+      mRenderer.getCube().addNewRotation(mRotationVect,offset);
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -266,7 +264,7 @@ class RubikSurfaceView extends GLSurfaceView
       int sign = retFaceRotationSign(mLastTouchedFace);
       float angle = (mRotationVect==xAxis ? mDiff[yAxis] : -mDiff[xAxis]);
 
-      mCube.continueRotation(SWIPING_SENSITIVITY*sign*angle/mScreenMin);
+      mRenderer.getCube().continueRotation(SWIPING_SENSITIVITY*sign*angle/mScreenMin);
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
