Project

General

Profile

Download (19.4 KB) Statistics
| Branch: | Revision:

examples / src / main / java / org / distorted / examples / effects3d / Effects3DActivity.java @ cdc515b9

1 08f92d82 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2016 Leszek Koltunski                                                               //
3
//                                                                                               //
4
// This file is part of Distorted.                                                               //
5
//                                                                                               //
6
// Distorted is free software: you can redistribute it and/or modify                             //
7
// it under the terms of the GNU General Public License as published by                          //
8
// the Free Software Foundation, either version 2 of the License, or                             //
9
// (at your option) any later version.                                                           //
10
//                                                                                               //
11
// Distorted is distributed in the hope that it will be useful,                                  //
12
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                //
13
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                 //
14
// GNU General Public License for more details.                                                  //
15
//                                                                                               //
16
// You should have received a copy of the GNU General Public License                             //
17
// along with Distorted.  If not, see <http://www.gnu.org/licenses/>.                            //
18
///////////////////////////////////////////////////////////////////////////////////////////////////
19
20 76a81b6a Leszek Koltunski
package org.distorted.examples.effects3d;
21 08f92d82 Leszek Koltunski
22
import android.app.Activity;
23 9167cfd4 Leszek Koltunski
import android.graphics.Bitmap;
24
import android.graphics.BitmapFactory;
25
import android.graphics.Canvas;
26
import android.graphics.Paint;
27 08f92d82 Leszek Koltunski
import android.opengl.GLSurfaceView;
28
import android.os.Bundle;
29 d40cfeb2 Leszek Koltunski
import android.view.Gravity;
30 08f92d82 Leszek Koltunski
import android.view.View;
31 50ac40a6 Leszek Koltunski
import android.widget.AdapterView;
32
import android.widget.ArrayAdapter;
33 d40cfeb2 Leszek Koltunski
import android.widget.Button;
34 08f92d82 Leszek Koltunski
import android.widget.LinearLayout;
35 d40cfeb2 Leszek Koltunski
import android.widget.NumberPicker;
36 50ac40a6 Leszek Koltunski
import android.widget.Spinner;
37 d40cfeb2 Leszek Koltunski
import android.widget.TableRow;
38 08f92d82 Leszek Koltunski
39
import org.distorted.examples.R;
40
import org.distorted.library.Distorted;
41 50ac40a6 Leszek Koltunski
import org.distorted.library.DistortedBitmap;
42
import org.distorted.library.DistortedCubes;
43
import org.distorted.library.DistortedObject;
44 08f92d82 Leszek Koltunski
import org.distorted.library.EffectNames;
45 56cbe1cf Leszek Koltunski
import org.distorted.library.EffectTypes;
46
47 9167cfd4 Leszek Koltunski
import java.io.IOException;
48
import java.io.InputStream;
49 56cbe1cf Leszek Koltunski
import java.util.ArrayList;
50 08f92d82 Leszek Koltunski
51
///////////////////////////////////////////////////////////////////////////////////////////////////
52
53 76a81b6a Leszek Koltunski
public class Effects3DActivity extends Activity
54 56cbe1cf Leszek Koltunski
                              implements View.OnClickListener,
55 50ac40a6 Leszek Koltunski
                                         AdapterView.OnItemSelectedListener
