Project

General

Profile

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

examples / src / main / java / org / distorted / examples / effectqueue / EffectQueueActivity.java @ 5601cfa6

1 bc0a685b Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2016 Leszek Koltunski                                                               //
3
//                                                                                               //
4 71c8884f Leszek Koltunski
// This file is part of Distorted.                                                               //
5 bc0a685b Leszek Koltunski
//                                                                                               //
6 71c8884f Leszek Koltunski
// Distorted is free software: you can redistribute it and/or modify                             //
7 bc0a685b Leszek Koltunski
// 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 71c8884f Leszek Koltunski
// Distorted is distributed in the hope that it will be useful,                                  //
12 bc0a685b Leszek Koltunski
// 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 71c8884f Leszek Koltunski
// along with Distorted.  If not, see <http://www.gnu.org/licenses/>.                            //
18 bc0a685b Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
19
20 758303a3 Leszek Koltunski
package org.distorted.examples.effectqueue;
21 427ab7bf Leszek Koltunski
22 8dfa45c4 leszek
import org.distorted.library.effect.Effect;
23
import org.distorted.library.effect.EffectName;
24
import org.distorted.library.effect.EffectType;
25 5601cfa6 Leszek Koltunski
import org.distorted.library.main.DistortedEffects;
26 e3900503 Leszek Koltunski
import org.distorted.library.main.DistortedLibrary;
27 5068fa06 Leszek Koltunski
import org.distorted.examples.R;
28 427ab7bf Leszek Koltunski
29
import android.app.Activity;
30
import android.opengl.GLSurfaceView;
31
import android.os.Bundle;
32
import android.view.View;
33 f9afbbf3 Leszek Koltunski
import android.widget.AdapterView;
34
import android.widget.ArrayAdapter;
35
import android.widget.Spinner;
36 e763f1ee Leszek Koltunski
import android.widget.TableLayout;
37
import android.widget.TableRow;
38
import android.widget.TextView;
39 8bebb319 Leszek Koltunski
import android.widget.Toast;
40 427ab7bf Leszek Koltunski
41 af225332 Leszek Koltunski
import java.util.ArrayList;
42
43 bc0a685b Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
44 427ab7bf Leszek Koltunski
45 758303a3 Leszek Koltunski
public class EffectQueueActivity extends Activity implements AdapterView.OnItemSelectedListener
46 bc0a685b Leszek Koltunski
  {
47 50ac40a6 Leszek Koltunski
  private Spinner mAdd, mID, mName, mType;
48 49c0eecc leszek
  private static ArrayAdapter<Long> mAdapterID;
49 af225332 Leszek Koltunski
50
  private int mPosID, mPosName, mPosType;
51 e763f1ee Leszek Koltunski
  private TableLayout mLayoutList;
52
53 5601cfa6 Leszek Koltunski
  private static class EffectRow
54 8d5a8e06 Leszek Koltunski
    {
55
    Effect effect;
56
    TableRow row;
57
58
    EffectRow(Effect e, TableRow tr)
59
      {
60
      effect = e;
61
      row    = tr;
62
      }
63
    }
64
65
  private ArrayList<EffectRow> mList = new ArrayList<>();
66 f9afbbf3 Leszek Koltunski
67 bc0a685b Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
68
69
  @Override
70
  protected void onCreate(Bundle savedInstanceState) 
71
    {
72
    super.onCreate(savedInstanceState);
73 427ab7bf Leszek Koltunski
 
74 a13e1101 Leszek Koltunski
    setContentView(R.layout.effectqueuelayout);
75 f9afbbf3 Leszek Koltunski
76 af225332 Leszek Koltunski
    mPosID   = 0;
77
    mPosName = 0;
78
    mPosType = 0;
79
80 a4d59c0b Leszek Koltunski
    mAdd  = findViewById(R.id.effects2d_spinnerAdd );
81
    mID   = findViewById(R.id.effects2d_spinnerID  );
82
    mName = findViewById(R.id.effects2d_spinnerName);
83
    mType = findViewById(R.id.effects2d_spinnerType);
84 f9afbbf3 Leszek Koltunski
85 50ac40a6 Leszek Koltunski
    mAdd.setOnItemSelectedListener(this);
86 f9afbbf3 Leszek Koltunski
    mID.setOnItemSelectedListener(this);
87
    mName.setOnItemSelectedListener(this);
88
    mType.setOnItemSelectedListener(this);
89
90 49c0eecc leszek
    ArrayList<Long> itemsId  = new ArrayList<>();
91 af225332 Leszek Koltunski
92 b4a73ea5 Leszek Koltunski
    String[] itemsName = new String[] { getText(R.string.distort   ).toString(),
93
                                        getText(R.string.sink      ).toString(),
94
                                        getText(R.string.alpha     ).toString(),
95 63fc1eaf Leszek Koltunski
                                        getText(R.string.saturation).toString(),
96 bdfec906 Leszek Koltunski
                                        getText(R.string.chroma).toString()};
97 af225332 Leszek Koltunski
98 f9afbbf3 Leszek Koltunski
    String[] itemsType = new String[] {"VERTEX", "FRAGMENT"};
99
100 49c0eecc leszek
    mAdapterID = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, itemsId);
101 f9afbbf3 Leszek Koltunski
    mAdapterID.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
102
    mID.setAdapter(mAdapterID);
103
104 3f07bedc Leszek Koltunski
    ArrayAdapter<String> adapterAdd = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, itemsName);
