commit 100e2da7c0ea3fd641185b2a6e2546aa5f21b2a2
Author: Leszek Koltunski <leszek@distoretedandroid.org>
Date:   Wed Nov 2 17:17:26 2016 +0000

    Progress with the 'Flag' test app.

diff --git a/src/main/java/org/distorted/examples/flag/FlagActivity.java b/src/main/java/org/distorted/examples/flag/FlagActivity.java
index 7bea1fd..4237102 100644
--- a/src/main/java/org/distorted/examples/flag/FlagActivity.java
+++ b/src/main/java/org/distorted/examples/flag/FlagActivity.java
@@ -20,24 +20,81 @@
 package org.distorted.examples.flag;
 
 import android.app.Activity;
+import android.opengl.GLSurfaceView;
 import android.os.Bundle;
+import android.widget.SeekBar;
+import android.widget.TextView;
 
+import org.distorted.examples.R;
 import org.distorted.library.Distorted;
+import org.distorted.library.type.Static5D;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-public class FlagActivity extends Activity
+public class FlagActivity extends Activity implements SeekBar.OnSeekBarChangeListener
 {
-    private FlagSurfaceView mView;
+    private SeekBar barAmplitude, barLength, barAngleA, barAngleB;
+    private TextView textAmplitude, textLength, textAngleA, textAngleB;
+    private SeekBar barNoiseAmplitude, barNoiseLength, barNoiseAngleA, barNoiseAngleB;
+    private TextView textNoiseAmplitude, textNoiseLength, textNoiseAngleA, textNoiseAngleB;
 
+    private Static5D noise;
+    private String mStr;
 ///////////////////////////////////////////////////////////////////////////////////////////////////
     
     @Override
     protected void onCreate(Bundle savedState) 
       {
       super.onCreate(savedState);
-      mView = new FlagSurfaceView(this);
-      setContentView(mView);
+      setContentView(R.layout.flaglayout);
+
+      noise = new Static5D(0,0,0,0,0);
+      mStr = new String();
+
+      textAmplitude = (TextView)findViewById(R.id.flagAmplitude);
+      textLength    = (TextView)findViewById(R.id.flagLength);
+      textAngleA    = (TextView)findViewById(R.id.flagAngleA);
+      textAngleB    = (TextView)findViewById(R.id.flagAngleB);
+
+      barAmplitude  = (SeekBar)findViewById(R.id.flagSeekAmplitude);
+      barLength     = (SeekBar)findViewById(R.id.flagSeekLength);
+      barAngleA     = (SeekBar)findViewById(R.id.flagSeekAngleA);
+      barAngleB     = (SeekBar)findViewById(R.id.flagSeekAngleB);
+
+      barAmplitude.setOnSeekBarChangeListener(this);
+      barLength.setOnSeekBarChangeListener(this);
+      barAngleA.setOnSeekBarChangeListener(this);
+      barAngleB.setOnSeekBarChangeListener(this);
+
+      barAmplitude.setProgress(50);
+      barLength.setProgress(50);
+      barAngleA.setProgress(25);
+      barAngleB.setProgress(1);
+
+      textNoiseAmplitude = (TextView)findViewById(R.id.flagNoiseAmplitude);
+      textNoiseLength    = (TextView)findViewById(R.id.flagNoiseLength);
+      textNoiseAngleA    = (TextView)findViewById(R.id.flagNoiseAngleA);
+      textNoiseAngleB    = (TextView)findViewById(R.id.flagNoiseAngleB);
+
+      barNoiseAmplitude  = (SeekBar)findViewById(R.id.flagSeekNoiseAmplitude);
+      barNoiseLength     = (SeekBar)findViewById(R.id.flagSeekNoiseLength);
+      barNoiseAngleA     = (SeekBar)findViewById(R.id.flagSeekNoiseAngleA);
+      barNoiseAngleB     = (SeekBar)findViewById(R.id.flagSeekNoiseAngleB);
+
+      barNoiseAmplitude.setOnSeekBarChangeListener(this);
+      barNoiseLength.setOnSeekBarChangeListener(this);
+      barNoiseAngleA.setOnSeekBarChangeListener(this);
+      barNoiseAngleB.setOnSeekBarChangeListener(this);
+
+      barNoiseAmplitude.setProgress( (int)noise.getX() );
+      barNoiseLength.setProgress   ( (int)noise.getY() );
+      barNoiseAngleA.setProgress   ( (int)noise.getW() );
+      barNoiseAngleB.setProgress   ( (int)noise.getV() );
+
+      textNoiseAmplitude.setText("Noise 0.00");
+      textNoiseLength.setText("Noise 0.00");
+      textNoiseAngleA.setText("Noise 0.00");
+      textNoiseAngleB.setText("Noise 0.00");
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -45,7 +102,9 @@ public class FlagActivity extends Activity
     @Override
     protected void onPause() 
       {
+      GLSurfaceView mView = (GLSurfaceView) this.findViewById(R.id.flagSurfaceView);
       mView.onPause();
+
       super.onPause();
       }
 
@@ -55,6 +114,8 @@ public class FlagActivity extends Activity
     protected void onResume() 
       {
       super.onResume();
+
+      GLSurfaceView mView = (GLSurfaceView) this.findViewById(R.id.flagSurfaceView);
       mView.onResume();
       }
     
@@ -66,4 +127,64 @@ public class FlagActivity extends Activity
       Distorted.onDestroy();  
       super.onDestroy();
       }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    private void convert(int progress)
+      {
+           if( progress==  0 ) mStr="0.00";
+      else if( progress==100 ) mStr="1.00";
+      else if( progress< 10  ) mStr="0.0"+progress;
+      else                     mStr="0."+progress;
+      }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    public void onProgressChanged(SeekBar bar, int progress, boolean fromUser)
+      {
+      switch (bar.getId())
+        {
+        case R.id.flagSeekAmplitude     : FlagRenderer.setAmplitude(progress);
+                                          textAmplitude.setText("Amplitude "+progress);
+                                          break;
+        case R.id.flagSeekNoiseAmplitude: noise.set( (float)progress, noise.getY(), noise.getZ(), noise.getW(), noise.getV() );
+                                          FlagRenderer.setNoise(noise);
+                                          convert(progress);
+                                          textNoiseAmplitude.setText("Noise "+mStr );
+                                          break;
+        case R.id.flagSeekLength        : FlagRenderer.setLength(progress);
+                                          textLength.setText("Length "+(progress*2));
+                                          break;
+        case R.id.flagSeekNoiseLength   : noise.set( noise.getX(), (float)progress, noise.getZ(), noise.getW(), noise.getV() );
+                                          FlagRenderer.setNoise(noise);
+                                          convert(progress);
+                                          textNoiseLength.setText("Noise "+mStr );
+                                          break;
+        case R.id.flagSeekAngleA        : FlagRenderer.setAngleA(progress);
+                                          textAngleA.setText("Alpha "+((360*progress)/100));
+                                          break;
+        case R.id.flagSeekNoiseAngleA   : noise.set( noise.getX(), noise.getY(), noise.getZ() ,(float)progress, noise.getV() );
+                                          FlagRenderer.setNoise(noise);
+                                          convert(progress);
+                                          textNoiseAngleA.setText("Noise "+mStr );
+                                          break;
+        case R.id.flagSeekAngleB        : FlagRenderer.setAngleB(progress);
+                                          textAngleB.setText("Beta "+((360*progress)/100));
+                                          break;
+        case R.id.flagSeekNoiseAngleB   : noise.set( noise.getX(), noise.getY(), noise.getZ(), noise.getW(), (float)progress );
+                                          FlagRenderer.setNoise(noise);
+                                          convert(progress);
+                                          textNoiseAngleB.setText("Noise "+mStr );
+                                          break;
+        }
+      }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    public void onStartTrackingTouch(SeekBar bar) { }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    public void onStopTrackingTouch(SeekBar bar)  { }
+
 }
