Project

General

Profile

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

examples / src / main / java / org / distorted / examples / fragment3d / Fragment3DEffect.java @ 56cbe1cf

1 50f58197 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
package org.distorted.examples.fragment3d;
21
22
import android.view.View;
23
import android.widget.SeekBar;
24
import android.widget.TextView;
25
26
import org.distorted.examples.R;
27
import org.distorted.library.EffectNames;
28
import org.distorted.library.type.Dynamic1D;
29
import org.distorted.library.type.Dynamic3D;
30 75c7def3 Leszek Koltunski
import org.distorted.library.type.Dynamic4D;
31 50f58197 Leszek Koltunski
import org.distorted.library.type.Static1D;
32
import org.distorted.library.type.Static3D;
33 75c7def3 Leszek Koltunski
import org.distorted.library.type.Static4D;
34 50f58197 Leszek Koltunski
35 65270124 Leszek Koltunski
import java.lang.ref.WeakReference;
36
37 50f58197 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
38
39
public class Fragment3DEffect implements SeekBar.OnSeekBarChangeListener
40
  {
41 65270124 Leszek Koltunski
  private WeakReference<Fragment3DActivity> mAct;
42
43 50f58197 Leszek Koltunski
  private EffectNames mName;
44
  private int[] mInter;
45 75c7def3 Leszek Koltunski
  private int[] mInterRegion;
46
  private int[] mSeekID;
47
  private int[] mSeekRegionID;
48 50f58197 Leszek Koltunski
  private int mDimension;
49
  private TextView mText;
50 75c7def3 Leszek Koltunski
  private TextView mTextRegion;
51 50f58197 Leszek Koltunski
52
  private Dynamic1D mDyn1;
53
  private Dynamic3D mDyn3;
54
  private Static1D  mSta1;
55
  private Static3D  mSta3;
56 75c7def3 Leszek Koltunski
  private Dynamic4D mRegionDyn;
57
  private Static4D  mRegionSta;
58
59
///////////////////////////////////////////////////////////////////////////////////////////////////
60
61
  private void fillRegionStatics()
62
    {
63 65270124 Leszek Koltunski
    Fragment3DActivity act = mAct.get();
64
65
    float factorX = act.getWidth() / 100.0f;
66
    float factorY = act.getHeight()/ 100.0f;
67 75c7def3 Leszek Koltunski
68 65270124 Leszek Koltunski
    float  x = mInterRegion[0]*factorX;
69
    float  y = mInterRegion[1]*factorY;
70
    float rx = mInterRegion[2]*factorX;
71
    float ry = mInterRegion[3]*factorY;
72 75c7def3 Leszek Koltunski
73
    mRegionSta.set(x,y,rx,ry);
74
    }
75
76
///////////////////////////////////////////////////////////////////////////////////////////////////
77
78
  private void setDefaultRegionInter()
79
    {
80
    mInterRegion[0] = 50;
81
    mInterRegion[1] = 50;
82
    mInterRegion[2] = 50;
83
    mInterRegion[3] = 50;
84
    }
85
86
///////////////////////////////////////////////////////////////////////////////////////////////////
87
88
  private void setRegionText()
89
    {
90 3bec5dc2 Leszek Koltunski
    int f0 = (int)mRegionSta.getX();
91
    int f1 = (int)mRegionSta.getY();
92
    int f2 = (int)mRegionSta.getZ();
93
    int f3 = (int)mRegionSta.getW();
94 65270124 Leszek Koltunski
95
    mTextRegion.setText("region ("+f0+","+f1+","+f2+","+f3+")");
96 75c7def3 Leszek Koltunski
    }
97 50f58197 Leszek Koltunski
98
///////////////////////////////////////////////////////////////////////////////////////////////////
99
100
  private void fillStatics()
101
    {
102
    switch(mName)
103
      {
104 3bec5dc2 Leszek Koltunski
      case MACROBLOCK       : Fragment3DActivity act = mAct.get();
105
                              mSta1.set(mInter[0]*act.getWidth() / 100.0f);
106
                              break;
107
      case ALPHA            :
108
      case SMOOTH_ALPHA     :
109
      case BRIGHTNESS       :
110
      case SMOOTH_BRIGHTNESS:
111
      case SATURATION       :
112
      case SMOOTH_SATURATION:
113
      case CONTRAST         :
114
      case SMOOTH_CONTRAST  : mSta1.set(mInter[0]/100.0f);
115
                              break;
116
117
      case CHROMA           :
118
      case SMOOTH_CHROMA    : mSta1.set(mInter[0]/100.0f);
119
                              mSta3.set(255.0f*mInter[1]/100,
120
                                        255.0f*mInter[2]/100,
121
                                        255.0f*mInter[3]/100);
122
                              break;
123 50f58197 Leszek Koltunski
      }
124
    }
125
126
///////////////////////////////////////////////////////////////////////////////////////////////////
127
128
  private void setDefaultInter()
129
    {
130
    switch(mName)
131
      {
132 3bec5dc2 Leszek Koltunski
      case MACROBLOCK       : mInter[0] =  3;
133
                              break;
134
      case ALPHA            :
135
      case SMOOTH_ALPHA     :
136
      case BRIGHTNESS       :
137
      case SMOOTH_BRIGHTNESS:
138
      case SATURATION       :
139
      case SMOOTH_SATURATION:
140
      case CONTRAST         :
141
      case SMOOTH_CONTRAST  : mInter[0] = 50;
142
                              break;
143
144
      case CHROMA           :
145
      case SMOOTH_CHROMA    : mInter[0] = 50;
146
                              mInter[1] =  0;
147
                              mInter[2] =  0;
148
                              mInter[3] =  0;
149
                              break;
150 50f58197 Leszek Koltunski
      }
151
    }
152
153
///////////////////////////////////////////////////////////////////////////////////////////////////
154
155
  private void setText()
156
    {
157 3bec5dc2 Leszek Koltunski
    float f1 = ((int)(mSta1.getX()*100))/100.0f;
158 65270124 Leszek Koltunski
159 3bec5dc2 Leszek Koltunski
    String text = mName.name() +" "+f1;
160
161
    if( mName==EffectNames.CHROMA || mName==EffectNames.SMOOTH_CHROMA)
162 50f58197 Leszek Koltunski
      {
163 3bec5dc2 Leszek Koltunski
      int f2 = (int)mSta3.getX();
164
      int f3 = (int)mSta3.getY();
165
      int f4 = (int)mSta3.getZ();
166
      text += "("+f2+","+f3+","+f4+")";
167 50f58197 Leszek Koltunski
      }
168 3bec5dc2 Leszek Koltunski
169
    mText.setText(text);
170 50f58197 Leszek Koltunski
    }
171
172
///////////////////////////////////////////////////////////////////////////////////////////////////
173
174 65270124 Leszek Koltunski
  public Fragment3DEffect(EffectNames name, Fragment3DActivity act)
175 50f58197 Leszek Koltunski
    {
176 65270124 Leszek Koltunski
    mAct = new WeakReference<>(act);
177 50f58197 Leszek Koltunski
    mName = name;
178
179 3bec5dc2 Leszek Koltunski
    if( mName==EffectNames.CHROMA || mName==EffectNames.SMOOTH_CHROMA )
180 50f58197 Leszek Koltunski
      {
181 7e9be46d Leszek Koltunski
      mDimension = 4;
182 50f58197 Leszek Koltunski
      mDyn3 = new Dynamic3D();
183
      mSta3 = new Static3D(0,0,0);
184
      mDyn3.add(mSta3);
185
      }
186
    else
187
      {
188 7e9be46d Leszek Koltunski
      mDimension = 1;
189 50f58197 Leszek Koltunski
      mDyn3 = null;
190
      mSta3 = null;
191
      }
192 7e9be46d Leszek Koltunski
193
    mInter = new int[mDimension];
194 75c7def3 Leszek Koltunski
    mSeekID= new int[mDimension];
195 7e9be46d Leszek Koltunski
196
    mDyn1 = new Dynamic1D();
197
    mSta1 = new Static1D(0);
198
    mDyn1.add(mSta1);
199 75c7def3 Leszek Koltunski
200
    mInterRegion = new int[4];
201
    mSeekRegionID= new int[4];
202
    mRegionDyn   = new Dynamic4D();
203
    mRegionSta   = new Static4D(0,0,0,0);
204
    mRegionDyn.add(mRegionSta);
205 7e9be46d Leszek Koltunski
    }
206
207
///////////////////////////////////////////////////////////////////////////////////////////////////
208
209
  public Dynamic1D getDyn1()
210
    {
211
    return mDyn1;
212 50f58197 Leszek Koltunski
    }
213
214
///////////////////////////////////////////////////////////////////////////////////////////////////
215
216 7e9be46d Leszek Koltunski
  public Dynamic3D getDyn3()
217
    {
218
    return mDyn3;
219
    }
220
221 75c7def3 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
222
223
  public Dynamic4D getRegion()
224
    {
225
    return mRegionDyn;
226
    }
227
228 7e9be46d Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
229
230 65270124 Leszek Koltunski
  public View createView()
231 50f58197 Leszek Koltunski
    {
232
    View effect;
233 75c7def3 Leszek Koltunski
    SeekBar[] seek = new SeekBar[mDimension];
234 50f58197 Leszek Koltunski
235 65270124 Leszek Koltunski
    Fragment3DActivity act = mAct.get();
236
237 50f58197 Leszek Koltunski
    switch(mDimension)
238
      {
239 75c7def3 Leszek Koltunski
      case 1 : effect     = act.getLayoutInflater().inflate(R.layout.effect1d, null);
240
               mText      = (TextView)effect.findViewById(R.id.effect1dText);
241
               seek[0]    = (SeekBar)effect.findViewById(R.id.effect1dbar1);
242
               mSeekID[0] = seek[0].getId();
243 50f58197 Leszek Koltunski
               break;
244 75c7def3 Leszek Koltunski
      case 2 : effect     = act.getLayoutInflater().inflate(R.layout.effect2d, null);
245
               mText      = (TextView)effect.findViewById(R.id.effect2dText);
246
               seek[0]    = (SeekBar)effect.findViewById(R.id.effect2dbar1);
247
               seek[1]    = (SeekBar)effect.findViewById(R.id.effect2dbar2);
248
               mSeekID[0] = seek[0].getId();
249
               mSeekID[1] = seek[1].getId();
250 50f58197 Leszek Koltunski
               break;
251 75c7def3 Leszek Koltunski
      case 3 : effect     = act.getLayoutInflater().inflate(R.layout.effect3d, null);
252
               mText      = (TextView)effect.findViewById(R.id.effect3dText);
253
               seek[0]    = (SeekBar)effect.findViewById(R.id.effect3dbar1);
254
               seek[1]    = (SeekBar)effect.findViewById(R.id.effect3dbar2);
255
               seek[2]    = (SeekBar)effect.findViewById(R.id.effect3dbar3);
256
               mSeekID[0] = seek[0].getId();
257
               mSeekID[1] = seek[1].getId();
258
               mSeekID[2] = seek[2].getId();
259 50f58197 Leszek Koltunski
               break;
260 75c7def3 Leszek Koltunski
      case 4 : effect     = act.getLayoutInflater().inflate(R.layout.effect4d, null);
261
               mText      = (TextView)effect.findViewById(R.id.effect4dText);
262
               seek[0]    = (SeekBar)effect.findViewById(R.id.effect4dbar1);
263
               seek[1]    = (SeekBar)effect.findViewById(R.id.effect4dbar2);
264
               seek[2]    = (SeekBar)effect.findViewById(R.id.effect4dbar3);
265
               seek[3]    = (SeekBar)effect.findViewById(R.id.effect4dbar4);
266
               mSeekID[0] = seek[0].getId();
267
               mSeekID[1] = seek[1].getId();
268
               mSeekID[2] = seek[2].getId();
269
               mSeekID[3] = seek[3].getId();
270 50f58197 Leszek Koltunski
               break;
271 56cbe1cf Leszek Koltunski
      default: android.util.Log.e("Vertex3DEffect", "dimension "+mDimension+" not supported!");
272 7e9be46d Leszek Koltunski
               return null;
273 50f58197 Leszek Koltunski
      }
274
275
    setDefaultInter();
276
    fillStatics();
277
    setText();
278
279
    for(int i=0; i<mDimension; i++)
280
      {
281 75c7def3 Leszek Koltunski
      seek[i].setOnSeekBarChangeListener(this);
282
      seek[i].setProgress( mInter[i] );
283 50f58197 Leszek Koltunski
      }
284
285 7e9be46d Leszek Koltunski
    return effect;
286 50f58197 Leszek Koltunski
    }
287
288 75c7def3 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
289
290 65270124 Leszek Koltunski
  public View createRegion()
291 75c7def3 Leszek Koltunski
    {
292 65270124 Leszek Koltunski
    Fragment3DActivity act = mAct.get();
293
294 75c7def3 Leszek Koltunski
    View region = act.getLayoutInflater().inflate(R.layout.effectregion, null);
295
296
    SeekBar[] seek = new SeekBar[4];
297
298
    seek[0] = (SeekBar)region.findViewById(R.id.effectRegionBarX );
299
    seek[1] = (SeekBar)region.findViewById(R.id.effectRegionBarY );
300
    seek[2] = (SeekBar)region.findViewById(R.id.effectRegionBarRX);
301
    seek[3] = (SeekBar)region.findViewById(R.id.effectRegionBarRY);
302
303
    mSeekRegionID[0] = seek[0].getId();
304
    mSeekRegionID[1] = seek[1].getId();
305
    mSeekRegionID[2] = seek[2].getId();
306
    mSeekRegionID[3] = seek[3].getId();
307
308
    mTextRegion    = (TextView)region.findViewById(R.id.effectRegionText);
309
310
    setDefaultRegionInter();
311
    fillRegionStatics();
312
    setRegionText();
313
314
    for(int i=0; i<4; i++)
315
      {
316
      seek[i].setOnSeekBarChangeListener(this);
317
      seek[i].setProgress( mInterRegion[i] );
318
      }
319
320
    return region;
321
    }
322
323 50f58197 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
324
325
  public void onProgressChanged(SeekBar bar, int progress, boolean fromUser)
326
    {
327 75c7def3 Leszek Koltunski
    if ( mDimension>=1 && bar.getId()==mSeekID[0] )
328
      {
329
      mInter[0] = progress;
330
      fillStatics();
331
      setText();
332
      }
333
    if ( mDimension>=2 && bar.getId()==mSeekID[1] )
334
      {
335
      mInter[1] = progress;
336
      fillStatics();
337
      setText();
338
      }
339
    if ( mDimension>=3 && bar.getId()==mSeekID[2] )
340
      {
341
      mInter[2] = progress;
342
      fillStatics();
343
      setText();
344
      }
345
    if ( mDimension>=4 && bar.getId()==mSeekID[3] )
346
      {
347
      mInter[3] = progress;
348
      fillStatics();
349
      setText();
350
      }
351
352
    if( bar.getId() == mSeekRegionID[0] )
353
      {
354
      mInterRegion[0] = progress;
355
      fillRegionStatics();
356
      setRegionText();
357
      }
358
    if( bar.getId() == mSeekRegionID[1] )
359
      {
360
      mInterRegion[1] = progress;
361
      fillRegionStatics();
362
      setRegionText();
363
      }
364
    if( bar.getId() == mSeekRegionID[2] )
365
      {
366
      mInterRegion[2] = progress;
367
      fillRegionStatics();
368
      setRegionText();
369
      }
370
    if( bar.getId() == mSeekRegionID[3] )
371
      {
372
      mInterRegion[3] = progress;
373
      fillRegionStatics();
374
      setRegionText();
375
      }
376 50f58197 Leszek Koltunski
377
    }
378
379
///////////////////////////////////////////////////////////////////////////////////////////////////
380
381
  public void onStartTrackingTouch(SeekBar bar) { }
382
383
///////////////////////////////////////////////////////////////////////////////////////////////////
384
385
  public void onStopTrackingTouch(SeekBar bar)  { }
386
  }