api: no more sync'ed Viewport methods

- remove synchronized viewport methods: viewport MUST only be changed on main-thread
- when calling Map.setPosition() from another thread the position will be applied
  on the next main-loop iteration
This commit is contained in:
Hannes Janetzek
2014-10-24 22:20:11 +02:00
parent 381907526e
commit 8626aa2f53
10 changed files with 328 additions and 165 deletions

View File

@@ -18,16 +18,20 @@ package org.oscim.android;
import org.oscim.android.gl.GLView;
import org.oscim.map.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import android.widget.RelativeLayout.LayoutParams;
public class AndroidMap extends Map {
static final Logger log = LoggerFactory.getLogger(AndroidMap.class);
private final MapView mMapView;
final GLView mGLView;
private volatile boolean mWaitRedraw;
private volatile boolean mPausing;
private boolean mRenderRequest;
private boolean mRenderWait;
private boolean mPausing;
public AndroidMap(MapView mapView) {
super();
@@ -52,14 +56,24 @@ public class AndroidMap extends Map {
return mMapView.getHeight();
}
private final Runnable mRedrawCb = new Runnable() {
@Override
public void run() {
prepareFrame();
mGLView.requestRender();
}
};
@Override
public void updateMap(boolean redraw) {
//if (redraw && !mClearMap && !mPausing)
// mGLView.requestRender();
if (mPausing)
return;
if (!mWaitRedraw) {
mWaitRedraw = true;
mMapView.post(mRedrawRequest);
if (!mRenderRequest) {
mRenderRequest = true;
mMapView.post(mRedrawCb);
} else {
mRenderWait = true;
}
}
@@ -68,25 +82,24 @@ public class AndroidMap extends Map {
if (mPausing)
return;
if (mClearMap)
updateMap(false);
else
mGLView.requestRender();
updateMap(true);
}
private final Runnable mRedrawRequest = new Runnable() {
@Override
public void run() {
redrawMapInternal();
@Override
public void beginFrame() {
}
@Override
public void doneFrame() {
mRenderRequest = false;
if (mRenderWait) {
//log.debug("redraw");
mRenderWait = false;
updateMap(true);
//prepareFrame();
//mGLView.requestRender();
}
};
void redrawMapInternal() {
mWaitRedraw = false;
updateLayers();
mGLView.requestRender();
}
@Override
@@ -100,6 +113,7 @@ public class AndroidMap extends Map {
}
public void pause(boolean pause) {
log.debug("pause... {}", pause);
mPausing = pause;
}
}