diff --git a/src/main/java/org/distorted/examples/flag/FlagRenderer.java b/src/main/java/org/distorted/examples/flag/FlagRenderer.java
index 43a2ce8..8894ff2 100644
--- a/src/main/java/org/distorted/examples/flag/FlagRenderer.java
+++ b/src/main/java/org/distorted/examples/flag/FlagRenderer.java
@@ -93,7 +93,42 @@ class FlagRenderer implements GLSurfaceView.Renderer
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
-   
+
+    public static void setAmplitude(int a)
+      {
+
+      }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    public static void setLength(int l)
+      {
+
+      }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    public static void setAngleA(int a)
+      {
+
+      }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    public static void setAngleB(int b)
+      {
+
+      }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    public static void setNoise(Static5D noise)
+      {
+
+      }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
     public void onDrawFrame(GL10 glUnused) 
       {
       GLES20.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
diff --git a/src/main/java/org/distorted/examples/flag/FlagSurfaceView.java b/src/main/java/org/distorted/examples/flag/FlagSurfaceView.java
index a9a606b..c0e90d0 100644
--- a/src/main/java/org/distorted/examples/flag/FlagSurfaceView.java
+++ b/src/main/java/org/distorted/examples/flag/FlagSurfaceView.java
@@ -22,10 +22,8 @@ package org.distorted.examples.flag;
 import android.content.Context;
 import android.opengl.GLSurfaceView;
 import android.os.Build;
+import android.util.AttributeSet;
 import android.view.MotionEvent;
-import android.widget.Toast;
-
-import org.distorted.examples.R;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -36,9 +34,9 @@ class FlagSurfaceView extends GLSurfaceView
 	
 ///////////////////////////////////////////////////////////////////////////////////////////////////
    
-    public FlagSurfaceView(Context c)
+    public FlagSurfaceView(Context c, AttributeSet attrs)
       {
-      super(c);
+      super(c,attrs);
     
       mX = -1;
       mY = -1;
@@ -55,8 +53,6 @@ class FlagSurfaceView extends GLSurfaceView
         mRenderer = new FlagRenderer(this);
         
         setRenderer(mRenderer);
-        
-        Toast.makeText(c, R.string.example_rotate_toast , Toast.LENGTH_SHORT).show();
         }
       }
     