56 d40cfeb2 Leszek Koltunski
  {
57 50ac40a6 Leszek Koltunski
  private static final int COLOR_OFF = 0xffffe81f;
58
  private static final int COLOR_ON  = 0xff0000ff;
59
60 d40cfeb2 Leszek Koltunski
  private boolean firstScreen;
61
62
  // fields needed for the first 'pick-a-shape' screen
63
  //
64 56cbe1cf Leszek Koltunski
  private int mNumCols = 10;
65
  private int mNumRows = 10;
66 d40cfeb2 Leszek Koltunski
  private NumberPicker mColsPicker, mRowsPicker;
67 50ac40a6 Leszek Koltunski
  private boolean[] mShape;
68 bcc8e016 Leszek Koltunski
  private DistortedObject mObject;
69
  private int mObjectType;
70 cdc515b9 Leszek Koltunski
  private int mBitmapID;
71
  private Bitmap mBitmap;
72 d40cfeb2 Leszek Koltunski
73 76a81b6a Leszek Koltunski
  private ArrayList<Effects3DEffect> mEffects;
74 56cbe1cf Leszek Koltunski
  private int mEffectAdd;
75 334c13fa Leszek Koltunski
  private float mCenterX, mCenterY, mCenterZ;
76 6f779cd4 Leszek Koltunski
  private float mRegionX, mRegionY, mRegionR;
77 50ac40a6 Leszek Koltunski
78 8fd9f5fa Leszek Koltunski
  private EffectNames[] mEffectNames;
79 24991bc2 Leszek Koltunski
80 47833473 Leszek Koltunski
  private static boolean mSupportsRegion;
81 4d5b37fe Leszek Koltunski
  private static boolean mSupportsCenter;
82 24991bc2 Leszek Koltunski
83 08f92d82 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
84 56cbe1cf Leszek Koltunski
85 d40cfeb2 Leszek Koltunski
  @Override
86
  protected void onCreate(Bundle savedState)
87
    {
88
    super.onCreate(savedState);
89
90 56cbe1cf Leszek Koltunski
    mEffects = new ArrayList<>();
91
92 8fd9f5fa Leszek Koltunski
    createEffectNames();
93
94 50ac40a6 Leszek Koltunski
    setContentView(R.layout.objectpickerlayout);
95 d40cfeb2 Leszek Koltunski
96 50ac40a6 Leszek Koltunski
    mColsPicker = (NumberPicker)findViewById(R.id.objectpicker_cols);
97
    mRowsPicker = (NumberPicker)findViewById(R.id.objectpicker_rows);
98 d40cfeb2 Leszek Koltunski
99 9758b1ec Leszek Koltunski
    mColsPicker.setMaxValue(40);
100 d40cfeb2 Leszek Koltunski
    mColsPicker.setMinValue( 0);
101 9758b1ec Leszek Koltunski
    mRowsPicker.setMaxValue(40);
102 d40cfeb2 Leszek Koltunski
    mRowsPicker.setMinValue( 0);
103
104
    mColsPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener()
105 08f92d82 Leszek Koltunski
      {
106 d40cfeb2 Leszek Koltunski
      @Override
107
      public void onValueChange(NumberPicker picker, int oldVal, int newVal)
108
        {
109 bcc8e016 Leszek Koltunski
        mNumCols = mColsPicker.getValue();
110 d40cfeb2 Leszek Koltunski
        }
111
      });
112
113
    mRowsPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener()
114
      {
115
      @Override
116
      public void onValueChange(NumberPicker picker, int oldVal, int newVal)
117
        {
118 bcc8e016 Leszek Koltunski
        mNumRows = mRowsPicker.getValue();
119 d40cfeb2 Leszek Koltunski
        }
120
      });
121
122
    firstScreen = true;
123
124 50ac40a6 Leszek Koltunski
    mObjectType = 0;
125 d40cfeb2 Leszek Koltunski
126 50ac40a6 Leszek Koltunski
    Spinner typeSpinner  = (Spinner)findViewById(R.id.objectpicker_spinnerType);
127
    typeSpinner.setOnItemSelectedListener(this);
128 d40cfeb2 Leszek Koltunski
129 50ac40a6 Leszek Koltunski
    String[] objectType = new String[] {"DistortedCubes", "DistortedBitmap"};
130 d40cfeb2 Leszek Koltunski
131 bcc8e016 Leszek Koltunski
    ArrayAdapter<String> adapterType = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, objectType);
132
    adapterType.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
133
    typeSpinner.setAdapter(adapterType);
134
135
    Spinner bitmapSpinner  = (Spinner)findViewById(R.id.objectpicker_spinnerBitmap);
