commit
6883c0625b
7 changed files with 62 additions and 36 deletions
|
@ -14,7 +14,7 @@ import net.osmand.data.RotatedTileBox;
|
|||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.OsmandSettings;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.helpers.SimpleTwoFingerTapDetector;
|
||||
import net.osmand.plus.helpers.TwoFingerTapDetector;
|
||||
import net.osmand.plus.render.NativeOsmandLibrary;
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
|
@ -75,7 +75,7 @@ public class GLActivity extends Activity {
|
|||
}
|
||||
|
||||
private boolean afterTwoFingerTap = false;
|
||||
SimpleTwoFingerTapDetector twoFingerTapDetector = new SimpleTwoFingerTapDetector() {
|
||||
TwoFingerTapDetector twoFingerTapDetector = new TwoFingerTapDetector() {
|
||||
@Override
|
||||
public void onTwoFingerTap() {
|
||||
afterTwoFingerTap = true;
|
||||
|
|
|
@ -777,4 +777,9 @@ public class MapActivity extends AccessibleActivity {
|
|||
public View getLayout() {
|
||||
return getWindow().getDecorView().findViewById(android.R.id.content);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onTouchEvent(MotionEvent event) {
|
||||
return mapViewController.onTouchEvent(event);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@ import android.view.ViewConfiguration;
|
|||
/**
|
||||
* Created by Barsik on 24.06.2014.
|
||||
*/
|
||||
public abstract class SimpleTwoFingerTapDetector {
|
||||
public abstract class TwoFingerTapDetector {
|
||||
private static final int TIMEOUT = ViewConfiguration.getTapTimeout() + 100;
|
||||
private long mFirstDownTime = 0;
|
||||
private byte mTwoFingerTapCount = 0;
|
23
OsmAnd/src/net/osmand/plus/render/NativeCppLibrary.java
Normal file
23
OsmAnd/src/net/osmand/plus/render/NativeCppLibrary.java
Normal file
|
@ -0,0 +1,23 @@
|
|||
package net.osmand.plus.render;
|
||||
|
||||
import net.osmand.NativeLibrary;
|
||||
|
||||
/**
|
||||
* Created by Denis on 02.10.2014.
|
||||
*/
|
||||
public class NativeCppLibrary extends NativeLibrary {
|
||||
|
||||
public NativeCppLibrary(boolean newLibrary) {
|
||||
super(newLibrary);
|
||||
}
|
||||
|
||||
public static void loadLibrary(String name) {
|
||||
try {
|
||||
System.out.println("Loading " + name);
|
||||
System.loadLibrary(name);
|
||||
} catch( UnsatisfiedLinkError e ) {
|
||||
System.err.println("Failed to load '"+name + "':" + e);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -23,7 +23,7 @@ import net.osmand.plus.OsmAndFormatter;
|
|||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.OsmandSettings;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.helpers.SimpleTwoFingerTapDetector;
|
||||
import net.osmand.plus.helpers.TwoFingerTapDetector;
|
||||
import net.osmand.plus.views.MultiTouchSupport.MultiTouchZoomListener;
|
||||
import net.osmand.plus.views.OsmandMapLayer.DrawSettings;
|
||||
import net.osmand.plus.views.controllers.JavaViewController;
|
||||
|
@ -81,9 +81,6 @@ public class OsmandMapTileView extends SurfaceView implements IMapDownloaderCall
|
|||
|
||||
protected static final int emptyTileDivisor = 16;
|
||||
|
||||
|
||||
|
||||
|
||||
public interface OnLongClickListener {
|
||||
public boolean onLongPressEvent(PointF point);
|
||||
}
|
||||
|
@ -148,7 +145,7 @@ public class OsmandMapTileView extends SurfaceView implements IMapDownloaderCall
|
|||
private Paint paintImg;
|
||||
|
||||
private boolean afterTwoFingerTap = false;
|
||||
SimpleTwoFingerTapDetector twoFingerTapDetector = new SimpleTwoFingerTapDetector() {
|
||||
TwoFingerTapDetector twoFingerTapDetector = new TwoFingerTapDetector() {
|
||||
@Override
|
||||
public void onTwoFingerTap() {
|
||||
afterTwoFingerTap = true;
|
||||
|
|
|
@ -24,7 +24,6 @@ import java.util.List;
|
|||
* Created by Натали on 29.09.2014.
|
||||
*/
|
||||
public class JavaViewController extends MapViewBaseController {
|
||||
private GLSurfaceView glSurfaceView;
|
||||
private OsmandMapTileView mapTileView;
|
||||
private OsmandSettings settings;
|
||||
private MapActivity mapActivity;
|
||||
|
|
|
@ -22,7 +22,8 @@ import net.osmand.plus.OsmandSettings;
|
|||
import net.osmand.plus.activities.MapActivity;
|
||||
import net.osmand.plus.activities.MapActivityLayers;
|
||||
import net.osmand.plus.base.MapViewTrackingUtilities;
|
||||
import net.osmand.plus.helpers.SimpleTwoFingerTapDetector;
|
||||
import net.osmand.plus.helpers.TwoFingerTapDetector;
|
||||
import net.osmand.plus.render.NativeCppLibrary;
|
||||
import net.osmand.plus.render.NativeOsmandLibrary;
|
||||
import net.osmand.plus.views.OsmandMapLayer;
|
||||
import net.osmand.plus.views.OsmandMapTileView;
|
||||
|
@ -36,14 +37,6 @@ import java.util.List;
|
|||
*/
|
||||
public class NativeViewController extends MapViewBaseController {
|
||||
|
||||
static {
|
||||
NativeOsmandLibrary.loadLibrary("gnustl_shared");
|
||||
NativeOsmandLibrary.loadLibrary("Qt5Core");
|
||||
NativeOsmandLibrary.loadLibrary("Qt5Network");
|
||||
NativeOsmandLibrary.loadLibrary("Qt5Sql");
|
||||
NativeOsmandLibrary.loadLibrary("OsmAndCoreWithJNI");
|
||||
}
|
||||
|
||||
private GLSurfaceView glSurfaceView;
|
||||
private OsmandSettings settings;
|
||||
private MapActivity mapActivity;
|
||||
|
@ -74,7 +67,7 @@ public class NativeViewController extends MapViewBaseController {
|
|||
public static final String NATIVE_TAG = "NativeRender";
|
||||
private CoreResourcesFromAndroidAssets coreResources;
|
||||
|
||||
SimpleTwoFingerTapDetector twoFingerTapDetector = new SimpleTwoFingerTapDetector() {
|
||||
TwoFingerTapDetector twoFingerTapDetector = new TwoFingerTapDetector() {
|
||||
@Override
|
||||
public void onTwoFingerTap() {
|
||||
currentViewport.setZoom(currentViewport.getZoom() - 1);
|
||||
|
@ -87,9 +80,18 @@ public class NativeViewController extends MapViewBaseController {
|
|||
this.glSurfaceView = surfaceView;
|
||||
this.settings = activity.getMyApplication().getSettings();
|
||||
this.mapActivity = activity;
|
||||
loadLibraries();
|
||||
setupView();
|
||||
}
|
||||
|
||||
private void loadLibraries() {
|
||||
NativeCppLibrary.loadLibrary("gnustl_shared");
|
||||
NativeCppLibrary.loadLibrary("Qt5Core");
|
||||
NativeCppLibrary.loadLibrary("Qt5Network");
|
||||
NativeCppLibrary.loadLibrary("Qt5Sql");
|
||||
NativeCppLibrary.loadLibrary("OsmAndCoreWithJNI");
|
||||
}
|
||||
|
||||
private void setupView() {
|
||||
WindowManager mgr = (WindowManager)mapActivity.getSystemService(Context.WINDOW_SERVICE);
|
||||
DisplayMetrics dm = new DisplayMetrics();
|
||||
|
@ -252,8 +254,8 @@ public class NativeViewController extends MapViewBaseController {
|
|||
}
|
||||
|
||||
private class EGLContextFactory implements GLSurfaceView.EGLContextFactory {
|
||||
private EGLContext _gpuWorkerContext;
|
||||
private EGLSurface _gpuWorkerFakeSurface;
|
||||
private EGLContext gpuWorkerContext;
|
||||
private EGLSurface gpuWorkerFakeSurface;
|
||||
|
||||
public EGLContext createContext(EGL10 egl, EGLDisplay display, EGLConfig eglConfig) {
|
||||
final String eglExtensions = egl.eglQueryString(display, EGL10.EGL_EXTENSIONS);
|
||||
|
@ -280,7 +282,7 @@ public class NativeViewController extends MapViewBaseController {
|
|||
|
||||
Log.i(NATIVE_TAG, "Creating GPU worker context...");
|
||||
try {
|
||||
_gpuWorkerContext = egl.eglCreateContext(
|
||||
gpuWorkerContext = egl.eglCreateContext(
|
||||
display,
|
||||
eglConfig,
|
||||
mainContext,
|
||||
|
@ -288,13 +290,13 @@ public class NativeViewController extends MapViewBaseController {
|
|||
} catch (Exception e) {
|
||||
Log.e(NATIVE_TAG, "Failed to create GPU worker context", e);
|
||||
}
|
||||
if (_gpuWorkerContext == null || _gpuWorkerContext == EGL10.EGL_NO_CONTEXT)
|
||||
if (gpuWorkerContext == null || gpuWorkerContext == EGL10.EGL_NO_CONTEXT)
|
||||
{
|
||||
Log.e(NATIVE_TAG, "Failed to create GPU worker context: " + egl.eglGetError());
|
||||
_gpuWorkerContext = null;
|
||||
gpuWorkerContext = null;
|
||||
}
|
||||
|
||||
if (_gpuWorkerContext != null)
|
||||
if (gpuWorkerContext != null)
|
||||
{
|
||||
Log.i(NATIVE_TAG, "Creating GPU worker fake surface...");
|
||||
try {
|
||||
|
@ -302,21 +304,21 @@ public class NativeViewController extends MapViewBaseController {
|
|||
EGL10.EGL_WIDTH, 1,
|
||||
EGL10.EGL_HEIGHT, 1,
|
||||
EGL10.EGL_NONE };
|
||||
_gpuWorkerFakeSurface = egl.eglCreatePbufferSurface(display, eglConfig, surfaceAttribList);
|
||||
gpuWorkerFakeSurface = egl.eglCreatePbufferSurface(display, eglConfig, surfaceAttribList);
|
||||
} catch (Exception e) {
|
||||
Log.e(NATIVE_TAG, "Failed to create GPU worker fake surface", e);
|
||||
}
|
||||
if (_gpuWorkerFakeSurface == null || _gpuWorkerFakeSurface == EGL10.EGL_NO_SURFACE)
|
||||
if (gpuWorkerFakeSurface == null || gpuWorkerFakeSurface == EGL10.EGL_NO_SURFACE)
|
||||
{
|
||||
Log.e(NATIVE_TAG, "Failed to create GPU worker fake surface: " + egl.eglGetError());
|
||||
_gpuWorkerFakeSurface = null;
|
||||
gpuWorkerFakeSurface = null;
|
||||
}
|
||||
}
|
||||
|
||||
MapRendererSetupOptions rendererSetupOptions = new MapRendererSetupOptions();
|
||||
if (_gpuWorkerContext != null && _gpuWorkerFakeSurface != null) {
|
||||
if (gpuWorkerContext != null && gpuWorkerFakeSurface != null) {
|
||||
rendererSetupOptions.setGpuWorkerThreadEnabled(true);
|
||||
gpuWorkerThreadPrologue = new GpuWorkerThreadPrologue(egl, display, _gpuWorkerContext, _gpuWorkerFakeSurface);
|
||||
gpuWorkerThreadPrologue = new GpuWorkerThreadPrologue(egl, display, gpuWorkerContext, gpuWorkerFakeSurface);
|
||||
rendererSetupOptions.setGpuWorkerThreadPrologue(gpuWorkerThreadPrologue.getBinding());
|
||||
gpuWorkerThreadEpilogue = new GpuWorkerThreadEpilogue(egl);
|
||||
rendererSetupOptions.setGpuWorkerThreadEpilogue(gpuWorkerThreadEpilogue.getBinding());
|
||||
|
@ -333,14 +335,14 @@ public class NativeViewController extends MapViewBaseController {
|
|||
public void destroyContext(EGL10 egl, EGLDisplay display, EGLContext context) {
|
||||
egl.eglDestroyContext(display, context);
|
||||
|
||||
if (_gpuWorkerContext != null) {
|
||||
egl.eglDestroyContext(display, _gpuWorkerContext);
|
||||
_gpuWorkerContext = null;
|
||||
if (gpuWorkerContext != null) {
|
||||
egl.eglDestroyContext(display, gpuWorkerContext);
|
||||
gpuWorkerContext = null;
|
||||
}
|
||||
|
||||
if (_gpuWorkerFakeSurface != null) {
|
||||
egl.eglDestroySurface(display, _gpuWorkerFakeSurface);
|
||||
_gpuWorkerFakeSurface = null;
|
||||
if (gpuWorkerFakeSurface != null) {
|
||||
egl.eglDestroySurface(display, gpuWorkerFakeSurface);
|
||||
gpuWorkerFakeSurface = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue