commit 16b336db75bf1edc0f0f5655168c6cc22c019f1c
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Thu Aug 13 15:00:29 2020 +0100

    Add a 'Scale' seekBar to the MeshFile app.

diff --git a/src/main/java/org/distorted/examples/meshfile/MeshFileActivity.java b/src/main/java/org/distorted/examples/meshfile/MeshFileActivity.java
index 2063ce6..6114581 100644
--- a/src/main/java/org/distorted/examples/meshfile/MeshFileActivity.java
+++ b/src/main/java/org/distorted/examples/meshfile/MeshFileActivity.java
@@ -25,6 +25,7 @@ import android.os.Bundle;
 import android.view.View;
 import android.widget.AdapterView;
 import android.widget.ArrayAdapter;
+import android.widget.SeekBar;
 import android.widget.Spinner;
 import android.widget.TextView;
 
@@ -33,7 +34,7 @@ import org.distorted.library.main.DistortedLibrary;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-public class MeshFileActivity extends Activity implements AdapterView.OnItemSelectedListener
+public class MeshFileActivity extends Activity implements AdapterView.OnItemSelectedListener, SeekBar.OnSeekBarChangeListener
 {
     private int mResource;
     private String[] mNames = new String[] { "deferredjob",
@@ -62,6 +63,10 @@ public class MeshFileActivity extends Activity implements AdapterView.OnItemSele
       ArrayAdapter<String> adapterBitmap = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, mNames);
       adapterBitmap.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
       meshSpinner.setAdapter(adapterBitmap);
+
+      SeekBar barB = findViewById(R.id.meshfileScale);
+      barB.setOnSeekBarChangeListener(this);
+      barB.setProgress(50);
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -145,4 +150,24 @@ public class MeshFileActivity extends Activity implements AdapterView.OnItemSele
     public void onNothingSelected(AdapterView<?> parent)
       {
       }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    public void onProgressChanged(SeekBar bar, int progress, boolean fromUser)
+      {
+      if( bar.getId() == R.id.meshfileScale )
+        {
+        MeshFileSurfaceView view = findViewById(R.id.meshfileSurfaceView);
+        view.getRenderer().setScale(progress);
+        }
+      }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    public void onStartTrackingTouch(SeekBar bar) { }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    public void onStopTrackingTouch(SeekBar bar)  { }
+
 }
diff --git a/src/main/java/org/distorted/examples/meshfile/MeshFileRenderer.java b/src/main/java/org/distorted/examples/meshfile/MeshFileRenderer.java
index 7fb3cc3..c737f80 100644
--- a/src/main/java/org/distorted/examples/meshfile/MeshFileRenderer.java
+++ b/src/main/java/org/distorted/examples/meshfile/MeshFileRenderer.java
@@ -50,6 +50,8 @@ import javax.microedition.khronos.opengles.GL10;
 
 class MeshFileRenderer implements GLSurfaceView.Renderer, DistortedLibrary.ExceptionListener
 {
+    private final float DEFAULT_SCALE = 0.3f;
+
     private GLSurfaceView mView;
     private DistortedTexture mTexture;
     private DistortedScreen mScreen;
@@ -58,6 +60,7 @@ class MeshFileRenderer implements GLSurfaceView.Renderer, DistortedLibrary.Excep
     private long mTime;
     private int mBytes;
     private int mVertices;
+    private float mCurrentScale;
 
     Static4D mQuat1, mQuat2;
     int mScreenMin;
@@ -71,6 +74,8 @@ class MeshFileRenderer implements GLSurfaceView.Renderer, DistortedLibrary.Excep
       mScale= new Static3D(1,1,1);
       Static3D center=new Static3D(0,0,0);
 
+      mCurrentScale = DEFAULT_SCALE;
+
       mQuat1 = new Static4D(0,0,0,1);
       mQuat2 = new Static4D(-0.25189602f,0.3546389f,0.009657208f,0.90038127f);
 
@@ -100,9 +105,8 @@ class MeshFileRenderer implements GLSurfaceView.Renderer, DistortedLibrary.Excep
     
     public void onSurfaceChanged(GL10 glUnused, int width, int height) 
       {
-      final float SCALE = 0.3f;
       mScreenMin = Math.min(width, height);
-      float factor = SCALE*mScreenMin;
+      float factor = mCurrentScale*mScreenMin;
       mScale.set(factor,factor,factor);
       mScreen.resize(width, height);
       }
@@ -123,6 +127,26 @@ class MeshFileRenderer implements GLSurfaceView.Renderer, DistortedLibrary.Excep
       android.util.Log.e("MeshFile", ex.getMessage() );
       }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+//   0 ---> 0
+//  50 ---> DEFAULT_SCALE
+// 100 ---> 4*DEFAULT_SCALE
+
+    void setScale(int scale)
+      {
+      if( scale<= 50 )
+        {
+        mCurrentScale = DEFAULT_SCALE * scale / 50.0f;
+        }
+      else
+        {
+        mCurrentScale = DEFAULT_SCALE * ( 3*(scale/50.0f) - 2.0f);
+        }
+
+      float factor = mCurrentScale*mScreenMin;
+      mScale.set(factor,factor,factor);
+      }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
     void open(int resourceID)
diff --git a/src/main/res/layout/meshfilelayout.xml b/src/main/res/layout/meshfilelayout.xml
index 9b81600..68308d3 100644
--- a/src/main/res/layout/meshfilelayout.xml
+++ b/src/main/res/layout/meshfilelayout.xml
@@ -19,8 +19,7 @@
             android:layout_width="0dp"
             android:layout_height="wrap_content"
             android:layout_weight="0.5"
-            android:id="@+id/meshfileSpinner"
-            />
+            android:id="@+id/meshfileSpinner"/>
 
         <Button
             android:id="@+id/meshfileButton"
@@ -34,6 +33,13 @@
 
     </LinearLayout>
 
+    <SeekBar
+            android:id="@+id/meshfileScale"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingLeft="20dp"
+            android:paddingRight="20dp" />
+
     <LinearLayout
         android:orientation="horizontal"
         android:layout_width="match_parent"