136
    bitmapSpinner.setOnItemSelectedListener(this);
137
138 cdc515b9 Leszek Koltunski
    String[] objectBitmap = new String[] { "Grid", "Girl", "Dog", "Cat", "Squares", "Bean", "Lisa"};
139 bcc8e016 Leszek Koltunski
140
    ArrayAdapter<String> adapterBitmap = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, objectBitmap);
141
    adapterBitmap.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
142
    bitmapSpinner.setAdapter(adapterBitmap);
143 d40cfeb2 Leszek Koltunski
    }
144
145 8fd9f5fa Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
146
147
  private void createEffectNames()
148
    {
149 76a81b6a Leszek Koltunski
    EffectTypes type1 = EffectTypes.FRAGMENT;
150
    EffectTypes type2 = EffectTypes.VERTEX;
151
152 8fd9f5fa Leszek Koltunski
    EffectNames[] names = EffectNames.values();
153
154 76a81b6a Leszek Koltunski
    int numEffects=0;
155 8fd9f5fa Leszek Koltunski
156
    for(int i=0; i<names.length; i++)
157 76a81b6a Leszek Koltunski
      if( names[i].getType() == type1 || names[i].getType() == type2 ) numEffects++;
158 8fd9f5fa Leszek Koltunski
159 76a81b6a Leszek Koltunski
    mEffectNames = new EffectNames[numEffects];
160 8fd9f5fa Leszek Koltunski
161 76a81b6a Leszek Koltunski
    numEffects=0;
162 8fd9f5fa Leszek Koltunski
163
    for(int i=0; i<names.length; i++)
164 76a81b6a Leszek Koltunski
      if( names[i].getType() == type1 || names[i].getType() == type2 )
165 8fd9f5fa Leszek Koltunski
        {
166 76a81b6a Leszek Koltunski
        mEffectNames[numEffects++] = names[i];
167 8fd9f5fa Leszek Koltunski
        }
168
    }
169
170 d40cfeb2 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
171
172 50ac40a6 Leszek Koltunski
  private void setGrid()
173 d40cfeb2 Leszek Koltunski
    {
174 56cbe1cf Leszek Koltunski
    LinearLayout lay = (LinearLayout)findViewById(R.id.objectpicker_buttongrid);
175 d40cfeb2 Leszek Koltunski
176 56cbe1cf Leszek Koltunski
    int width = lay.getWidth();
177
    int height= lay.getHeight();
178 57ba16f3 Leszek Koltunski
    int w = mNumCols>0 ? (int)( 0.9f*width / mNumCols) : 0;
179
    int h = mNumRows>0 ? (int)( 0.9f*height/ mNumRows) : 0;
180 d40cfeb2 Leszek Koltunski
    int size= w<h ? w:h;
181 57ba16f3 Leszek Koltunski
    int pad = size<20 ? 1 : size/20;
182 d40cfeb2 Leszek Koltunski
183 56cbe1cf Leszek Koltunski
    lay.removeAllViews();
184 d40cfeb2 Leszek Koltunski
185
    mShape = new boolean[mNumRows*mNumCols];
186
187 56cbe1cf Leszek Koltunski
    TableRow.LayoutParams p = new TableRow.LayoutParams();
188 d40cfeb2 Leszek Koltunski
189
    p.rightMargin  = pad;
190
    p.leftMargin   = pad;
191
    p.topMargin    = pad;
192
    p.bottomMargin = pad;
193
    p.height       = size;
194
    p.width        = size;
195
196
    for (int rows=0; rows<mNumRows; rows++)
197 08f92d82 Leszek Koltunski
      {
198 d40cfeb2 Leszek Koltunski
      TableRow tr = new TableRow(this);
199
      tr.setGravity(Gravity.CENTER);
200
201
      for(int cols=0; cols<mNumCols; cols++)
202
        {
203
        Button b = new Button(this);
204
        b.setOnClickListener(this);
205
        b.setId(rows*mNumCols+cols);
206
        b.setLayoutParams(p);
207 bcc8e016 Leszek Koltunski
        b.setBackgroundColor(COLOR_ON);
208 d40cfeb2 Leszek Koltunski
        tr.addView(b, p);
209 bcc8e016 Leszek Koltunski
        mShape[rows*mNumCols+cols] = true;
210 d40cfeb2 Leszek Koltunski
        }
211
212 56cbe1cf Leszek Koltunski
      lay.addView(tr);
213 d40cfeb2 Leszek Koltunski
      }
214
    }
