Project

General

Profile

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

examples / src / main / java / org / distorted / examples / fragment3d / Fragment3DEffect.java @ 75c7def3

1
///////////////////////////////////////////////////////////////////////////////////////////////////
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.app.Activity;
23
import android.view.View;
24
import android.widget.LinearLayout;
25
import android.widget.SeekBar;
26
import android.widget.TextView;
27

    
28
import org.distorted.examples.R;
29
import org.distorted.library.EffectNames;
30
import org.distorted.library.type.Dynamic1D;
31
import org.distorted.library.type.Dynamic3D;
32
import org.distorted.library.type.Dynamic4D;
33
import org.distorted.library.type.Static1D;
34
import org.distorted.library.type.Static3D;
35
import org.distorted.library.type.Static4D;
36

    
37
///////////////////////////////////////////////////////////////////////////////////////////////////
38

    
39
public class Fragment3DEffect implements SeekBar.OnSeekBarChangeListener
40
  {
41
  private EffectNames mName;
42
  private int[] mInter;
43
  private int[] mInterRegion;
44
  private int[] mSeekID;
45
  private int[] mSeekRegionID;
46
  private int mDimension;
47
  private TextView mText;
48
  private TextView mTextRegion;
49

    
50
  private Dynamic1D mDyn1;
51
  private Dynamic3D mDyn3;
52
  private Static1D  mSta1;
53
  private Static3D  mSta3;
54
  private Dynamic4D mRegionDyn;
55
  private Static4D  mRegionSta;
56

    
57
///////////////////////////////////////////////////////////////////////////////////////////////////
58

    
59
  private void fillRegionStatics()
60
    {
61
    float factorX = 2.0f;
62
    float factorY = 2.0f;
63

    
64
    float  x = (mInterRegion[0]-50)*factorX;
65
    float  y = (mInterRegion[1]-50)*factorY;
66
    float rx = (mInterRegion[2]   )*factorX;
67
    float ry = (mInterRegion[3]   )*factorY;
68

    
69
    mRegionSta.set(x,y,rx,ry);
70
    }
71

    
72
///////////////////////////////////////////////////////////////////////////////////////////////////
73

    
74
  private void setDefaultRegionInter()
75
    {
76
    mInterRegion[0] = 50;
77
    mInterRegion[1] = 50;
78
    mInterRegion[2] = 50;
79
    mInterRegion[3] = 50;
80
    }
81

    
82
///////////////////////////////////////////////////////////////////////////////////////////////////
83

    
84
  private void setRegionText()
85
    {
86
    mTextRegion.setText("region ("+mRegionSta.getX()+","+mRegionSta.getY()+","+mRegionSta.getZ()+","+mRegionSta.getW()+")");
87
    }
88

    
89
///////////////////////////////////////////////////////////////////////////////////////////////////
90

    
91
  private void fillStatics()
92
    {
93
    switch(mName)
94
      {
95
      case CHROMA    : mSta1.set(mInter[0]/100.0f);
96
                       mSta3.set(255.0f*mInter[1]/100,
97
                                 255.0f*mInter[2]/100,
98
                                 255.0f*mInter[3]/100);
99
                       break;
100
      case ALPHA     : mSta1.set(mInter[0]/100.0f);
101
                       break;
102
      case SATURATION: mSta1.set(mInter[0]/100.0f);
103
                       break;
104
      case CONTRAST  : mSta1.set(mInter[0]/100.0f);
105
                       break;
106
      case BRIGHTNESS: mSta1.set(mInter[0]/100.0f);
107
                       break;
108
      }
109
    }
110

    
111
///////////////////////////////////////////////////////////////////////////////////////////////////
112

    
113
  private void setDefaultInter()
114
    {
115
    switch(mName)
116
      {
117
      case CHROMA    : mInter[0] =   0;
118
                       mInter[1] =   0;
119
                       mInter[2] =   0;
120
                       mInter[3] =   0;
121
                       break;
122
      case ALPHA     : mInter[0] = 100;
123
                       break;
124
      case SATURATION: mInter[0] = 100;
125
                       break;
126
      case CONTRAST  : mInter[0] = 100;
127
                       break;
128
      case BRIGHTNESS: mInter[0] = 100;
129
                       break;
130
      }
131
    }
132

    
133
///////////////////////////////////////////////////////////////////////////////////////////////////
134

    
135
  private void setText()
136
    {
137
    switch(mName)
138
      {
139
      case CHROMA    : mText.setText("chroma "+mSta1.getX()+"("+mSta3.getX()+","+mSta3.getY()+","+mSta3.getZ()+")");
140
                       break;
141
      case ALPHA     : mText.setText("alpha ("+mSta1.getX()+")");
142
                       break;
143
      case SATURATION: mText.setText("saturation ("+mSta1.getX()+")");
144
                       break;
145
      case CONTRAST  : mText.setText("contrast ("+mSta1.getX()+")");
146
                       break;
147
      case BRIGHTNESS: mText.setText("brightness ("+mSta1.getX()+")");
148
                       break;
149
      }
150
    }
151

    
152
///////////////////////////////////////////////////////////////////////////////////////////////////
153

    
154
  public Fragment3DEffect(EffectNames name)
155
    {
156
    mName = name;
157

    
158
    if( mName==EffectNames.CHROMA )
159
      {
160
      mDimension = 4;
161
      mDyn3 = new Dynamic3D();
162
      mSta3 = new Static3D(0,0,0);
163
      mDyn3.add(mSta3);
164
      }
165
    else
166
      {
167
      mDimension = 1;
168
      mDyn3 = null;
169
      mSta3 = null;
170
      }
171

    
172
    mInter = new int[mDimension];
173
    mSeekID= new int[mDimension];
174

    
175
    mDyn1 = new Dynamic1D();
176
    mSta1 = new Static1D(0);
177
    mDyn1.add(mSta1);
178

    
179
    mInterRegion = new int[4];
180
    mSeekRegionID= new int[4];
181
    mRegionDyn   = new Dynamic4D();
182
    mRegionSta   = new Static4D(0,0,0,0);
183
    mRegionDyn.add(mRegionSta);
184
    }
185

    
186
///////////////////////////////////////////////////////////////////////////////////////////////////
187

    
188
  public Dynamic1D getDyn1()
189
    {
190
    return mDyn1;
191
    }
192

    
193
///////////////////////////////////////////////////////////////////////////////////////////////////
194

    
195
  public Dynamic3D getDyn3()
196
    {
197
    return mDyn3;
198
    }
199

    
200
///////////////////////////////////////////////////////////////////////////////////////////////////
201

    
202
  public Dynamic4D getRegion()
203
    {
204
    return mRegionDyn;
205
    }
206

    
207
///////////////////////////////////////////////////////////////////////////////////////////////////
208

    
209
  public View createView(Activity act)
210
    {
211
    View effect;
212
    SeekBar[] seek = new SeekBar[mDimension];
213

    
214
    switch(mDimension)
215
      {
216
      case 1 : effect     = act.getLayoutInflater().inflate(R.layout.effect1d, null);
217
               mText      = (TextView)effect.findViewById(R.id.effect1dText);
218
               seek[0]    = (SeekBar)effect.findViewById(R.id.effect1dbar1);
219
               mSeekID[0] = seek[0].getId();
220
               break;
221
      case 2 : effect     = act.getLayoutInflater().inflate(R.layout.effect2d, null);
222
               mText      = (TextView)effect.findViewById(R.id.effect2dText);
223
               seek[0]    = (SeekBar)effect.findViewById(R.id.effect2dbar1);
224
               seek[1]    = (SeekBar)effect.findViewById(R.id.effect2dbar2);
225
               mSeekID[0] = seek[0].getId();
226
               mSeekID[1] = seek[1].getId();
227
               break;
228
      case 3 : effect     = act.getLayoutInflater().inflate(R.layout.effect3d, null);
229
               mText      = (TextView)effect.findViewById(R.id.effect3dText);
230
               seek[0]    = (SeekBar)effect.findViewById(R.id.effect3dbar1);
231
               seek[1]    = (SeekBar)effect.findViewById(R.id.effect3dbar2);
232
               seek[2]    = (SeekBar)effect.findViewById(R.id.effect3dbar3);
233
               mSeekID[0] = seek[0].getId();
234
               mSeekID[1] = seek[1].getId();
235
               mSeekID[2] = seek[2].getId();
236
               break;
237
      case 4 : effect     = act.getLayoutInflater().inflate(R.layout.effect4d, null);
238
               mText      = (TextView)effect.findViewById(R.id.effect4dText);
239
               seek[0]    = (SeekBar)effect.findViewById(R.id.effect4dbar1);
240
               seek[1]    = (SeekBar)effect.findViewById(R.id.effect4dbar2);
241
               seek[2]    = (SeekBar)effect.findViewById(R.id.effect4dbar3);
242
               seek[3]    = (SeekBar)effect.findViewById(R.id.effect4dbar4);
243
               mSeekID[0] = seek[0].getId();
244
               mSeekID[1] = seek[1].getId();
245
               mSeekID[2] = seek[2].getId();
246
               mSeekID[3] = seek[3].getId();
247
               break;
248
      default: android.util.Log.e("Fragment3DEffect", "dimension "+mDimension+" not supported!");
249
               return null;
250
      }
251

    
252
    setDefaultInter();
253
    fillStatics();
254
    setText();
255

    
256
    for(int i=0; i<mDimension; i++)
257
      {
258
      seek[i].setOnSeekBarChangeListener(this);
259
      seek[i].setProgress( mInter[i] );
260
      }
261

    
262
    return effect;
263
    }
264

    
265
///////////////////////////////////////////////////////////////////////////////////////////////////
266

    
267
  public View createRegion(Activity act)
268
    {
269
    View region = act.getLayoutInflater().inflate(R.layout.effectregion, null);
270

    
271
    SeekBar[] seek = new SeekBar[4];
272

    
273
    seek[0] = (SeekBar)region.findViewById(R.id.effectRegionBarX );
274
    seek[1] = (SeekBar)region.findViewById(R.id.effectRegionBarY );
275
    seek[2] = (SeekBar)region.findViewById(R.id.effectRegionBarRX);
276
    seek[3] = (SeekBar)region.findViewById(R.id.effectRegionBarRY);
277

    
278
    mSeekRegionID[0] = seek[0].getId();
279
    mSeekRegionID[1] = seek[1].getId();
280
    mSeekRegionID[2] = seek[2].getId();
281
    mSeekRegionID[3] = seek[3].getId();
282

    
283
    mTextRegion    = (TextView)region.findViewById(R.id.effectRegionText);
284

    
285
    setDefaultRegionInter();
286
    fillRegionStatics();
287
    setRegionText();
288

    
289
    for(int i=0; i<4; i++)
290
      {
291
      seek[i].setOnSeekBarChangeListener(this);
292
      seek[i].setProgress( mInterRegion[i] );
293
      }
294

    
295
    return region;
296
    }
297

    
298
///////////////////////////////////////////////////////////////////////////////////////////////////
299

    
300
  public void onProgressChanged(SeekBar bar, int progress, boolean fromUser)
301
    {
302
    if ( mDimension>=1 && bar.getId()==mSeekID[0] )
303
      {
304
      mInter[0] = progress;
305
      fillStatics();
306
      setText();
307
      }
308
    if ( mDimension>=2 && bar.getId()==mSeekID[1] )
309
      {
310
      mInter[1] = progress;
311
      fillStatics();
312
      setText();
313
      }
314
    if ( mDimension>=3 && bar.getId()==mSeekID[2] )
315
      {
316
      mInter[2] = progress;
317
      fillStatics();
318
      setText();
319
      }
320
    if ( mDimension>=4 && bar.getId()==mSeekID[3] )
321
      {
322
      mInter[3] = progress;
323
      fillStatics();
324
      setText();
325
      }
326

    
327
    if( bar.getId() == mSeekRegionID[0] )
328
      {
329
      mInterRegion[0] = progress;
330
      fillRegionStatics();
331
      setRegionText();
332
      }
333
    if( bar.getId() == mSeekRegionID[1] )
334
      {
335
      mInterRegion[1] = progress;
336
      fillRegionStatics();
337
      setRegionText();
338
      }
339
    if( bar.getId() == mSeekRegionID[2] )
340
      {
341
      mInterRegion[2] = progress;
342
      fillRegionStatics();
343
      setRegionText();
344
      }
345
    if( bar.getId() == mSeekRegionID[3] )
346
      {
347
      mInterRegion[3] = progress;
348
      fillRegionStatics();
349
      setRegionText();
350
      }
351

    
352
    }
353

    
354
///////////////////////////////////////////////////////////////////////////////////////////////////
355

    
356
  public void onStartTrackingTouch(SeekBar bar) { }
357

    
358
///////////////////////////////////////////////////////////////////////////////////////////////////
359

    
360
  public void onStopTrackingTouch(SeekBar bar)  { }
361
  }
(2-2/4)