From 7ba5984e5fc67413b539909caad4397fb99d7057 Mon Sep 17 00:00:00 2001 From: Emux Date: Wed, 27 Sep 2017 13:58:47 +0300 Subject: [PATCH] Render themes: store theme origin, fix #414 --- .../org/oscim/theme/carto/RenderTheme.java | 5 +++++ .../src/org/oscim/test}/DebugTheme.java | 10 +++++++--- vtm/src/org/oscim/theme/AtlasRenderTheme.java | 8 +++++++- vtm/src/org/oscim/theme/IRenderTheme.java | 20 ++++++++++++------- vtm/src/org/oscim/theme/RenderTheme.java | 12 +++++++++++ .../theme/XmlMapsforgeAtlasThemeBuilder.java | 2 +- .../oscim/theme/XmlMapsforgeThemeBuilder.java | 2 +- 7 files changed, 46 insertions(+), 13 deletions(-) rename {vtm/src/org/oscim/theme => vtm-playground/src/org/oscim/test}/DebugTheme.java (87%) diff --git a/vtm-jeo/src/org/oscim/theme/carto/RenderTheme.java b/vtm-jeo/src/org/oscim/theme/carto/RenderTheme.java index d1d0dd86..eb945659 100644 --- a/vtm-jeo/src/org/oscim/theme/carto/RenderTheme.java +++ b/vtm-jeo/src/org/oscim/theme/carto/RenderTheme.java @@ -242,6 +242,11 @@ public class RenderTheme implements IRenderTheme { return mBackground; } + @Override + public boolean isMapsforgeTheme() { + return false; + } + @Override public void scaleTextSize(float scaleFactor) { } diff --git a/vtm/src/org/oscim/theme/DebugTheme.java b/vtm-playground/src/org/oscim/test/DebugTheme.java similarity index 87% rename from vtm/src/org/oscim/theme/DebugTheme.java rename to vtm-playground/src/org/oscim/test/DebugTheme.java index 5fe49bd6..ad1390a2 100644 --- a/vtm/src/org/oscim/theme/DebugTheme.java +++ b/vtm-playground/src/org/oscim/test/DebugTheme.java @@ -1,8 +1,9 @@ -package org.oscim.theme; +package org.oscim.test; import org.oscim.backend.canvas.Color; import org.oscim.core.GeometryBuffer.GeometryType; import org.oscim.core.TagSet; +import org.oscim.theme.IRenderTheme; import org.oscim.theme.styles.AreaStyle; import org.oscim.theme.styles.LineStyle; import org.oscim.theme.styles.RenderStyle; @@ -36,13 +37,16 @@ public class DebugTheme implements IRenderTheme { return 0; } + @Override + public boolean isMapsforgeTheme() { + return false; + } + @Override public void scaleTextSize(float scaleFactor) { } @Override public void updateStyles() { - } - } diff --git a/vtm/src/org/oscim/theme/AtlasRenderTheme.java b/vtm/src/org/oscim/theme/AtlasRenderTheme.java index 68cb6acb..a6e97543 100644 --- a/vtm/src/org/oscim/theme/AtlasRenderTheme.java +++ b/vtm/src/org/oscim/theme/AtlasRenderTheme.java @@ -1,5 +1,6 @@ /* * Copyright 2017 Longri + * Copyright 2017 devemux86 * * This program is free software: you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License as published by the Free Software @@ -28,7 +29,12 @@ public class AtlasRenderTheme extends RenderTheme { public AtlasRenderTheme(int mapBackground, float baseTextSize, Rule[] rules, int levels, Map textureRegionMap, List atlasList) { - super(mapBackground, baseTextSize, rules, levels); + this(mapBackground, baseTextSize, rules, levels, false, textureRegionMap, atlasList); + } + + public AtlasRenderTheme(int mapBackground, float baseTextSize, Rule[] rules, int levels, boolean mapsforgeTheme, + Map textureRegionMap, List atlasList) { + super(mapBackground, baseTextSize, rules, levels, mapsforgeTheme); this.textureRegionMap = textureRegionMap; this.atlasList = atlasList; } diff --git a/vtm/src/org/oscim/theme/IRenderTheme.java b/vtm/src/org/oscim/theme/IRenderTheme.java index 134a4b29..5973a984 100644 --- a/vtm/src/org/oscim/theme/IRenderTheme.java +++ b/vtm/src/org/oscim/theme/IRenderTheme.java @@ -1,6 +1,7 @@ /* * Copyright 2010, 2011, 2012 mapsforge.org * Copyright 2013 Hannes Janetzek + * Copyright 2017 devemux86 * * This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * @@ -29,35 +30,40 @@ public interface IRenderTheme { * @param zoomLevel the zoom level at which the way should be matched. * @return matching render instructions */ - public abstract RenderStyle[] matchElement(GeometryType type, TagSet tags, int zoomLevel); + RenderStyle[] matchElement(GeometryType type, TagSet tags, int zoomLevel); /** * Must be called when this RenderTheme gets destroyed to clean up and free * resources. */ - public abstract void dispose(); + void dispose(); /** * @return the number of distinct drawing levels required by this * RenderTheme. */ - public abstract int getLevels(); + int getLevels(); /** * @return the map background color of this RenderTheme. */ - public abstract int getMapBackground(); + int getMapBackground(); - public void updateStyles(); + /** + * Is Mapsforge or VTM theme. + */ + boolean isMapsforgeTheme(); + + void updateStyles(); /** * Scales the text size of this RenderTheme by the given factor. * * @param scaleFactor the factor by which the text size should be scaled. */ - public abstract void scaleTextSize(float scaleFactor); + void scaleTextSize(float scaleFactor); - public static class ThemeException extends IllegalArgumentException { + class ThemeException extends IllegalArgumentException { public ThemeException(String string) { super(string); } diff --git a/vtm/src/org/oscim/theme/RenderTheme.java b/vtm/src/org/oscim/theme/RenderTheme.java index f8c8f2ea..a3f787da 100644 --- a/vtm/src/org/oscim/theme/RenderTheme.java +++ b/vtm/src/org/oscim/theme/RenderTheme.java @@ -1,6 +1,7 @@ /* * Copyright 2014 Hannes Janetzek * Copyright 2017 Longri + * Copyright 2017 devemux86 * * This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * @@ -41,6 +42,7 @@ public class RenderTheme implements IRenderTheme { private final int mLevels; private final Rule[] mRules; + private final boolean mMapsforgeTheme; class RenderStyleCache { final int matchType; @@ -74,6 +76,10 @@ public class RenderTheme implements IRenderTheme { private final RenderStyleCache[] mStyleCache; public RenderTheme(int mapBackground, float baseTextSize, Rule[] rules, int levels) { + this(mapBackground, baseTextSize, rules, levels, false); + } + + public RenderTheme(int mapBackground, float baseTextSize, Rule[] rules, int levels, boolean mapsforgeTheme) { if (rules == null) throw new IllegalArgumentException("rules missing"); @@ -81,6 +87,7 @@ public class RenderTheme implements IRenderTheme { mBaseTextSize = baseTextSize; mLevels = levels; mRules = rules; + mMapsforgeTheme = mapsforgeTheme; mStyleCache = new RenderStyleCache[3]; mStyleCache[0] = new RenderStyleCache(Element.NODE); @@ -112,6 +119,11 @@ public class RenderTheme implements IRenderTheme { return mRules; } + @Override + public boolean isMapsforgeTheme() { + return mMapsforgeTheme; + } + //AtomicInteger hitCount = new AtomicInteger(0); //AtomicInteger missCount = new AtomicInteger(0); //AtomicInteger sameCount = new AtomicInteger(0); diff --git a/vtm/src/org/oscim/theme/XmlMapsforgeAtlasThemeBuilder.java b/vtm/src/org/oscim/theme/XmlMapsforgeAtlasThemeBuilder.java index c71666c5..6751ed42 100644 --- a/vtm/src/org/oscim/theme/XmlMapsforgeAtlasThemeBuilder.java +++ b/vtm/src/org/oscim/theme/XmlMapsforgeAtlasThemeBuilder.java @@ -111,7 +111,7 @@ public class XmlMapsforgeAtlasThemeBuilder extends XmlMapsforgeThemeBuilder { @Override RenderTheme createTheme(Rule[] rules) { - return new AtlasRenderTheme(mMapBackground, mTextScale, rules, mLevels, regionMap, atlasList); + return new AtlasRenderTheme(mMapBackground, mTextScale, rules, mLevels, true, regionMap, atlasList); } @Override diff --git a/vtm/src/org/oscim/theme/XmlMapsforgeThemeBuilder.java b/vtm/src/org/oscim/theme/XmlMapsforgeThemeBuilder.java index d7165d7b..99ca271c 100644 --- a/vtm/src/org/oscim/theme/XmlMapsforgeThemeBuilder.java +++ b/vtm/src/org/oscim/theme/XmlMapsforgeThemeBuilder.java @@ -193,7 +193,7 @@ public class XmlMapsforgeThemeBuilder extends DefaultHandler { } RenderTheme createTheme(Rule[] rules) { - return new RenderTheme(mMapBackground, mTextScale, rules, mLevels); + return new RenderTheme(mMapBackground, mTextScale, rules, mLevels, true); } @Override