215
216 50ac40a6 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
217
218
  public DistortedObject getObject()
219
    {
220
    return mObject;
221
    }
222
223 24991bc2 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
224
225
  public static void setSupportsRegion(boolean supports)
226
    {
227
    mSupportsRegion = supports;
228
    }
229
230
///////////////////////////////////////////////////////////////////////////////////////////////////
231
232
  public static boolean supportsRegion()
233
    {
234
    return mSupportsRegion;
235
    }
236
237 76a81b6a Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
238
239 4d5b37fe Leszek Koltunski
  public static void setSupportsCenter(boolean supports)
240 76a81b6a Leszek Koltunski
    {
241 4d5b37fe Leszek Koltunski
    mSupportsCenter = supports;
242 76a81b6a Leszek Koltunski
    }
243
244
///////////////////////////////////////////////////////////////////////////////////////////////////
245
246 4d5b37fe Leszek Koltunski
  public static boolean supportsCenter()
247 76a81b6a Leszek Koltunski
    {
248 4d5b37fe Leszek Koltunski
    return mSupportsCenter;
249 76a81b6a Leszek Koltunski
    }
250
251 d40cfeb2 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
252
253 9167cfd4 Leszek Koltunski
  public Bitmap getBitmap()
254 d40cfeb2 Leszek Koltunski
    {
255 cdc515b9 Leszek Koltunski
    if( mBitmap==null )
256 9167cfd4 Leszek Koltunski
      {
257 cdc515b9 Leszek Koltunski
      if( mBitmapID!=-1)
258 9167cfd4 Leszek Koltunski
        {
259 cdc515b9 Leszek Koltunski
        InputStream is = getResources().openRawResource(mBitmapID);
260
261 9167cfd4 Leszek Koltunski
        try
262
          {
263 cdc515b9 Leszek Koltunski
          mBitmap = BitmapFactory.decodeStream(is);
264
          }
265
        finally
266
          {
267
          try
268
            {
269
            is.close();
270
            }
271
          catch(IOException e) { }
272 9167cfd4 Leszek Koltunski
          }
273
        }
274 cdc515b9 Leszek Koltunski
      else
275
        {
276
        final int W = 640;
277
        final int H = 640;
278 9167cfd4 Leszek Koltunski
279 cdc515b9 Leszek Koltunski
        Paint paint = new Paint();
280
        mBitmap = Bitmap.createBitmap(W,H, Bitmap.Config.ARGB_8888);
281
        Canvas canvas = new Canvas(mBitmap);
282 9167cfd4 Leszek Koltunski
283 cdc515b9 Leszek Koltunski
        paint.setAntiAlias(true);
284
        paint.setTextAlign(Paint.Align.CENTER);
285
        paint.setColor(0xff008800);
286
        paint.setStyle(Paint.Style.FILL);
287
        canvas.drawRect(0, 0, W, H, paint);
288
        paint.setColor(0xffffffff);
289 9167cfd4 Leszek Koltunski
290 cdc515b9 Leszek Koltunski
        for(int i=0; i<=mNumCols ; i++ )
291
          {
292
          canvas.drawRect(W*i/mNumCols - 1,                0,  W*i/mNumCols + 1,  H               , paint);
293
          canvas.drawRect(               0, H *i/mNumCols -1,  W               ,  H*i/mNumCols + 1, paint);
294
          }
295 9167cfd4 Leszek Koltunski
        }
296
      }
297
298 cdc515b9 Leszek Koltunski
    return mBitmap;
299 d40cfeb2 Leszek Koltunski
    }