105
    adapterAdd.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
106
    mAdd.setAdapter(adapterAdd);
107 f9afbbf3 Leszek Koltunski
108 3f07bedc Leszek Koltunski
    ArrayAdapter<String> adapterName = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, itemsName);
109
    adapterName.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
110
    mName.setAdapter(adapterName);
111
112
    ArrayAdapter<String> adapterType = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, itemsType);
113
    adapterType.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
114
    mType.setAdapter(adapterType);
115 e763f1ee Leszek Koltunski
116 a4d59c0b Leszek Koltunski
    mLayoutList = findViewById(R.id.effects2dTableList);
117 bc0a685b Leszek Koltunski
    }
118 427ab7bf Leszek Koltunski
119 bc0a685b Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
120
121
  @Override
122
  protected void onResume() 
123
    {
124
    super.onResume();
125 427ab7bf Leszek Koltunski
      
126 a4d59c0b Leszek Koltunski
    GLSurfaceView mView = findViewById(R.id.effects2dSurfaceView);
127 bc0a685b Leszek Koltunski
    mView.onResume();
128
    }
129 427ab7bf Leszek Koltunski
130 bc0a685b Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
131
132
  @Override
133
  protected void onPause() 
134
    {
135 a4d59c0b Leszek Koltunski
    GLSurfaceView mView = findViewById(R.id.effects2dSurfaceView);
136 bc0a685b Leszek Koltunski
    mView.onPause();
137 b0ebdf5e Leszek Koltunski
138 e3900503 Leszek Koltunski
    DistortedLibrary.onPause();
139 bc0a685b Leszek Koltunski
    super.onPause();
140
    }
141 427ab7bf Leszek Koltunski
    
142 bc0a685b Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
143 427ab7bf Leszek Koltunski
144 bc0a685b Leszek Koltunski
  @Override
145
  public void onStop()
146
    {
147
    super.onStop();
148
    }
149
150
///////////////////////////////////////////////////////////////////////////////////////////////////
151
152
  @Override
153
  public void onDestroy()
154
    {
155 e3900503 Leszek Koltunski
    DistortedLibrary.onDestroy();
156 bc0a685b Leszek Koltunski
    super.onDestroy();
157
    }     
158 427ab7bf Leszek Koltunski
159 bc0a685b Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
160 427ab7bf Leszek Koltunski
161 f9afbbf3 Leszek Koltunski
  public void onItemSelected(AdapterView<?> parent, View view, int pos, long id)
162 bc0a685b Leszek Koltunski
    {
163 f9afbbf3 Leszek Koltunski
    switch(parent.getId())
164 bc0a685b Leszek Koltunski
      {
165 a4d59c0b Leszek Koltunski
      case R.id.effects2d_spinnerAdd : EffectQueueSurfaceView v = findViewById(R.id.effects2dSurfaceView);
166 3f07bedc Leszek Koltunski
                                       v.setEffect(pos); break;
167 af225332 Leszek Koltunski
      case R.id.effects2d_spinnerID  : mPosID   = pos; break;
168
      case R.id.effects2d_spinnerName: mPosName = pos; break;
169
      case R.id.effects2d_spinnerType: mPosType = pos; break;
170 427ab7bf Leszek Koltunski
      }
171 bc0a685b Leszek Koltunski
    }
172 427ab7bf Leszek Koltunski
173 bc0a685b Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
174 427ab7bf Leszek Koltunski
175 f9afbbf3 Leszek Koltunski
  public void onNothingSelected(AdapterView<?> parent)
