Render themes: store theme origin, fix #414

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

View File

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

View File

@ -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() {
}
}

View File

@ -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<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.atlasList = atlasList;
}

View File

@ -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);
}

View File

@ -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);

View File

@ -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

View File

@ -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