300
301
///////////////////////////////////////////////////////////////////////////////////////////////////
302
303 56cbe1cf Leszek Koltunski
  public void onClick(View view)
304 d40cfeb2 Leszek Koltunski
    {
305 56cbe1cf Leszek Koltunski
    Button tmp = (Button)view;
306
    int id = tmp.getId();
307
    mShape[id] = !mShape[id];
308
    tmp.setBackgroundColor(mShape[id] ? COLOR_ON:COLOR_OFF);
309 bcc8e016 Leszek Koltunski
    }
310
311 6f779cd4 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
312
313
  public void setRegion(float x, float y, float r)
314
    {
315
    mRegionX = x;
316 24991bc2 Leszek Koltunski
    mRegionY =-y;
317 6f779cd4 Leszek Koltunski
    mRegionR = r;
318
319 76a81b6a Leszek Koltunski
    Effects3DSurfaceView view = (Effects3DSurfaceView)findViewById(R.id.effects3dSurfaceView);
320 6f779cd4 Leszek Koltunski
321
    view.getRenderer().setRegion(mRegionX, mRegionY, mRegionR);
322
    }
323
324 950511ed Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
325
326 334c13fa Leszek Koltunski
  public void setCenter(float x, float y, float z)
327 950511ed Leszek Koltunski
    {
328
    mCenterX = x;
329
    mCenterY = y;
330 334c13fa Leszek Koltunski
    mCenterZ = z;
331 950511ed Leszek Koltunski
332 76a81b6a Leszek Koltunski
    Effects3DSurfaceView view = (Effects3DSurfaceView)findViewById(R.id.effects3dSurfaceView);
333 950511ed Leszek Koltunski
334 334c13fa Leszek Koltunski
    view.getRenderer().setCenter( mCenterX, mCenterY, mCenterZ );
335 950511ed Leszek Koltunski
    }
336
337
///////////////////////////////////////////////////////////////////////////////////////////////////
338
339
  public float getCenterX()
340
    {
341
    return mCenterX;
342
    }
343
344
///////////////////////////////////////////////////////////////////////////////////////////////////
345
346
  public float getCenterY()
347
    {
348
    return mCenterY;
349
    }
350
351 334c13fa Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
352
353
  public float getCenterZ()
354
    {
355
    return mCenterZ;
356
    }
357
358 6f779cd4 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
359
360
  public float getRegionX()
361
    {
362
    return mRegionX;
363
    }
364
365
///////////////////////////////////////////////////////////////////////////////////////////////////
366
367
  public float getRegionY()
368
    {
369
    return mRegionY;
370
    }
371
372
///////////////////////////////////////////////////////////////////////////////////////////////////
373
374
  public float getRegionR()
375
    {
376
    return mRegionR;
377
    }
378
379 bcc8e016 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
380 50ac40a6 Leszek Koltunski
381 bcc8e016 Leszek Koltunski
  public void Continue(View v)
382
    {
383 56cbe1cf Leszek Koltunski
    firstScreen = false;
384
385 a98db446 Leszek Koltunski
    Distorted.setMaxVertex(20);    // those have to be called before
386 cdc515b9 Leszek Koltunski
    Distorted.setMaxFragment(3);   // any DistortedObject gets created!
387 a98db446 Leszek Koltunski
388 50ac40a6 Leszek Koltunski
    if( mObjectType==1 )
389
      {
390 cdc515b9 Leszek Koltunski
      getBitmap();
391
      mObject = new DistortedBitmap(mBitmap.getWidth(),mBitmap.getHeight(),mNumCols);
392 76a81b6a Leszek Koltunski
      setEffectView();
393 50ac40a6 Leszek Koltunski
      }
394
    else
395
      {
396 bcc8e016 Leszek Koltunski
      View view = getLayoutInflater().inflate(R.layout.objectpicker2layout, null);
397 50ac40a6 Leszek Koltunski
398 bcc8e016 Leszek Koltunski
      setContentView(view);
399 50ac40a6 Leszek Koltunski
400 bcc8e016 Leszek Koltunski
      view.post(new Runnable() {
401
            @Override
402
            public void run() {
403
              setGrid();
404
            }
405
        });
406 50ac40a6 Leszek Koltunski
      }
407 bcc8e016 Leszek Koltunski
    }