176
    {
177 af225332 Leszek Koltunski
    }
178
179
///////////////////////////////////////////////////////////////////////////////////////////////////
180
181
  public void removeByID(View view)
182
    {
183 392e16fd Leszek Koltunski
    try
184
      {
185 49c0eecc leszek
      Long currEffect = (Long)mID.getItemAtPosition(mPosID);
186 a4d59c0b Leszek Koltunski
      EffectQueueSurfaceView v = findViewById(R.id.effects2dSurfaceView);
187 49c0eecc leszek
      v.getRenderer().getEffects().abortById(currEffect);
188 8d5a8e06 Leszek Koltunski
189
      int numRows = mList.size();
190
191
      for(int i=0; i<numRows; i++)
192
        {
193
        Effect effect = mList.get(i).effect;
194
195
        if( effect.getID() == currEffect )
196
          {
197
          effectRemoved(i);
198
          break;
199
          }
200
        }
201 392e16fd Leszek Koltunski
      }
202
    catch(IndexOutOfBoundsException ex)
203
      {
204
      android.util.Log.e("effectQueue", "Failure trying to remove "+mPosID);
205
      }
206 af225332 Leszek Koltunski
    }
207
208
///////////////////////////////////////////////////////////////////////////////////////////////////
209
210
  public void removeByName(View view)
211
    {
212 8dfa45c4 leszek
    EffectName name;
213 af225332 Leszek Koltunski
214
    switch(mPosName)
215 f9afbbf3 Leszek Koltunski
      {
216 8dfa45c4 leszek
      case  0: name = EffectName.DISTORT      ; break;
217
      case  1: name = EffectName.SINK         ; break;
218
      case  2: name = EffectName.SMOOTH_ALPHA ; break;
219
      case  3: name = EffectName.SATURATION   ; break;
220
      case  4: name = EffectName.SMOOTH_CHROMA; break;
221
      default: name = EffectName.CONTRAST     ;
222 f9afbbf3 Leszek Koltunski
      }
223 af225332 Leszek Koltunski
224 8d5a8e06 Leszek Koltunski
      int numRows = mList.size();
225
226
      for(int i=0; i<numRows; i++)
227
        {
228
        Effect effect = mList.get(i).effect;
229
230
        if( effect.getName() == name )
231
          {
232
          effectRemoved(i);
233
          i--;
234
          numRows--;
235
          }
236
        }
237
238 a4d59c0b Leszek Koltunski
    EffectQueueSurfaceView v = findViewById(R.id.effects2dSurfaceView);
239 8dfa45c4 leszek
    v.getRenderer().getEffects().abortByName(name);
240 f9afbbf3 Leszek Koltunski
    }
241 af225332 Leszek Koltunski
242
///////////////////////////////////////////////////////////////////////////////////////////////////
243
244
  public void removeByType(View view)
245
    {
246 8dfa45c4 leszek
    EffectType type;
247 af225332 Leszek Koltunski
248
    switch(mPosType)
249
      {
250 8dfa45c4 leszek
      case  0: type = EffectType.VERTEX  ; break;
251
      case  1: type = EffectType.FRAGMENT; break;
252
      default: type = EffectType.MATRIX;
253 af225332 Leszek Koltunski
      }
254
255 8d5a8e06 Leszek Koltunski
    int numRows = mList.size();
256
257
    for(int i=0; i<numRows; i++)
258
      {
259
      Effect effect = mList.get(i).effect;
260
261
      if( effect.getType() == type )
262
        {
263
        effectRemoved(i);
264
        i--;
265
        numRows--;
266
        }
267
      }
268
269 a4d59c0b Leszek Koltunski
    EffectQueueSurfaceView v = findViewById(R.id.effects2dSurfaceView);
270 5601cfa6 Leszek Koltunski
271
    DistortedEffects effects = v.getRenderer().getEffects();
272
    effects.abortByType(type);
273 af225332 Leszek Koltunski
    }
274
275
///////////////////////////////////////////////////////////////////////////////////////////////////
276
277 8dfa45c4 leszek
  public void effectAdded(boolean success, final Effect effect)
