mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-10-24 11:49:05 +02:00
109 lines
3.0 KiB
Java
109 lines
3.0 KiB
Java
package com.henrikrydgard.libnative;
|
|
|
|
// Touch- and sensor-enabled GLSurfaceView.
|
|
// Supports simple multitouch and pressure.
|
|
|
|
import android.app.Activity;
|
|
import android.hardware.Sensor;
|
|
import android.hardware.SensorEvent;
|
|
import android.hardware.SensorEventListener;
|
|
import android.hardware.SensorManager;
|
|
import android.opengl.GLSurfaceView;
|
|
// import android.os.Build;
|
|
// import android.util.Log;
|
|
import android.view.MotionEvent;
|
|
|
|
public class NativeGLView extends GLSurfaceView implements SensorEventListener {
|
|
private static String TAG = "NativeGLView";
|
|
private SensorManager mSensorManager;
|
|
private Sensor mAccelerometer;
|
|
|
|
public NativeGLView(NativeActivity activity) {
|
|
super(activity);
|
|
setEGLContextClientVersion(2);
|
|
/*
|
|
if (Build.VERSION.SDK_INT >= 11) {
|
|
try {
|
|
Method method_setPreserveEGLContextOnPause = GLSurfaceView.class.getMethod(
|
|
"setPreserveEGLContextOnPause", new Class[] { Boolean.class });
|
|
Log.i(TAG, "Invoking setPreserveEGLContextOnPause");
|
|
method_setPreserveEGLContextOnPause.invoke(this, true);
|
|
} catch (NoSuchMethodException e) {
|
|
e.printStackTrace();
|
|
} catch (IllegalArgumentException e) {
|
|
e.printStackTrace();
|
|
} catch (IllegalAccessException e) {
|
|
e.printStackTrace();
|
|
} catch (InvocationTargetException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}*/
|
|
|
|
// setEGLConfigChooser(5, 5, 5, 0, 16, 0);
|
|
// setDebugFlags(DEBUG_CHECK_GL_ERROR | DEBUG_LOG_GL_CALLS);
|
|
mSensorManager = (SensorManager)activity.getSystemService(Activity.SENSOR_SERVICE);
|
|
mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
|
|
}
|
|
|
|
// This needs fleshing out. A lot.
|
|
// Going to want multitouch eventually.
|
|
public boolean onTouchEvent(final MotionEvent ev) {
|
|
for (int i = 0; i < ev.getPointerCount(); i++) {
|
|
int pid = ev.getPointerId(i);
|
|
int code = 0;
|
|
|
|
final int action = ev.getActionMasked();
|
|
|
|
switch (action) {
|
|
case MotionEvent.ACTION_DOWN:
|
|
case MotionEvent.ACTION_POINTER_DOWN:
|
|
if (ev.getActionIndex() == i)
|
|
code = 1;
|
|
break;
|
|
case MotionEvent.ACTION_UP:
|
|
case MotionEvent.ACTION_POINTER_UP:
|
|
if (ev.getActionIndex() == i)
|
|
code = 2;
|
|
break;
|
|
case MotionEvent.ACTION_MOVE:
|
|
code = 3;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
if (code != 0)
|
|
{
|
|
float x = ev.getX(i);
|
|
float y = ev.getY(i);
|
|
NativeApp.touch(x, y, code, pid);
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
// Sensor management
|
|
public void onAccuracyChanged(Sensor sensor, int arg1) {
|
|
// Log.i(TAG, "onAccuracyChanged");
|
|
}
|
|
|
|
public void onSensorChanged(SensorEvent event) {
|
|
if (event.sensor.getType() != Sensor.TYPE_ACCELEROMETER) {
|
|
return;
|
|
}
|
|
// Can also look at event.timestamp for accuracy magic
|
|
NativeApp.accelerometer(event.values[0], event.values[1], event.values[2]);
|
|
}
|
|
|
|
@Override
|
|
public void onPause() {
|
|
super.onPause();
|
|
mSensorManager.unregisterListener(this);
|
|
}
|
|
|
|
@Override
|
|
public void onResume() {
|
|
super.onResume();
|
|
mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_GAME);
|
|
}
|
|
}
|