408
409
///////////////////////////////////////////////////////////////////////////////////////////////////
410
411
  public void Create(View v)
412
    {
413
    firstScreen = false;
414
415
    String str = "";
416
417
    for(int i=0; i<mNumRows*mNumCols; i++)
418
      str += mShape[i] ? "1" : "0";
419
420
    mObject = new DistortedCubes(mNumCols, str, 10);
421 50ac40a6 Leszek Koltunski
422 76a81b6a Leszek Koltunski
    setEffectView();
423 d40cfeb2 Leszek Koltunski
    }
424
425 50ac40a6 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
426
427
  public void onItemSelected(AdapterView<?> parent, View view, int pos, long id)
428
    {
429
    switch(parent.getId())
430
      {
431 56cbe1cf Leszek Koltunski
      case R.id.objectpicker_spinnerType  : mObjectType = pos;
432
                                            break;
433 bcc8e016 Leszek Koltunski
      case R.id.objectpicker_spinnerBitmap: switch(pos)
434
                                              {
435 cdc515b9 Leszek Koltunski
                                              case 0: mBitmapID = -1        ; break;
436
                                              case 1: mBitmapID = R.raw.face; break;
437
                                              case 2: mBitmapID = R.raw.dog ; break;
438
                                              case 3: mBitmapID = R.raw.cat ; break;
439
                                              case 4: mBitmapID = R.raw.grid; break;
440
                                              case 5: mBitmapID = R.raw.bean; break;
441
                                              case 6: mBitmapID = R.raw.monalisa; break;
442 bcc8e016 Leszek Koltunski
                                              }
443
                                            break;
444 76a81b6a Leszek Koltunski
      case R.id.effects3dspinner          : mEffectAdd = pos;
445 56cbe1cf Leszek Koltunski
                                            break;
446 50ac40a6 Leszek Koltunski
      }
447
    }
448
449
///////////////////////////////////////////////////////////////////////////////////////////////////
450
451
  public void onNothingSelected(AdapterView<?> parent)
452
    {
453
    }
454
455 d40cfeb2 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
456
457 56cbe1cf Leszek Koltunski
  public int getWidth()
458 d40cfeb2 Leszek Koltunski
    {
459 56cbe1cf Leszek Koltunski
    return mObject==null ? 0: mObject.getWidth();
460 d40cfeb2 Leszek Koltunski
    }
461 08f92d82 Leszek Koltunski
462
///////////////////////////////////////////////////////////////////////////////////////////////////
463
464 56cbe1cf Leszek Koltunski
  public int getHeight()
465 d40cfeb2 Leszek Koltunski
    {
466 56cbe1cf Leszek Koltunski
    return mObject==null ? 0: mObject.getHeight();
467 d40cfeb2 Leszek Koltunski
    }
468 08f92d82 Leszek Koltunski
469 334c13fa Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
470
471
  public int getDepth()
472
    {
473
    return mObject==null ? 0: mObject.getDepth();
474
    }
475
476
///////////////////////////////////////////////////////////////////////////////////////////////////
477
478
  public int getScreenWidth()
479
    {
480
    return 0;
481
    }
482
483
///////////////////////////////////////////////////////////////////////////////////////////////////
484
485
  public int getScreenHeight()
486
    {
487
    return 0;
488
    }
489
490 08f92d82 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
491
492 6f779cd4 Leszek Koltunski
  private void resetData()