278 af225332 Leszek Koltunski
    {
279 8dfa45c4 leszek
    if( success )  // we really added a new effect
280 8bebb319 Leszek Koltunski
      {
281 8d5a8e06 Leszek Koltunski
      EffectQueueSurfaceView v = findViewById(R.id.effects2dSurfaceView);
282
      effect.notifyWhenFinished(v.getRenderer());
283
284 49c0eecc leszek
      mAdapterID.add(effect.getID());
285 8bebb319 Leszek Koltunski
      mAdapterID.notifyDataSetChanged();
286 e763f1ee Leszek Koltunski
287 8bebb319 Leszek Koltunski
      TableRow tr = new TableRow(this);
288
      tr.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT));
289 e763f1ee Leszek Koltunski
290 8bebb319 Leszek Koltunski
      TextView b1 = new TextView(this);
291 a4d59c0b Leszek Koltunski
      b1.setText(getString(R.string.effect_id_placeholder,effect.getID()));
292 8bebb319 Leszek Koltunski
      b1.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT));
293
      tr.addView(b1);
294 e763f1ee Leszek Koltunski
295 8bebb319 Leszek Koltunski
      TextView b2 = new TextView(this);
296 8dfa45c4 leszek
      b2.setText(effect.getName().name());
297 8bebb319 Leszek Koltunski
      b2.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT));
298
      tr.addView(b2);
299 e763f1ee Leszek Koltunski
300 8bebb319 Leszek Koltunski
      TextView b3 = new TextView(this);
301 8dfa45c4 leszek
      b3.setText(effect.getType().name());
302 8bebb319 Leszek Koltunski
      b3.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT));
303
      tr.addView(b3);
304 e763f1ee Leszek Koltunski
305 8bebb319 Leszek Koltunski
      TextView b4 = new TextView(this);
306 a4d59c0b Leszek Koltunski
      b4.setText(R.string.effect_live);
307 8bebb319 Leszek Koltunski
      b4.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT));
308
      tr.addView(b4);
309 e763f1ee Leszek Koltunski
310 8d5a8e06 Leszek Koltunski
      mList.add(new EffectRow(effect,tr));
311 e763f1ee Leszek Koltunski
312 8bebb319 Leszek Koltunski
      mLayoutList.addView(tr, new TableLayout.LayoutParams(TableLayout.LayoutParams.WRAP_CONTENT, TableLayout.LayoutParams.WRAP_CONTENT));
313
      }
314
    else // id=-1, i.e. we failed to add new effect due to too many effects already
315
      {
316
      Toast.makeText(this, R.string.example_effects2d_toast , Toast.LENGTH_LONG).show();
317
      }
318 af225332 Leszek Koltunski
    }
319
320
///////////////////////////////////////////////////////////////////////////////////////////////////
321
322 8d5a8e06 Leszek Koltunski
  private void effectRemoved(int index)
323 af225332 Leszek Koltunski
    {
324 8d5a8e06 Leszek Koltunski
    EffectRow er = mList.remove(index);
325 af225332 Leszek Koltunski
326 8d5a8e06 Leszek Koltunski
    mAdapterID.remove(er.effect.getID());
327
    mAdapterID.notifyDataSetChanged();
328 af225332 Leszek Koltunski
329 8d5a8e06 Leszek Koltunski
    if( er.row!=null )
330
      {
331
      mLayoutList.removeView(er.row);
332
      }
333
    else
334
      {
335
      android.util.Log.e("EFFECTQUEUE", "Impossible: id="+er.effect.getID()+" not in the map!");
336
      }
337 af225332 Leszek Koltunski
    }
338
339
///////////////////////////////////////////////////////////////////////////////////////////////////
340
341 49c0eecc leszek
  public void effectFinished(final long id)
342 af225332 Leszek Koltunski
    {
343 e763f1ee Leszek Koltunski
    runOnUiThread(new Runnable()
344
      {
345
      public void run()
346
        {
347 8d5a8e06 Leszek Koltunski
        TableRow row = null;
348
349
        int numRows = mList.size();
350
351
        for(int i=0; i<numRows; i++)
352
          {
353
          EffectRow er = mList.get(i);
354
355
          if( er.effect.getID() == id )
356
            {
357
            row = er.row;
358
            break;
359
            }
360
          }
361 af225332 Leszek Koltunski
362 e763f1ee Leszek Koltunski
        if( row!=null )
363
          {
364
          TextView v = (TextView)row.getVirtualChildAt(3);
365 a4d59c0b Leszek Koltunski
          v.setText(R.string.effect_finished);
366 e763f1ee Leszek Koltunski
          }
367
        }
368
      });
369
    }
370 bc0a685b Leszek Koltunski
  }