Project

General

Profile

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

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

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