Skip to content

Commit 874288a

Browse files
author
Ferenc Gerlits
committed
Refactoring: move handler definitions to the main activity class
1 parent 6fb274a commit 874288a

3 files changed

Lines changed: 108 additions & 104 deletions

File tree

app/src/main/java/ferenc_gerlits/hypercube_viewer/MainActivity.java

Lines changed: 72 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@
1414

1515
public class MainActivity extends AppCompatActivity {
1616

17+
private static final double DISTANCE_OF_VERTICES_FROM_THE_ORIGIN = 2;
18+
private static final double RIGHT_ANGLE = Math.PI / 2;
19+
private static final int HALF_OF_MAX_RANGE_OF_SLIDERS = 500;
20+
1721
private MyGLSurfaceView surfaceView;
1822
private SeekBar translation;
1923
private SeekBar rotateWX;
@@ -31,6 +35,8 @@ protected void onCreate(Bundle savedInstanceState) {
3135
rotateWX = findViewById(R.id.rotateWX);
3236
rotateWY = findViewById(R.id.rotateWY);
3337
rotateWZ = findViewById(R.id.rotateWZ);
38+
39+
attachHandlers();
3440
}
3541

3642
@Override
@@ -57,12 +63,74 @@ public boolean onOptionsItemSelected(MenuItem item) {
5763
}
5864
}
5965

66+
private void attachHandlers() {
67+
translation.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
68+
@Override
69+
public void onProgressChanged(SeekBar seekBar, int position, boolean byUser) {
70+
surfaceView.setTranslation(scaleToBetweenPlusAndMinusX(position, DISTANCE_OF_VERTICES_FROM_THE_ORIGIN));
71+
surfaceView.requestRender();
72+
}
73+
74+
@Override
75+
public void onStartTrackingTouch(SeekBar seekBar) { /* ignore */ }
76+
77+
@Override
78+
public void onStopTrackingTouch(SeekBar seekBar) { /* ignore */ }
79+
});
80+
81+
rotateWX.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
82+
@Override
83+
public void onProgressChanged(SeekBar seekBar, int position, boolean byUser) {
84+
surfaceView.setRotationWX(scaleToBetweenPlusAndMinusX(position, RIGHT_ANGLE));
85+
surfaceView.requestRender();
86+
}
87+
88+
@Override
89+
public void onStartTrackingTouch(SeekBar seekBar) { /* ignore */ }
90+
91+
@Override
92+
public void onStopTrackingTouch(SeekBar seekBar) { /* ignore */ }
93+
});
94+
95+
rotateWY.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
96+
@Override
97+
public void onProgressChanged(SeekBar seekBar, int position, boolean byUser) {
98+
surfaceView.setRotationWY(scaleToBetweenPlusAndMinusX(position, RIGHT_ANGLE));
99+
surfaceView.requestRender();
100+
}
101+
102+
@Override
103+
public void onStartTrackingTouch(SeekBar seekBar) { /* ignore */ }
104+
105+
@Override
106+
public void onStopTrackingTouch(SeekBar seekBar) { /* ignore */ }
107+
});
108+
109+
rotateWZ.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
110+
@Override
111+
public void onProgressChanged(SeekBar seekBar, int position, boolean byUser) {
112+
surfaceView.setRotationWZ(scaleToBetweenPlusAndMinusX(position, RIGHT_ANGLE));
113+
surfaceView.requestRender();
114+
}
115+
116+
@Override
117+
public void onStartTrackingTouch(SeekBar seekBar) { /* ignore */ }
118+
119+
@Override
120+
public void onStopTrackingTouch(SeekBar seekBar) { /* ignore */ }
121+
});
122+
}
123+
124+
private static double scaleToBetweenPlusAndMinusX(double position, double x) {
125+
return (position - HALF_OF_MAX_RANGE_OF_SLIDERS) / HALF_OF_MAX_RANGE_OF_SLIDERS * x;
126+
}
127+
60128
private void reset() {
61129
surfaceView.resetXYZ();
62-
translation.setProgress((int)MyGLRenderer.HALF_OF_MAX_RANGE_OF_SLIDERS);
63-
rotateWX.setProgress((int)MyGLRenderer.HALF_OF_MAX_RANGE_OF_SLIDERS);
64-
rotateWY.setProgress((int)MyGLRenderer.HALF_OF_MAX_RANGE_OF_SLIDERS);
65-
rotateWZ.setProgress((int)MyGLRenderer.HALF_OF_MAX_RANGE_OF_SLIDERS);
130+
translation.setProgress(HALF_OF_MAX_RANGE_OF_SLIDERS);
131+
rotateWX.setProgress(HALF_OF_MAX_RANGE_OF_SLIDERS);
132+
rotateWY.setProgress(HALF_OF_MAX_RANGE_OF_SLIDERS);
133+
rotateWZ.setProgress(HALF_OF_MAX_RANGE_OF_SLIDERS);
66134
}
67135

