Render themes: store theme origin, fix

This commit is contained in:
Emux 2017-09-27 13:58:47 +03:00
parent 27aee33cb9
commit 7ba5984e5f
7 changed files with 46 additions and 13 deletions

@ -242,6 +242,11 @@ public class RenderTheme implements IRenderTheme {
return mBackground; return mBackground;
} }
@Override
public boolean isMapsforgeTheme() {
return false;
}
@Override @Override
public void scaleTextSize(float scaleFactor) { public void scaleTextSize(float scaleFactor) {
} }

@ -1,8 +1,9 @@
package org.oscim.theme; package org.oscim.test;
import org.oscim.backend.canvas.Color; import org.oscim.backend.canvas.Color;
import org.oscim.core.GeometryBuffer.GeometryType; import org.oscim.core.GeometryBuffer.GeometryType;
import org.oscim.core.TagSet; import org.oscim.core.TagSet;
import org.oscim.theme.IRenderTheme;
import org.oscim.theme.styles.AreaStyle; import org.oscim.theme.styles.AreaStyle;
import org.oscim.theme.styles.LineStyle; import org.oscim.theme.styles.LineStyle;
import org.oscim.theme.styles.RenderStyle; import org.oscim.theme.styles.RenderStyle;
@ -36,13 +37,16 @@ public class DebugTheme implements IRenderTheme {
return 0; return 0;
} }
@Override
public boolean isMapsforgeTheme() {
return false;
}
@Override @Override
public void scaleTextSize(float scaleFactor) { public void scaleTextSize(float scaleFactor) {
} }
@Override @Override
public void updateStyles() { public void updateStyles() {
} }
} }

@ -1,5 +1,6 @@
/* /*
* Copyright 2017 Longri * Copyright 2017 Longri
* Copyright 2017 devemux86
* *
* This program is free software: you can redistribute it and/or modify it under the * 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 * 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, public AtlasRenderTheme(int mapBackground, float baseTextSize, Rule[] rules, int levels,
Map<Object, TextureRegion> textureRegionMap, List<TextureAtlas> atlasList) { Map<Object, TextureRegion> textureRegionMap, List<TextureAtlas> 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<Object, TextureRegion> textureRegionMap, List<TextureAtlas> atlasList) {
super(mapBackground, baseTextSize, rules, levels, mapsforgeTheme);
this.textureRegionMap = textureRegionMap; this.textureRegionMap = textureRegionMap;
this.atlasList = atlasList; this.atlasList = atlasList;
} }

@ -1,6 +1,7 @@
/* /*
* Copyright 2010, 2011, 2012 mapsforge.org * Copyright 2010, 2011, 2012 mapsforge.org
* Copyright 2013 Hannes Janetzek * Copyright 2013 Hannes Janetzek
* Copyright 2017 devemux86
* *
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * 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. * @param zoomLevel the zoom level at which the way should be matched.
* @return matching render instructions * @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 * Must be called when this RenderTheme gets destroyed to clean up and free
* resources. * resources.
*/ */
public abstract void dispose(); void dispose();
/** /**
* @return the number of distinct drawing levels required by this * @return the number of distinct drawing levels required by this
* RenderTheme. * RenderTheme.
*/ */
public abstract int getLevels(); int getLevels();
/** /**
* @return the map background color of this RenderTheme. * @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. * Scales the text size of this RenderTheme by the given factor.
* *
* @param scaleFactor the factor by which the text size should be scaled. * @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) { public ThemeException(String string) {
super(string); super(string);
} }

@ -1,6 +1,7 @@
/* /*
* Copyright 2014 Hannes Janetzek * Copyright 2014 Hannes Janetzek
* Copyright 2017 Longri * Copyright 2017 Longri
* Copyright 2017 devemux86
* *
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * 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 int mLevels;
private final Rule[] mRules; private final Rule[] mRules;
private final boolean mMapsforgeTheme;
class RenderStyleCache { class RenderStyleCache {
final int matchType; final int matchType;
@ -74,6 +76,10 @@ public class RenderTheme implements IRenderTheme {
private final RenderStyleCache[] mStyleCache; private final RenderStyleCache[] mStyleCache;
public RenderTheme(int mapBackground, float baseTextSize, Rule[] rules, int levels) { 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) if (rules == null)
throw new IllegalArgumentException("rules missing"); throw new IllegalArgumentException("rules missing");
@ -81,6 +87,7 @@ public class RenderTheme implements IRenderTheme {
mBaseTextSize = baseTextSize; mBaseTextSize = baseTextSize;
mLevels = levels; mLevels = levels;
mRules = rules; mRules = rules;
mMapsforgeTheme = mapsforgeTheme;
mStyleCache = new RenderStyleCache[3]; mStyleCache = new RenderStyleCache[3];
mStyleCache[0] = new RenderStyleCache(Element.NODE); mStyleCache[0] = new RenderStyleCache(Element.NODE);
@ -112,6 +119,11 @@ public class RenderTheme implements IRenderTheme {
return mRules; return mRules;
} }
@Override
public boolean isMapsforgeTheme() {
return mMapsforgeTheme;
}
//AtomicInteger hitCount = new AtomicInteger(0); //AtomicInteger hitCount = new AtomicInteger(0);
//AtomicInteger missCount = new AtomicInteger(0); //AtomicInteger missCount = new AtomicInteger(0);
//AtomicInteger sameCount = new AtomicInteger(0); //AtomicInteger sameCount = new AtomicInteger(0);

@ -111,7 +111,7 @@ public class XmlMapsforgeAtlasThemeBuilder extends XmlMapsforgeThemeBuilder {
@Override @Override
RenderTheme createTheme(Rule[] rules) { RenderTheme createTheme(Rule[] rules) {
return new AtlasRenderTheme(mMapBackground, mTextScale, rules, mLevels, regionMap, atlasList); return new AtlasRenderTheme(mMapBackground, mTextScale, rules, mLevels, true, regionMap, atlasList);
} }
@Override @Override

@ -193,7 +193,7 @@ public class XmlMapsforgeThemeBuilder extends DefaultHandler {
} }
RenderTheme createTheme(Rule[] rules) { RenderTheme createTheme(Rule[] rules) {
return new RenderTheme(mMapBackground, mTextScale, rules, mLevels); return new RenderTheme(mMapBackground, mTextScale, rules, mLevels, true);
} }
@Override @Override