493 d40cfeb2 Leszek Koltunski
    {
494 950511ed Leszek Koltunski
    mCenterX = 0.5f*getWidth();
495
    mCenterY = 0.5f*getHeight();
496 6f779cd4 Leszek Koltunski
    mRegionX = 0;
497
    mRegionY = 0;
498
    mRegionR = getWidth()/2;
499 47833473 Leszek Koltunski
500
    mSupportsRegion = true;
501 4d5b37fe Leszek Koltunski
    mSupportsCenter =false;
502 6f779cd4 Leszek Koltunski
    }
503
504
///////////////////////////////////////////////////////////////////////////////////////////////////
505
// 'second screen' methods
506
507 76a81b6a Leszek Koltunski
  private void setEffectView()
508 6f779cd4 Leszek Koltunski
    {
509
    resetData();
510 950511ed Leszek Koltunski
511 76a81b6a Leszek Koltunski
    final View view = getLayoutInflater().inflate(R.layout.effects3dlayout, null);
512 e2d8ea1d Leszek Koltunski
513 56cbe1cf Leszek Koltunski
    setContentView(view);
514 794e6c4f Leszek Koltunski
515 24991bc2 Leszek Koltunski
    String[] effects = new String[mEffectNames.length];
516
517
    for(int i=0; i<mEffectNames.length; i++) effects[i] = mEffectNames[i].name();
518 794e6c4f Leszek Koltunski
519 76a81b6a Leszek Koltunski
    Spinner effectSpinner = (Spinner)findViewById(R.id.effects3dspinner );
520 56cbe1cf Leszek Koltunski
    effectSpinner.setOnItemSelectedListener(this);
521 794e6c4f Leszek Koltunski
522 56cbe1cf Leszek Koltunski
    ArrayAdapter<String> adapterEffect = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, effects);
523
    adapterEffect.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
524
    effectSpinner.setAdapter(adapterEffect);
525 d2337a3a Leszek Koltunski
526 56cbe1cf Leszek Koltunski
    mEffectAdd = 0;
527 794e6c4f Leszek Koltunski
    }
528
529
///////////////////////////////////////////////////////////////////////////////////////////////////
530
531 56cbe1cf Leszek Koltunski
  public void newEffect(View v)
532 794e6c4f Leszek Koltunski
    {
533 76a81b6a Leszek Koltunski
    Effects3DEffect eff = new Effects3DEffect(mEffectNames[mEffectAdd], this);
534 56cbe1cf Leszek Koltunski
    mEffects.add(eff);
535 d2337a3a Leszek Koltunski
536 76a81b6a Leszek Koltunski
    LinearLayout layout = (LinearLayout)findViewById(R.id.effects3dlayout);
537 56cbe1cf Leszek Koltunski
    View view = eff.createView();
538
    layout.addView(view);
539 950511ed Leszek Koltunski
540 4d5b37fe Leszek Koltunski
    if( mSupportsCenter )
541 76a81b6a Leszek Koltunski
      {
542
      View center = eff.createCenter();
543
      layout.addView(center);
544
      }
545
546
    if( mSupportsRegion )
547 950511ed Leszek Koltunski
      {
548
      View region = eff.createRegion();
549
      layout.addView(region);
550
      }
551
552 24991bc2 Leszek Koltunski
    eff.apply(mObject);
553 d2337a3a Leszek Koltunski
    }
554
555
///////////////////////////////////////////////////////////////////////////////////////////////////
556
557 56cbe1cf Leszek Koltunski
  public void removeAll(View v)