68136
private void showHelp() {
@@ -78,20 +146,4 @@ private void showAbout() {
78146
intent.putExtra(TEXT, getString(R.string.about_text));
79147
startActivity(intent);
80148
}
81-
82-
public SeekBar getTranslation() {
83-
return translation;
84-
}
85-
86-
public SeekBar getRotateWX() {
87-
return rotateWX;
88-
}
89-
90-
public SeekBar getRotateWY() {
91-
return rotateWY;
92-
}
93-
94-
public SeekBar getRotateWZ() {
95-
return rotateWZ;
96-
}
97149
}

app/src/main/java/ferenc_gerlits/hypercube_viewer/MyGLRenderer.java

Lines changed: 16 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,14 @@
11
package ferenc_gerlits.hypercube_viewer;
22

3-
import android.content.Context;
43
import android.opengl.GLES20;
54
import android.opengl.GLSurfaceView;
65
import android.opengl.Matrix;
7-
import android.widget.SeekBar;
86

97
import javax.microedition.khronos.egl.EGLConfig;
108
import javax.microedition.khronos.opengles.GL10;
119

1210
public class MyGLRenderer implements GLSurfaceView.Renderer {
1311

14-
public static final double DISTANCE_OF_VERTICES_FROM_THE_ORIGIN = 2;
15-
public static final double RIGHT_ANGLE = Math.PI / 2;
16-
public static final double HALF_OF_MAX_RANGE_OF_SLIDERS = 500;
17-
18-
private final Context context;
19-
private final MyGLSurfaceView surfaceView;
20-
2112
private double translation = 0;
2213

2314
private double rotationWX = 0;
@@ -33,11 +24,6 @@ public class MyGLRenderer implements GLSurfaceView.Renderer {
3324

3425
HyperCubeDrawer hyperCube;
3526

36-
public MyGLRenderer(Context context, MyGLSurfaceView surfaceView) {
37-
this.context = context;
38-
this.surfaceView = surfaceView;
39-
}
40-
4127
@Override
4228
public void onSurfaceCreated(GL10 unused, EGLConfig config) {
4329
// Set the background frame color
@@ -47,8 +33,6 @@ public void onSurfaceCreated(GL10 unused, EGLConfig config) {
4733
GLES20.glDepthFunc(GLES20.GL_LESS);
4834

4935
hyperCube = new HyperCubeDrawer();
50-
51-
attachHandlers();
5236
}
5337

5438
@Override
@@ -90,70 +74,6 @@ private float[] createModelMatrix() {
9074
return modelMatrix;
9175
}
9276

93-
private void attachHandlers() {
94-
MainActivity activity = (MainActivity) context;
95-
96-
activity.getTranslation().setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
97-
@Override
98-
public void onProgressChanged(SeekBar seekBar, int position, boolean byUser) {
99-
translation = scaleToBetweenPlusAndMinusX(position, DISTANCE_OF_VERTICES_FROM_THE_ORIGIN);
100-
surfaceView.requestRender();
101-
}
102-
103-
@Override
104-
public void onStartTrackingTouch(SeekBar seekBar) { /* ignore */ }
105-
106-
@Override
107-
public void onStopTrackingTouch(SeekBar seekBar) { /* ignore */ }
108-
});
109-
110-
activity.getRotateWX().setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
111-
@Override
112-
public void onProgressChanged(SeekBar seekBar, int position, boolean byUser) {
113-
rotationWX = scaleToBetweenPlusAndMinusX(position, RIGHT_ANGLE);
114-
surfaceView.requestRender();
115-
}
116-
117-
@Override
118-
public void onStartTrackingTouch(SeekBar seekBar) { /* ignore */ }
119-
120-
@Override
121-
public void onStopTrackingTouch(SeekBar seekBar) { /* ignore */ }
122-
});
123-
124-
activity.getRotateWY().setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
125-
@Override
126-
public void onProgressChanged(SeekBar seekBar, int position, boolean byUser) {
127-
rotationWY = scaleToBetweenPlusAndMinusX(position, RIGHT_ANGLE);
128-
surfaceView.requestRender();
129-
}
130-
131-
@Override
132-
public void onStartTrackingTouch(SeekBar seekBar) { /* ignore */ }
133-
134-
@Override
135-
public void onStopTrackingTouch(SeekBar seekBar) { /* ignore */ }
136-
});
137-
138-
activity.getRotateWZ().setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
139-
@Override
140-
public void onProgressChanged(SeekBar seekBar, int position, boolean byUser) {
141-
rotationWZ = scaleToBetweenPlusAndMinusX(position, RIGHT_ANGLE);
142-
surfaceView.requestRender();
143-
}
144-
145-
@Override
146-
public void onStartTrackingTouch(SeekBar seekBar) { /* ignore */ }
147-
148-
@Override
149-
public void onStopTrackingTouch(SeekBar seekBar) { /* ignore */ }
150-
});
151-
}
152-
153-
private static double scaleToBetweenPlusAndMinusX(int position, double x) {
154-
return (position - HALF_OF_MAX_RANGE_OF_SLIDERS) / HALF_OF_MAX_RANGE_OF_SLIDERS * x;
155-
}
156-
15777
private float[] sphericalToCartesian(float horizontalAngle, float verticalAngle) {
15878
final double distance = 10.0;
15979

@@ -216,4 +136,20 @@ public void resetXYZ() {
216136
horizontalAngle = 0;
217137
verticalAngle = 0;
218138
}
139+
140+
public void setTranslation(double translation) {
141+
this.translation = translation;
142+
}
143+
144+
public void setRotationWX(double rotation) {
145+
rotationWX = rotation;
146+
}
147+
148+
public void setRotationWY(double rotation) {
149+
rotationWY = rotation;
150+
}
151+
152+
public void setRotationWZ(double rotation) {
153+
rotationWZ = rotation;
154+
}
219155
}

