Project

General

Profile

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

examples / src / main / java / org / distorted / examples / effects3d / Effects3DActivity.java @ 76f9798b

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