Project

General

Profile

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

examples / src / main / java / org / distorted / examples / effects3d / Effects3DActivity.java @ 10b7e588

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