app/src/main/java/ferenc_gerlits/hypercube_viewer/MyGLSurfaceView.java

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,20 @@ class MyGLSurfaceView extends GLSurfaceView {
99

1010
private final MyGLRenderer renderer;
1111

12+
private float previousX;
13+
private float previousY;
14+
1215
public MyGLSurfaceView(Context context, AttributeSet attributes) {
1316
super(context, attributes);
1417

1518
// Create an OpenGL ES 2.0 context
1619
setEGLContextClientVersion(2);
1720

18-
renderer = new MyGLRenderer(context, this);
21+
renderer = new MyGLRenderer();
1922
setRenderer(renderer);
2023
setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
2124
}
2225

23-
private float previousX;
24-
private float previousY;
25-
2626
@Override
2727
public boolean onTouchEvent(MotionEvent e) {
2828
float x = e.getX();
@@ -49,4 +49,20 @@ public boolean onTouchEvent(MotionEvent e) {
4949
public void resetXYZ() {
5050
renderer.resetXYZ();
5151
}
52+
53+
public void setTranslation(double translation) {
54+
renderer.setTranslation(translation);
55+
}
56+
57+
public void setRotationWX(double rotation) {
58+
renderer.setRotationWX(rotation);
59+
}
60+
61+
public void setRotationWY(double rotation) {
62+
renderer.setRotationWY(rotation);
63+
}
64+
65+
public void setRotationWZ(double rotation) {
66+
renderer.setRotationWZ(rotation);
67+
}
5268
}

0 commit comments

Comments
 (0)