diff --git a/src/main/java/org/distorted/examples/girl/GirlActivity.java b/src/main/java/org/distorted/examples/girl/GirlActivity.java
index 660b6d9..8fe9eb8 100644
--- a/src/main/java/org/distorted/examples/girl/GirlActivity.java
+++ b/src/main/java/org/distorted/examples/girl/GirlActivity.java
@@ -60,7 +60,7 @@ public class GirlActivity extends Activity  implements OnSeekBarChangeListener
       barSwing.setProgress(0);
       barSize.setProgress(50);
       barHips.setProgress(0);
-      
+
       textSwing.setText("Swing: 0");
       textSize.setText("Size: 1.0");
       textHips.setText("Hips: 0");
@@ -107,25 +107,24 @@ public class GirlActivity extends Activity  implements OnSeekBarChangeListener
       switch (bar.getId()) 
         {
         case R.id.girlSeekSwing: v = progress/5;
-                             GirlRenderer.setSwing(v);
-                             textSwing.setText("Swing: "+v);
-                             break;
+                                 GirlRenderer.setSwing(v);
+                                 textSwing.setText("Swing: "+v);
+                                 break;
         case R.id.girlSeekSize : if( progress> 50)
-                               {
-                            s = (progress-50)/16.0f + 1.0f;
-                               }
-                             else
-                               {
-                            s = 0.015f*progress + 0.25f;
-                               }
-                             GirlRenderer.setSize(s);
-                             textSize.setText("Size: "+(((int)(s*10))/10.0f));
-                             break;     
+                                   {
+                                   s = (progress-50)/16.0f + 1.0f;
+                                   }
+                                 else
+                                   {
+                                   s = 0.015f*progress + 0.25f;
+                                   }
+                                 GirlRenderer.setSize(s);
+                                 textSize.setText("Size: "+(((int)(s*10))/10.0f));
+                                 break;
         case R.id.girlSeekHips : v = progress/5;
-                             GirlRenderer.setHips(v);
-                             textHips.setText("Hips: "+v);
-                             break;
-        
+                                 GirlRenderer.setHips(v);
+                                 textHips.setText("Hips: "+v);
+                                 break;
         }
       }
 
