diff --git a/vtm-android-example/src/org/oscim/android/test/PathOverlayActivity.java b/vtm-android-example/src/org/oscim/android/test/PathOverlayActivity.java index bb1fbf49..bc887c91 100644 --- a/vtm-android-example/src/org/oscim/android/test/PathOverlayActivity.java +++ b/vtm-android-example/src/org/oscim/android/test/PathOverlayActivity.java @@ -36,7 +36,7 @@ public class PathOverlayActivity extends BitmapTileMapActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - mBitmapLayer.getTileRenderer().setBitmapAlpha(0.5f); + mBitmapLayer.tileRenderer().setBitmapAlpha(0.5f); createLayers(1, true); diff --git a/vtm-gdx-html/src/org/oscim/gdx/emu/org/oscim/layers/tile/vector/VectorTileLoader.java b/vtm-gdx-html/src/org/oscim/gdx/emu/org/oscim/layers/tile/vector/VectorTileLoader.java index f3fef398..14442b4c 100644 --- a/vtm-gdx-html/src/org/oscim/gdx/emu/org/oscim/layers/tile/vector/VectorTileLoader.java +++ b/vtm-gdx-html/src/org/oscim/gdx/emu/org/oscim/layers/tile/vector/VectorTileLoader.java @@ -147,7 +147,7 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac } } - public void setTileDataSource(ITileDataSource mapDatabase) { + public void setDataSource(ITileDataSource mapDatabase) { if (mTileDataSource != null) mTileDataSource.destroy(); diff --git a/vtm/src/org/oscim/layers/tile/BitmapTileLayer.java b/vtm/src/org/oscim/layers/tile/BitmapTileLayer.java index 2c7ee53f..bc7d9aa2 100644 --- a/vtm/src/org/oscim/layers/tile/BitmapTileLayer.java +++ b/vtm/src/org/oscim/layers/tile/BitmapTileLayer.java @@ -30,6 +30,7 @@ import org.oscim.renderer.elements.ElementLayers; import org.oscim.tiling.MapTile; import org.oscim.tiling.TileLoader; import org.oscim.tiling.TileManager; +import org.oscim.tiling.TileRenderer; import org.oscim.tiling.source.ITileDataSink; import org.oscim.tiling.source.ITileDataSource; import org.oscim.tiling.source.ITileDataSource.QueryResult; @@ -38,7 +39,7 @@ import org.oscim.utils.FastMath; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class BitmapTileLayer extends TileLayer { +public class BitmapTileLayer extends TileLayer { protected static final Logger log = LoggerFactory.getLogger(BitmapTileLayer.class); @@ -65,7 +66,8 @@ public class BitmapTileLayer extends TileLayer { public BitmapTileLayer(Map map, TileSource tileSource, int cacheLimit) { super(map, tileSource.getZoomLevelMin(), tileSource.getZoomLevelMax(), cacheLimit); mTileSource = tileSource; - initLoader(); + setRenderer(new TileRenderer(mTileManager)); + initLoader(4); } @Override @@ -96,7 +98,7 @@ public class BitmapTileLayer extends TileLayer { break; } - mRenderLayer.setBitmapAlpha(alpha); + tileRenderer().setBitmapAlpha(alpha); } @Override diff --git a/vtm/src/org/oscim/layers/tile/TileLayer.java b/vtm/src/org/oscim/layers/tile/TileLayer.java index 0fbcad3a..a68a55ad 100644 --- a/vtm/src/org/oscim/layers/tile/TileLayer.java +++ b/vtm/src/org/oscim/layers/tile/TileLayer.java @@ -16,18 +16,18 @@ */ package org.oscim.layers.tile; -import java.util.ArrayList; - import org.oscim.core.MapPosition; import org.oscim.layers.Layer; import org.oscim.map.Map; +import org.oscim.map.Map.UpdateListener; import org.oscim.tiling.TileLoader; import org.oscim.tiling.TileManager; import org.oscim.tiling.TileRenderer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public abstract class TileLayer extends Layer implements Map.UpdateListener { +public abstract class TileLayer extends Layer implements UpdateListener { + static final Logger log = LoggerFactory.getLogger(TileLayer.class); private final static int MAX_ZOOMLEVEL = 17; @@ -35,10 +35,8 @@ public abstract class TileLayer extends Layer implements M private final static int CACHE_LIMIT = 150; protected final TileManager mTileManager; - protected final TileRenderer mRenderLayer; - protected final int mNumTileLoader = 4; - protected final ArrayList mTileLoader; + protected TileLoader[] mTileLoader; public TileLayer(Map map) { this(map, MIN_ZOOMLEVEL, MAX_ZOOMLEVEL, CACHE_LIMIT); @@ -46,39 +44,36 @@ public abstract class TileLayer extends Layer implements M public TileLayer(Map map, int minZoom, int maxZoom, int cacheLimit) { super(map); - - // TileManager responsible for adding visible tiles - // to load queue and managing in-memory tile cache. + /* TileManager responsible for adding visible tiles + * to load queue and managing in-memory tile cache. */ mTileManager = new TileManager(map, minZoom, maxZoom, cacheLimit); - - // Instantiate TileLoader threads - mTileLoader = new ArrayList(); - - // RenderLayer is working in GL Thread and actually - // drawing loaded tiles to screen. - mRenderer = mRenderLayer = new TileRenderer(mTileManager); } - protected void initLoader() { - for (int i = 0; i < mNumTileLoader; i++) { - T tileGenerator = createLoader(mTileManager); - mTileLoader.add(tileGenerator); - tileGenerator.start(); - } + abstract protected TileLoader createLoader(TileManager tm); + + protected void setRenderer(TileRenderer renderer) { + mRenderer = renderer; } - abstract protected T createLoader(TileManager tm); - - public TileRenderer getTileRenderer() { + public TileRenderer tileRenderer() { return (TileRenderer) mRenderer; } + protected void initLoader(int numLoaders) { + mTileLoader = new TileLoader[numLoaders]; + + for (int i = 0; i < numLoaders; i++) { + mTileLoader[i] = createLoader(mTileManager); + mTileLoader[i].start(); + } + } + @Override public void onMapUpdate(MapPosition mapPosition, boolean changed, boolean clear) { if (clear) { // sync with TileRenderer - synchronized (mRenderLayer) { - mRenderLayer.clearTiles(); + synchronized (mRenderer) { + tileRenderer().clearTiles(); mTileManager.init(); } @@ -91,7 +86,7 @@ public abstract class TileLayer extends Layer implements M @Override public void onDetach() { - for (T loader : mTileLoader) { + for (TileLoader loader : mTileLoader) { loader.pause(); loader.interrupt(); loader.cleanup(); @@ -99,27 +94,26 @@ public abstract class TileLayer extends Layer implements M } void notifyLoaders() { - for (int i = 0; i < mNumTileLoader; i++) { - mTileLoader.get(i).go(); - } + for (TileLoader loader : mTileLoader) + loader.go(); } protected void pauseLoaders(boolean wait) { - for (T loader : mTileLoader) { + for (TileLoader loader : mTileLoader) { if (!loader.isPausing()) loader.pause(); } if (!wait) return; - for (T loader : mTileLoader) { + for (TileLoader loader : mTileLoader) { if (!loader.isPausing()) loader.awaitPausing(); } } protected void resumeLoaders() { - for (T loader : mTileLoader) + for (TileLoader loader : mTileLoader) loader.proceed(); } } diff --git a/vtm/src/org/oscim/layers/tile/example/TestTileLayer.java b/vtm/src/org/oscim/layers/tile/example/TestTileLayer.java index a45c862c..49c6e6e1 100644 --- a/vtm/src/org/oscim/layers/tile/example/TestTileLayer.java +++ b/vtm/src/org/oscim/layers/tile/example/TestTileLayer.java @@ -21,7 +21,6 @@ import org.oscim.backend.canvas.Paint.Cap; import org.oscim.core.GeometryBuffer; import org.oscim.core.Tile; import org.oscim.layers.tile.TileLayer; -import org.oscim.layers.tile.example.TestTileLayer.TestTileLoader; import org.oscim.map.Map; import org.oscim.renderer.elements.ElementLayers; import org.oscim.renderer.elements.LineLayer; @@ -32,7 +31,7 @@ import org.oscim.tiling.TileManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class TestTileLayer extends TileLayer { +public class TestTileLayer extends TileLayer { static final Logger log = LoggerFactory.getLogger(TestTileLayer.class); public TestTileLayer(Map map) { diff --git a/vtm/src/org/oscim/layers/tile/vector/BuildingLayer.java b/vtm/src/org/oscim/layers/tile/vector/BuildingLayer.java index ba45de27..29ce4a60 100644 --- a/vtm/src/org/oscim/layers/tile/vector/BuildingLayer.java +++ b/vtm/src/org/oscim/layers/tile/vector/BuildingLayer.java @@ -29,7 +29,7 @@ public class BuildingLayer extends Layer { public BuildingLayer(Map map, VectorTileLayer tileLayer) { super(map); - mExtLayer = new ExtrusionRenderer(tileLayer.getTileRenderer()) { + mExtLayer = new ExtrusionRenderer(tileLayer.tileRenderer()) { private long mStartTime; @Override diff --git a/vtm/src/org/oscim/layers/tile/vector/VectorTileLayer.java b/vtm/src/org/oscim/layers/tile/vector/VectorTileLayer.java index 81646d2b..ceb79136 100644 --- a/vtm/src/org/oscim/layers/tile/vector/VectorTileLayer.java +++ b/vtm/src/org/oscim/layers/tile/vector/VectorTileLayer.java @@ -21,7 +21,7 @@ import org.oscim.map.Map; import org.oscim.theme.IRenderTheme; import org.oscim.tiling.TileLoader; import org.oscim.tiling.TileManager; -import org.oscim.tiling.source.ITileDataSource; +import org.oscim.tiling.TileRenderer; import org.oscim.tiling.source.TileSource; import org.oscim.tiling.source.TileSource.OpenResult; import org.slf4j.Logger; @@ -32,19 +32,21 @@ import org.slf4j.LoggerFactory; * {@link VectorTileLoader} that load and assemble vector tiles * for rendering. */ -public class VectorTileLayer extends TileLayer { +public class VectorTileLayer extends TileLayer { static final Logger log = LoggerFactory.getLogger(VectorTileLayer.class); private TileSource mTileSource; public VectorTileLayer(Map map) { super(map); - initLoader(); + setRenderer(new TileRenderer(mTileManager)); + initLoader(4); } public VectorTileLayer(Map map, int minZoom, int maxZoom, int cacheLimit) { super(map, minZoom, maxZoom, cacheLimit); - initLoader(); + setRenderer(new TileRenderer(mTileManager)); + initLoader(4); } @Override @@ -75,10 +77,8 @@ public class VectorTileLayer extends TileLayer { mTileSource = tileSource; - for (int i = 0; i < mNumTileLoader; i++) { - ITileDataSource tileDataSource = tileSource.getDataSource(); - mTileLoader.get(i).setTileDataSource(tileDataSource); - } + for (TileLoader l : mTileLoader) + ((VectorTileLoader) l).setDataSource(tileSource.getDataSource()); mMap.clearMap(); resumeLoaders(); @@ -96,10 +96,10 @@ public class VectorTileLayer extends TileLayer { pauseLoaders(true); mTileManager.clearJobs(); - for (VectorTileLoader g : mTileLoader) - g.setRenderTheme(theme); + for (TileLoader l : mTileLoader) + ((VectorTileLoader) l).setRenderTheme(theme); - mRenderLayer.setOverdrawColor(theme.getMapBackground()); + tileRenderer().setOverdrawColor(theme.getMapBackground()); resumeLoaders(); } diff --git a/vtm/src/org/oscim/layers/tile/vector/VectorTileLoader.java b/vtm/src/org/oscim/layers/tile/vector/VectorTileLoader.java index a6d460e9..15446db7 100644 --- a/vtm/src/org/oscim/layers/tile/vector/VectorTileLoader.java +++ b/vtm/src/org/oscim/layers/tile/vector/VectorTileLoader.java @@ -158,7 +158,7 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac } } - public void setTileDataSource(ITileDataSource mapDatabase) { + public void setDataSource(ITileDataSource mapDatabase) { if (mTileDataSource != null) mTileDataSource.destroy(); diff --git a/vtm/src/org/oscim/layers/tile/vector/labeling/LabelLayer.java b/vtm/src/org/oscim/layers/tile/vector/labeling/LabelLayer.java index b1e602b1..f8f4c4fe 100644 --- a/vtm/src/org/oscim/layers/tile/vector/labeling/LabelLayer.java +++ b/vtm/src/org/oscim/layers/tile/vector/labeling/LabelLayer.java @@ -43,7 +43,7 @@ public class LabelLayer extends Layer implements Map.InputListener, Map.UpdateLi super(map); l.getManager().events.bind(this); - mLabelPlacer = new LabelPlacement(map, l.getTileRenderer()); + mLabelPlacer = new LabelPlacement(map, l.tileRenderer()); mWorker = new Worker(map); mRenderer = new TextRenderer(mWorker); }