558 d2337a3a Leszek Koltunski
    {
559 56cbe1cf Leszek Koltunski
    mEffects.clear();
560 76a81b6a Leszek Koltunski
    LinearLayout layout = (LinearLayout)findViewById(R.id.effects3dlayout);
561 56cbe1cf Leszek Koltunski
    layout.removeAllViews();
562
    mObject.abortEffects(EffectTypes.VERTEX);
563 76a81b6a Leszek Koltunski
    mObject.abortEffects(EffectTypes.FRAGMENT);
564 950511ed Leszek Koltunski
565 6f779cd4 Leszek Koltunski
    resetData();
566 950511ed Leszek Koltunski
567 76a81b6a Leszek Koltunski
    Effects3DSurfaceView view = (Effects3DSurfaceView)findViewById(R.id.effects3dSurfaceView);
568
    Effects3DRenderer renderer= view.getRenderer();
569 950511ed Leszek Koltunski
570 334c13fa Leszek Koltunski
    renderer.setCenter( mCenterX, mCenterY, mCenterZ );
571 6f779cd4 Leszek Koltunski
    renderer.setRegion( mRegionX, mRegionY, mRegionR );
572 950511ed Leszek Koltunski
    renderer.mQuat1.set(0,0,0,1);
573
    renderer.mQuat2.set(0,0,0,1);
574 d2337a3a Leszek Koltunski
    }
575
576 de82c8b7 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
577
578
  public void remove(View v)
579
    {
580 adc117e0 Leszek Koltunski
    for(Effects3DEffect effect: mEffects)
581 fa9053f5 Leszek Koltunski
      {
582
      if( effect.thisView(v) )
583
        {
584 fed00329 Leszek Koltunski
        LinearLayout layout = (LinearLayout)findViewById(R.id.effects3dlayout);
585
        View view;
586
587
        view = effect.getEffect();
588
        if( view!=null ) layout.removeView(view);
589
        view = effect.getCenter();
590
        if( view!=null ) layout.removeView(view);
591
        view = effect.getRegion();
592
        if( view!=null ) layout.removeView(view);
593
594
        long id = effect.getId();
595
        mObject.abortEffect(id);
596 adc117e0 Leszek Koltunski
        mEffects.remove(effect);
597
598
        resetData();
599 fed00329 Leszek Koltunski
600
        break;
601 fa9053f5 Leszek Koltunski
        }
602
      }
603 de82c8b7 Leszek Koltunski
    }
604
605 08f92d82 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
606 d40cfeb2 Leszek Koltunski
// Overrides
607
608
  @Override
609
  protected void onPause()
610
    {
611 76a81b6a Leszek Koltunski
    GLSurfaceView mView = (GLSurfaceView)findViewById(R.id.effects3dSurfaceView);
612 d40cfeb2 Leszek Koltunski
    if( mView!=null ) mView.onPause();
613
    super.onPause();
614
    }
615 08f92d82 Leszek Koltunski
616
///////////////////////////////////////////////////////////////////////////////////////////////////
617
    
618 d40cfeb2 Leszek Koltunski
  @Override
619
  protected void onResume()
620
    {
621
    super.onResume();
622 76a81b6a Leszek Koltunski
    GLSurfaceView mView = (GLSurfaceView)findViewById(R.id.effects3dSurfaceView);
623 d40cfeb2 Leszek Koltunski
    if( mView!=null ) mView.onResume();
624
    }
625 08f92d82 Leszek Koltunski
626
///////////////////////////////////////////////////////////////////////////////////////////////////
627
    
628 d40cfeb2 Leszek Koltunski
  @Override
629
  public void onWindowFocusChanged(boolean hasFocus)
630
    {
631
    super.onWindowFocusChanged(hasFocus);
632
633
    if( firstScreen )
634
      {
635
      mColsPicker.setValue(mNumCols);
636
      mRowsPicker.setValue(mNumRows);
637
      }
638
    }
639 08f92d82 Leszek Koltunski
640
///////////////////////////////////////////////////////////////////////////////////////////////////
641
    
642 d40cfeb2 Leszek Koltunski
  @Override
643
  protected void onDestroy()
644
    {
645
    Distorted.onDestroy();
646
    super.onDestroy();
647
    }
648 08f92d82 Leszek Koltunski
649 d40cfeb2 Leszek Koltunski
  }