diff --git a/src/main/res/layout/flaglayout.xml b/src/main/res/layout/flaglayout.xml
new file mode 100644
index 0000000..f9ce500
--- /dev/null
+++ b/src/main/res/layout/flaglayout.xml
@@ -0,0 +1,185 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+              android:layout_width="fill_parent"
+              android:layout_height="fill_parent"
+              android:orientation="vertical" >
+
+    <org.distorted.examples.flag.FlagSurfaceView
+        android:id="@+id/flagSurfaceView"
+        android:layout_width="fill_parent"
+        android:layout_height="0dp"
+        android:layout_weight="0.85" />
+
+    <TableLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:paddingLeft="10dp"
+        android:paddingRight="10dp" >
+
+        <TableRow
+            android:id="@+id/tableRow1"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:paddingBottom="5dp"
+            android:paddingTop="5dp" >
+
+            <TextView
+                android:id="@+id/flagAmplitude"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:gravity="center_vertical|center"
+                android:text="@string/amplitude"
+                android:textAppearance="?android:attr/textAppearanceMedium" />
+
+            <SeekBar
+                android:id="@+id/flagSeekAmplitude"
+                android:layout_width="105dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:paddingLeft="15dp"
+                android:paddingRight="10dp" />
+
+            <TextView
+                android:id="@+id/flagNoiseAmplitude"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:gravity="center_vertical|center"
+                android:text="@string/noise"
+                android:textAppearance="?android:attr/textAppearanceMedium" />
+
+            <SeekBar
+                android:id="@+id/flagSeekNoiseAmplitude"
+                android:layout_width="105dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:paddingLeft="15dp"
+                android:paddingRight="10dp" />
+
+        </TableRow>
+
+        <TableRow
+            android:id="@+id/tableRow2"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:paddingBottom="5dp"
+            android:paddingTop="5dp" >
+
+            <TextView
+                android:id="@+id/flagLength"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:gravity="center_vertical|center"
+                android:text="@string/length"
+                android:textAppearance="?android:attr/textAppearanceMedium" />
+
+            <SeekBar
+                android:id="@+id/flagSeekLength"
+                android:layout_width="106dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:paddingLeft="15dp"
+                android:paddingRight="10dp" />
+
+            <TextView
+                android:id="@+id/flagNoiseLength"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:gravity="center_vertical|center"
+                android:text="@string/noise"
+                android:textAppearance="?android:attr/textAppearanceMedium" />
+
+            <SeekBar
+                android:id="@+id/flagSeekNoiseLength"
+                android:layout_width="106dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:paddingLeft="15dp"
+                android:paddingRight="10dp" />
+
+        </TableRow>
+
+        <TableRow
+            android:id="@+id/tableRow3"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:paddingBottom="5dp"
+            android:paddingTop="5dp" >
+
+            <TextView
+                android:id="@+id/flagAngleA"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:gravity="center_vertical|center"
+                android:text="@string/angleA"
+                android:textAppearance="?android:attr/textAppearanceMedium" />
+
+            <SeekBar
+                android:id="@+id/flagSeekAngleA"
+                android:layout_width="105dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:paddingLeft="15dp"
+                android:paddingRight="10dp" />
+
+            <TextView
+                android:id="@+id/flagNoiseAngleA"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:gravity="center_vertical|center"
+                android:text="@string/noise"
+                android:textAppearance="?android:attr/textAppearanceMedium" />
+
+            <SeekBar
+                android:id="@+id/flagSeekNoiseAngleA"
+                android:layout_width="105dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:paddingLeft="15dp"
+                android:paddingRight="10dp" />
+
+        </TableRow>
+
+        <TableRow
+            android:id="@+id/tableRow4"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:paddingBottom="5dp"
+            android:paddingTop="5dp" >
+
+            <TextView
+                android:id="@+id/flagAngleB"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:gravity="center_vertical|center"
+                android:text="@string/angleB"
+                android:textAppearance="?android:attr/textAppearanceMedium" />
+
+            <SeekBar
+                android:id="@+id/flagSeekAngleB"
+                android:layout_width="105dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:paddingLeft="15dp"
+                android:paddingRight="10dp" />
+
+            <TextView
+                android:id="@+id/flagNoiseAngleB"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:gravity="center_vertical|center"
+                android:text="@string/noise"
+                android:textAppearance="?android:attr/textAppearanceMedium" />
+
+            <SeekBar
+                android:id="@+id/flagSeekNoiseAngleB"
+                android:layout_width="105dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:paddingLeft="15dp"
+                android:paddingRight="10dp" />
+
+        </TableRow>
+
+    </TableLayout>
+
+</LinearLayout>
diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml
index eb390c6..72c765f 100644
--- a/src/main/res/values/strings.xml
+++ b/src/main/res/values/strings.xml
@@ -53,6 +53,10 @@
     <string name="Bitmap">Bitmap</string>
     <string name="Add">Add</string>
     <string name="RemoveAll">Remove All</string>
+    <string name="amplitude">Amplitude</string>
+    <string name="length">Length</string>
+    <string name="angleA">Alpha</string>
+    <string name="angleB">Beta</string>
 
     <string name="example_monalisa">Mona Lisa</string>  
     <string name="example_monalisa_subtitle">The basics of Distortions.</string>
