diff --git a/vtm-android-example/src/org/oscim/android/test/ThemeStylerActivity.java b/vtm-android-example/src/org/oscim/android/test/ThemeStylerActivity.java index c2949ce8..d342ef79 100644 --- a/vtm-android-example/src/org/oscim/android/test/ThemeStylerActivity.java +++ b/vtm-android-example/src/org/oscim/android/test/ThemeStylerActivity.java @@ -49,8 +49,8 @@ public class ThemeStylerActivity extends BaseMapActivity implements OnSeekBarCha } class ModStyleVisitor extends RuleVisitor { - private final LineBuilder lineBuilder = new LineBuilder(); - private final AreaBuilder areaBuilder = new AreaBuilder(); + private final LineBuilder lineBuilder = LineStyle.builder(); + private final AreaBuilder areaBuilder = AreaStyle.builder(); @Override public void apply(Rule r) { diff --git a/vtm-android/project.properties b/vtm-android/project.properties index f4282870..9be86071 100644 --- a/vtm-android/project.properties +++ b/vtm-android/project.properties @@ -14,3 +14,4 @@ target=android-19 #proguard.config=proguard.cfg android.library=true +android.library.reference.1=../android-v7-appcompat diff --git a/vtm-jeo/src/org/oscim/layers/OSMIndoorLayer.java b/vtm-jeo/src/org/oscim/layers/OSMIndoorLayer.java index 3aae9036..af7eddde 100644 --- a/vtm-jeo/src/org/oscim/layers/OSMIndoorLayer.java +++ b/vtm-jeo/src/org/oscim/layers/OSMIndoorLayer.java @@ -18,7 +18,6 @@ import org.oscim.renderer.bucket.TextItem; import org.oscim.theme.styles.AreaStyle; import org.oscim.theme.styles.LineStyle; import org.oscim.theme.styles.TextStyle; -import org.oscim.theme.styles.TextStyle.TextBuilder; import com.vividsolutions.jts.geom.Envelope; import com.vividsolutions.jts.geom.Geometry; @@ -27,9 +26,9 @@ import com.vividsolutions.jts.geom.LineString; public class OSMIndoorLayer extends JeoVectorLayer { protected TextBucket mTextLayer; - protected TextStyle mText = new TextBuilder() - .setFontSize(16).setColor(Color.BLACK) - .setStrokeWidth(2.2f).setStroke(Color.WHITE) + protected TextStyle mText = TextStyle.builder() + .fontSize(16).color(Color.BLACK) + .strokeWidth(2.2f).strokeColor(Color.WHITE) .build(); public OSMIndoorLayer(Map map, VectorDataset data, Style style) { diff --git a/vtm-jeo/src/org/oscim/theme/carto/RenderTheme.java b/vtm-jeo/src/org/oscim/theme/carto/RenderTheme.java index d9a647eb..a9278fe1 100644 --- a/vtm-jeo/src/org/oscim/theme/carto/RenderTheme.java +++ b/vtm-jeo/src/org/oscim/theme/carto/RenderTheme.java @@ -229,7 +229,7 @@ public class RenderTheme implements IRenderTheme { } @Override - public void destroy() { + public void dispose() { } @Override diff --git a/vtm-playground/src/org/oscim/test/HairLineTest.java b/vtm-playground/src/org/oscim/test/HairLineTest.java index 7c90a2b3..7fca02f9 100644 --- a/vtm-playground/src/org/oscim/test/HairLineTest.java +++ b/vtm-playground/src/org/oscim/test/HairLineTest.java @@ -33,9 +33,9 @@ public class HairLineTest extends GdxMap { static class Renderer extends BucketRenderer { boolean init; - LineBuilder l = new LineStyle.LineBuilder() + LineBuilder l = LineStyle.builder() .color(Color.WHITE) - .width(1.5f) + .strokeWidth(1.5f) .cap(Cap.ROUND); HairLineBucket ll = buckets.addHairLineBucket(1, l.build()); @@ -48,7 +48,7 @@ public class HairLineTest extends GdxMap { //style = new LineStyle(Color.fade(Color.LTGRAY, 0.8f), 1.5f); LineBucket l2 = buckets.addLineBucket(3, style); - PolygonBucket pl = buckets.addPolygonBucket(4, new AreaStyle.AreaBuilder() + PolygonBucket pl = buckets.addPolygonBucket(4, AreaStyle.builder() .color(Color.BLUE) //.outline(Color.CYAN, 1) .build()); diff --git a/vtm-playground/src/org/oscim/test/RuleVisitorTest.java b/vtm-playground/src/org/oscim/test/RuleVisitorTest.java index 6d5339b1..a935b6ca 100644 --- a/vtm-playground/src/org/oscim/test/RuleVisitorTest.java +++ b/vtm-playground/src/org/oscim/test/RuleVisitorTest.java @@ -77,8 +77,8 @@ public class RuleVisitorTest extends GdxMap { } static class SaturateLineStyles extends RuleVisitor { - private final LineBuilder lineBuilder = new LineBuilder(); - private final AreaBuilder areaBuilder = new AreaBuilder(); + private final LineBuilder lineBuilder = LineStyle.builder(); + private final AreaBuilder areaBuilder = AreaStyle.builder(); private final double saturation; private final boolean modifyArea; diff --git a/vtm-playground/src/org/oscim/test/ThemeBuilder.java b/vtm-playground/src/org/oscim/test/ThemeBuilder.java index ddb8b7a0..dbcf7836 100644 --- a/vtm-playground/src/org/oscim/test/ThemeBuilder.java +++ b/vtm-playground/src/org/oscim/test/ThemeBuilder.java @@ -8,9 +8,12 @@ import org.oscim.theme.rule.Rule; import org.oscim.theme.rule.Rule.Element; import org.oscim.theme.rule.RuleBuilder; import org.oscim.theme.rule.RuleBuilder.RuleType; +import org.oscim.theme.styles.AreaStyle; import org.oscim.theme.styles.AreaStyle.AreaBuilder; +import org.oscim.theme.styles.LineStyle; import org.oscim.theme.styles.LineStyle.LineBuilder; import org.oscim.theme.styles.RenderStyle; +import org.oscim.theme.styles.TextStyle; import org.oscim.theme.styles.TextStyle.TextBuilder; public class ThemeBuilder { @@ -82,28 +85,28 @@ public class ThemeBuilder { }; - public static LineBuilder line(int color, float width) { - return new LineBuilder() + public static LineBuilder line(int color, float width) { + return LineStyle.builder() .color(color) - .width(width); + .strokeWidth(width); } - public static AreaBuilder area(int color) { - return new AreaBuilder() + public static AreaBuilder area(int color) { + return AreaStyle.builder() .color(color); } - public static TextBuilder wayText(float size, int color) { - return new TextBuilder() - .setFontSize(size) - .setColor(color); + public static TextBuilder wayText(float size, int color) { + return TextStyle.builder() + .fontSize(size) + .color(color); } - public static TextBuilder nodeText(float size, int color) { - return new TextBuilder() - .setFontSize(size) - .setColor(color) - .setCaption(true); + public static TextBuilder nodeText(float size, int color) { + return TextStyle.builder() + .fontSize(size) + .color(color) + .isCaption(true); } public static RuleBuilder matchKey(String key) { diff --git a/vtm-playground/src/org/oscim/test/renderer/AtlasTest.java b/vtm-playground/src/org/oscim/test/renderer/AtlasTest.java index f2737eb7..81707453 100644 --- a/vtm-playground/src/org/oscim/test/renderer/AtlasTest.java +++ b/vtm-playground/src/org/oscim/test/renderer/AtlasTest.java @@ -17,7 +17,6 @@ import org.oscim.renderer.bucket.TextBucket; import org.oscim.renderer.bucket.TextItem; import org.oscim.theme.styles.LineStyle; import org.oscim.theme.styles.TextStyle; -import org.oscim.theme.styles.TextStyle.TextBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -42,6 +41,10 @@ public class AtlasTest extends GdxMap { TextureAtlas mAtlas = TextureAtlas.create(2048, 2048, 1); + TextBucket tl = new TextBucket(); + TextStyle t = TextStyle.builder().fontSize(20).color(Color.BLACK).build(); + buckets.set(tl); + LineBucket ll = buckets.getLineBucket(0); ll.line = new LineStyle(Color.BLUE, 3, Cap.BUTT); ll.scale = 1f; @@ -54,10 +57,6 @@ public class AtlasTest extends GdxMap { ll3.line = new LineStyle(Color.GREEN, 3, Cap.BUTT); ll3.scale = 1f; - TextBucket tl = new TextBucket(); - TextStyle t = new TextBuilder().setFontSize(20).setColor(Color.BLACK).build(); - buckets.set(tl); - float[] points = new float[10]; for (int i = 0; i < 400; i++) { diff --git a/vtm/src/org/oscim/layers/tile/vector/VectorTileLoader.java b/vtm/src/org/oscim/layers/tile/vector/VectorTileLoader.java index 76557e2c..720630b3 100644 --- a/vtm/src/org/oscim/layers/tile/vector/VectorTileLoader.java +++ b/vtm/src/org/oscim/layers/tile/vector/VectorTileLoader.java @@ -44,7 +44,7 @@ import org.oscim.tiling.ITileDataSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class VectorTileLoader extends TileLoader implements IRenderTheme.Callback { +public class VectorTileLoader extends TileLoader implements RenderStyle.Callback { static final Logger log = LoggerFactory.getLogger(VectorTileLoader.class); diff --git a/vtm/src/org/oscim/renderer/GridRenderer.java b/vtm/src/org/oscim/renderer/GridRenderer.java index 7a707344..92dfb6f9 100644 --- a/vtm/src/org/oscim/renderer/GridRenderer.java +++ b/vtm/src/org/oscim/renderer/GridRenderer.java @@ -25,7 +25,6 @@ import org.oscim.renderer.bucket.TextBucket; import org.oscim.renderer.bucket.TextItem; import org.oscim.theme.styles.LineStyle; import org.oscim.theme.styles.TextStyle; -import org.oscim.theme.styles.TextStyle.TextBuilder; public class GridRenderer extends BucketRenderer { @@ -39,7 +38,10 @@ public class GridRenderer extends BucketRenderer { public GridRenderer() { this(1, new LineStyle(Color.LTGRAY, 1.2f, Cap.BUTT), - new TextBuilder().setFontSize(22).setColor(Color.RED).build()); + TextStyle.builder() + .fontSize(22) + .color(Color.RED) + .build()); } public GridRenderer(int numLines, LineStyle lineStyle, TextStyle textStyle) { diff --git a/vtm/src/org/oscim/theme/DebugTheme.java b/vtm/src/org/oscim/theme/DebugTheme.java index 11998d2c..21b57447 100644 --- a/vtm/src/org/oscim/theme/DebugTheme.java +++ b/vtm/src/org/oscim/theme/DebugTheme.java @@ -23,7 +23,7 @@ public class DebugTheme implements IRenderTheme { } @Override - public void destroy() { + public void dispose() { } @Override diff --git a/vtm/src/org/oscim/theme/IRenderTheme.java b/vtm/src/org/oscim/theme/IRenderTheme.java index e0ba18f0..cff16996 100644 --- a/vtm/src/org/oscim/theme/IRenderTheme.java +++ b/vtm/src/org/oscim/theme/IRenderTheme.java @@ -19,13 +19,7 @@ package org.oscim.theme; import org.oscim.core.GeometryBuffer.GeometryType; import org.oscim.core.TagSet; -import org.oscim.theme.styles.AreaStyle; -import org.oscim.theme.styles.CircleStyle; -import org.oscim.theme.styles.ExtrusionStyle; -import org.oscim.theme.styles.LineStyle; import org.oscim.theme.styles.RenderStyle; -import org.oscim.theme.styles.SymbolStyle; -import org.oscim.theme.styles.TextStyle; public interface IRenderTheme { @@ -42,7 +36,7 @@ public interface IRenderTheme { * Must be called when this RenderTheme gets destroyed to clean up and free * resources. */ - public abstract void destroy(); + public abstract void dispose(); /** * @return the number of distinct drawing levels required by this @@ -65,61 +59,6 @@ public interface IRenderTheme { */ public abstract void scaleTextSize(float scaleFactor); - /** - * Callback methods for rendering areas, ways and points of interest (POIs). - */ - public interface Callback { - /** - * Renders an area with the given parameters. - * - * @param area - * @param level - */ - void renderArea(AreaStyle area, int level); - - /** - * Renders an extrusion with the given parameters. - * - * @param extrusion - * @param level - */ - void renderExtrusion(ExtrusionStyle extrusion, int level); - - /** - * Renders a point of interest circle with the given parameters. - * - * @param circle - * the circle. - * @param level - * the drawing level on which the circle should be rendered. - */ - void renderCircle(CircleStyle circle, int level); - - /** - * Renders a point of interest symbol with the given bitmap. - * - * @param symbol - * the symbol to be rendered. - */ - void renderSymbol(SymbolStyle symbol); - - /** - * Renders a way with the given parameters. - * - * @param line - * @param level - */ - void renderWay(LineStyle line, int level); - - /** - * Renders a way with the given text along the way path. - * - * @param text - */ - void renderText(TextStyle text); - - } - public static 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 e224ecf1..a7614547 100644 --- a/vtm/src/org/oscim/theme/RenderTheme.java +++ b/vtm/src/org/oscim/theme/RenderTheme.java @@ -88,7 +88,7 @@ public class RenderTheme implements IRenderTheme { } @Override - public void destroy() { + public void dispose() { for (int i = 0; i < 3; i++) mStyleCache[i].cache.clear(); diff --git a/vtm/src/org/oscim/theme/XmlThemeBuilder.java b/vtm/src/org/oscim/theme/XmlThemeBuilder.java index a2e24141..7c8fc8e0 100644 --- a/vtm/src/org/oscim/theme/XmlThemeBuilder.java +++ b/vtm/src/org/oscim/theme/XmlThemeBuilder.java @@ -128,12 +128,12 @@ public class XmlThemeBuilder extends DefaultHandler { private final HashMap mStyles = new HashMap(10); - private final HashMap mTextStyles = - new HashMap(10); + private final HashMap> mTextStyles = + new HashMap>(10); - private final TextBuilder mTextBuilder = new TextBuilder(); - private final AreaBuilder mAreaBuilder = new AreaBuilder(); - private final LineBuilder mLineBuilder = new LineBuilder(); + private final TextBuilder mTextBuilder = TextStyle.builder(); + private final AreaBuilder mAreaBuilder = AreaStyle.builder(); + private final LineBuilder mLineBuilder = LineStyle.builder(); private RuleBuilder mCurrentRule; private TextureAtlas mTextureAtlas; @@ -387,7 +387,7 @@ public class XmlThemeBuilder extends DefaultHandler { */ private LineStyle createLine(LineStyle line, String elementName, Attributes attributes, int level, boolean isOutline) { - LineBuilder b = mLineBuilder.set(line); + LineBuilder b = mLineBuilder.set(line); b.isOutline(isOutline); b.level(level); @@ -411,15 +411,15 @@ public class XmlThemeBuilder extends DefaultHandler { b.color(value); else if ("width".equals(name) || "stroke-width".equals(name)) { - b.width = parseFloat(value); + b.strokeWidth = parseFloat(value); if (line == null) { if (!isOutline) - validateNonNegative("width", b.width); + validateNonNegative("width", b.strokeWidth); } else { /* use stroke width relative to 'line' */ - b.width += line.width; - if (b.width <= 0) - b.width = 1; + b.strokeWidth += line.width; + if (b.strokeWidth <= 0) + b.strokeWidth = 1; } } else if ("cap".equals(name) || "stroke-linecap".equals(name)) @@ -486,7 +486,7 @@ public class XmlThemeBuilder extends DefaultHandler { */ private AreaStyle createArea(AreaStyle area, String elementName, Attributes attributes, int level) { - AreaBuilder b = mAreaBuilder.set(area); + AreaBuilder b = mAreaBuilder.set(area); b.level(level); String src = null; @@ -691,7 +691,7 @@ public class XmlThemeBuilder extends DefaultHandler { boolean isCaption) throws SAXException { String style = attributes.getValue("use"); - TextStyle.TextBuilder pt = null; + TextBuilder pt = null; if (style != null) { pt = mTextStyles.get(style); @@ -701,10 +701,10 @@ public class XmlThemeBuilder extends DefaultHandler { } } - TextBuilder b = createText(localName, attributes, isCaption, pt); + TextBuilder b = createText(localName, attributes, isCaption, pt); if (isStyle) { log.debug("put style {}", b.style); - mTextStyles.put(b.style, new TextBuilder().setFrom(b)); + mTextStyles.put(b.style, TextStyle.builder().from(b)); } else { mCurrentRule.addStyle(b.buildInternal()); } @@ -715,14 +715,14 @@ public class XmlThemeBuilder extends DefaultHandler { * ... * @return a new Text with the given rendering attributes. */ - private TextStyle.TextBuilder createText(String elementName, Attributes attributes, - boolean caption, TextBuilder style) { - TextBuilder b; + private TextBuilder createText(String elementName, Attributes attributes, + boolean caption, TextBuilder style) { + TextBuilder b; if (style == null) { b = mTextBuilder.reset(); b.caption = caption; } else - b = mTextBuilder.setFrom(style); + b = mTextBuilder.from(style); for (int i = 0; i < attributes.getLength(); i++) { String name = attributes.getLocalName(i); @@ -744,10 +744,10 @@ public class XmlThemeBuilder extends DefaultHandler { b.fontSize = Float.parseFloat(value); else if ("fill".equals(name)) - b.color = Color.parseColor(value); + b.fillColor = Color.parseColor(value); else if ("stroke".equals(name)) - b.stroke = Color.parseColor(value); + b.strokeColor = Color.parseColor(value); else if ("stroke-width".equals(name)) b.strokeWidth = Float.parseFloat(value); diff --git a/vtm/src/org/oscim/theme/rule/Rule.java b/vtm/src/org/oscim/theme/rule/Rule.java index 8d1161fc..df1b37ad 100644 --- a/vtm/src/org/oscim/theme/rule/Rule.java +++ b/vtm/src/org/oscim/theme/rule/Rule.java @@ -328,4 +328,7 @@ public class Rule { } } + public static RuleBuilder builder() { + return new RuleBuilder(); + } } diff --git a/vtm/src/org/oscim/theme/rule/RuleBuilder.java b/vtm/src/org/oscim/theme/rule/RuleBuilder.java index 55cd2480..4e5c1cb8 100644 --- a/vtm/src/org/oscim/theme/rule/RuleBuilder.java +++ b/vtm/src/org/oscim/theme/rule/RuleBuilder.java @@ -51,7 +51,7 @@ public class RuleBuilder { ArrayList renderStyles = new ArrayList(4); ArrayList subRules = new ArrayList(4); - StyleBuilder[] styleBuilder; + StyleBuilder[] styleBuilder; private static final String STRING_NEGATION = "~"; private static final String STRING_EXCLUSIVE = "-"; @@ -134,7 +134,7 @@ public class RuleBuilder { Rule[] rules = null; if (styleBuilder != null) - for (StyleBuilder style : styleBuilder) { + for (StyleBuilder style : styleBuilder) { renderStyles.add(style.level(level[0]).build()); level[0] += 2; } @@ -193,7 +193,7 @@ public class RuleBuilder { return this; } - public RuleBuilder style(StyleBuilder... styles) { + public RuleBuilder style(StyleBuilder... styles) { styleBuilder = styles; return this; } diff --git a/vtm/src/org/oscim/theme/styles/AreaStyle.java b/vtm/src/org/oscim/theme/styles/AreaStyle.java index 7b81f480..0807ae55 100644 --- a/vtm/src/org/oscim/theme/styles/AreaStyle.java +++ b/vtm/src/org/oscim/theme/styles/AreaStyle.java @@ -20,7 +20,6 @@ import static org.oscim.backend.canvas.Color.parseColor; import org.oscim.backend.canvas.Color; import org.oscim.renderer.bucket.TextureItem; -import org.oscim.theme.IRenderTheme.Callback; import org.oscim.utils.FastMath; /*TODO @@ -71,13 +70,13 @@ public class AreaStyle extends RenderStyle { this.strokeWidth = 1; } - public AreaStyle(AreaBuilder b) { + public AreaStyle(AreaBuilder b) { this.level = b.level; this.style = b.style; this.fadeScale = b.fadeScale; this.blendColor = b.blendColor; this.blendScale = b.blendScale; - this.color = b.color; + this.color = b.fillColor; this.texture = b.texture; this.strokeColor = b.strokeColor; @@ -90,8 +89,8 @@ public class AreaStyle extends RenderStyle { } @Override - public void renderWay(Callback renderCallback) { - renderCallback.renderArea(this, level); + public void renderWay(Callback cb) { + cb.renderArea(this, level); } public boolean hasAlpha(int zoom) { @@ -115,119 +114,6 @@ public class AreaStyle extends RenderStyle { return false; } - public static class AreaBuilder implements StyleBuilder { - public int level; - public String style; - public int color; - public int fadeScale; - public int blendColor; - public int blendScale; - - public int strokeColor; - public float strokeWidth; - - public TextureItem texture; - - public AreaBuilder set(AreaStyle area) { - if (area == null) - return reset(); - - this.level = area.level; - this.style = area.style; - this.fadeScale = area.fadeScale; - this.blendColor = area.blendColor; - this.blendScale = area.blendScale; - this.color = area.color; - this.texture = area.texture; - this.strokeColor = area.strokeColor; - this.strokeWidth = area.strokeWidth; - - return this; - } - - public AreaBuilder style(String name) { - this.style = name; - return this; - } - - public AreaBuilder level(int level) { - this.level = level; - return this; - } - - public AreaBuilder outline(int color, float width) { - this.strokeColor = color; - this.strokeWidth = width; - return this; - } - - public AreaBuilder strokeColor(int color) { - this.strokeColor = color; - return this; - } - - public AreaBuilder strokeColor(String color) { - this.strokeColor = parseColor(color); - return this; - } - - public AreaBuilder strokeWidth(float width) { - this.strokeWidth = width; - return this; - } - - public AreaBuilder color(int color) { - this.color = color; - return this; - } - - public AreaBuilder color(String color) { - this.color = parseColor(color); - return this; - } - - public AreaBuilder blendScale(int zoom) { - this.blendScale = zoom; - return this; - } - - public AreaBuilder blendColor(int color) { - this.blendColor = color; - return this; - } - - public AreaBuilder blendColor(String color) { - this.blendColor = parseColor(color); - return this; - } - - public AreaBuilder texture(TextureItem texture) { - this.texture = texture; - return this; - } - - public AreaBuilder fadeScale(int zoom) { - this.fadeScale = zoom; - return this; - } - - public AreaBuilder reset() { - color = Color.BLACK; - strokeColor = Color.BLACK; - strokeWidth = 0; - fadeScale = -1; - blendScale = -1; - blendColor = Color.TRANSPARENT; - style = null; - texture = null; - return this; - } - - public AreaStyle build() { - return new AreaStyle(this); - } - } - public float getFade(double scale) { if (fadeScale < 0) return 1; @@ -244,4 +130,78 @@ public class AreaStyle extends RenderStyle { return FastMath.clamp(f, 0, 1); } + public static class AreaBuilder> extends StyleBuilder { + + public int fadeScale; + public int blendColor; + public int blendScale; + + public TextureItem texture; + + public AreaBuilder() { + } + + public T set(AreaStyle area) { + if (area == null) + return reset(); + + this.level = area.level; + this.style = area.style; + this.fadeScale = area.fadeScale; + this.blendColor = area.blendColor; + this.blendScale = area.blendScale; + this.fillColor = area.color; + this.texture = area.texture; + this.strokeColor = area.strokeColor; + this.strokeWidth = area.strokeWidth; + + return self(); + } + + public T blendScale(int zoom) { + this.blendScale = zoom; + return self(); + } + + public T blendColor(int color) { + this.blendColor = color; + return self(); + } + + public T blendColor(String color) { + this.blendColor = parseColor(color); + return self(); + } + + public T texture(TextureItem texture) { + this.texture = texture; + return self(); + } + + public T fadeScale(int zoom) { + this.fadeScale = zoom; + return self(); + } + + public T reset() { + fillColor = Color.BLACK; + strokeColor = Color.BLACK; + strokeWidth = 0; + fadeScale = -1; + blendScale = -1; + blendColor = Color.TRANSPARENT; + style = null; + texture = null; + return self(); + } + + public AreaStyle build() { + return new AreaStyle(this); + } + } + + @SuppressWarnings("rawtypes") + public static AreaBuilder builder() { + return new AreaBuilder(); + } } diff --git a/vtm/src/org/oscim/theme/styles/CircleStyle.java b/vtm/src/org/oscim/theme/styles/CircleStyle.java index 46fe42c1..c7dd8d10 100644 --- a/vtm/src/org/oscim/theme/styles/CircleStyle.java +++ b/vtm/src/org/oscim/theme/styles/CircleStyle.java @@ -17,8 +17,6 @@ */ package org.oscim.theme.styles; -import org.oscim.theme.IRenderTheme.Callback; - /** * Represents a round area on the map. */ @@ -48,8 +46,8 @@ public final class CircleStyle extends RenderStyle { } @Override - public void renderNode(Callback renderCallback) { - renderCallback.renderCircle(this, this.level); + public void renderNode(Callback cb) { + cb.renderCircle(this, this.level); } @Override diff --git a/vtm/src/org/oscim/theme/styles/ExtrusionStyle.java b/vtm/src/org/oscim/theme/styles/ExtrusionStyle.java index 02423568..75f44138 100644 --- a/vtm/src/org/oscim/theme/styles/ExtrusionStyle.java +++ b/vtm/src/org/oscim/theme/styles/ExtrusionStyle.java @@ -17,7 +17,6 @@ package org.oscim.theme.styles; import org.oscim.backend.canvas.Color; -import org.oscim.theme.IRenderTheme.Callback; public class ExtrusionStyle extends RenderStyle { @@ -57,8 +56,8 @@ public class ExtrusionStyle extends RenderStyle { } @Override - public void renderWay(Callback renderCallback) { - renderCallback.renderExtrusion(this, this.level); + public void renderWay(Callback cb) { + cb.renderExtrusion(this, this.level); } @Override diff --git a/vtm/src/org/oscim/theme/styles/LineStyle.java b/vtm/src/org/oscim/theme/styles/LineStyle.java index 58375169..5931e2ea 100644 --- a/vtm/src/org/oscim/theme/styles/LineStyle.java +++ b/vtm/src/org/oscim/theme/styles/LineStyle.java @@ -21,7 +21,6 @@ import static org.oscim.backend.canvas.Color.parseColor; import org.oscim.backend.canvas.Color; import org.oscim.backend.canvas.Paint.Cap; -import org.oscim.theme.IRenderTheme.Callback; public final class LineStyle extends RenderStyle { @@ -39,11 +38,11 @@ public final class LineStyle extends RenderStyle { public final int stippleColor; public final float stippleWidth; - private LineStyle(LineBuilder builer) { + private LineStyle(LineBuilder builer) { this.level = builer.level; this.style = builer.style; - this.width = builer.width; - this.color = builer.color; + this.width = builer.strokeWidth; + this.color = builer.fillColor; this.cap = builer.cap; this.outline = builer.outline; this.fixed = builer.fixed; @@ -89,8 +88,8 @@ public final class LineStyle extends RenderStyle { } @Override - public void renderWay(Callback renderCallback) { - renderCallback.renderWay(this, level); + public void renderWay(Callback cb) { + cb.renderWay(this, level); } @Override @@ -98,12 +97,9 @@ public final class LineStyle extends RenderStyle { return (LineStyle) mCurrent; } - public final static class LineBuilder implements StyleBuilder { - public int level; + public static class LineBuilder> extends StyleBuilder { public String style; - public float width; - public int color; public Cap cap; public boolean outline; public boolean fixed; @@ -114,13 +110,13 @@ public final class LineStyle extends RenderStyle { public int stippleColor; public float stippleWidth; - public LineBuilder set(LineStyle line) { + public T set(LineStyle line) { if (line == null) return reset(); this.level = line.level; this.style = line.style; - this.width = line.width; - this.color = line.color; + this.strokeWidth = line.width; + this.fillColor = line.color; this.cap = line.cap; this.outline = line.outline; this.fixed = line.fixed; @@ -129,15 +125,15 @@ public final class LineStyle extends RenderStyle { this.stipple = line.stipple; this.stippleColor = line.stippleColor; this.stippleWidth = line.stippleWidth; - return this; + return self(); } - public LineBuilder reset() { + public T reset() { level = -1; style = null; - color = Color.BLACK; + fillColor = Color.BLACK; cap = Cap.ROUND; - width = 1; + strokeWidth = 1; fixed = false; fadeScale = -1; @@ -147,71 +143,56 @@ public final class LineStyle extends RenderStyle { stippleWidth = 1; stippleColor = Color.BLACK; - return this; + return self(); } - public LineBuilder style(String name) { + public T style(String name) { this.style = name; - return this; + return self(); } - public LineBuilder level(int level) { - this.level = level; - return this; - } - - public LineBuilder color(int color) { - this.color = color; - return this; - } - - public LineBuilder width(float width) { - this.width = width; - return this; - } - - public LineBuilder blur(float blur) { + public T blur(float blur) { this.blur = blur; - return this; + return self(); } - public LineBuilder fadeScale(int zoom) { + public T fadeScale(int zoom) { this.fadeScale = zoom; - return this; + return self(); } - public LineBuilder stippleColor(int color) { + public T stippleColor(int color) { this.stippleColor = color; - return this; + return self(); } - public LineBuilder color(String color) { - this.color = parseColor(color); - return this; - } - - public LineBuilder stippleColor(String color) { + public T stippleColor(String color) { this.stippleColor = parseColor(color); - return this; + return self(); } - public LineBuilder isOutline(boolean outline) { + public T isOutline(boolean outline) { this.outline = outline; - return this; + return self(); } public LineStyle build() { return new LineStyle(this); } - public LineBuilder cap(Cap cap) { + public T cap(Cap cap) { this.cap = cap; - return this; + return self(); } - public LineBuilder fixed(boolean b) { + public T fixed(boolean b) { this.fixed = b; - return this; + return self(); } } + + @SuppressWarnings("rawtypes") + public static LineBuilder builder() { + return new LineBuilder(); + } } diff --git a/vtm/src/org/oscim/theme/styles/RenderStyle.java b/vtm/src/org/oscim/theme/styles/RenderStyle.java index 4ad6b15c..da5f3889 100644 --- a/vtm/src/org/oscim/theme/styles/RenderStyle.java +++ b/vtm/src/org/oscim/theme/styles/RenderStyle.java @@ -17,17 +17,126 @@ */ package org.oscim.theme.styles; -import org.oscim.theme.IRenderTheme.Callback; +import static org.oscim.backend.canvas.Color.parseColor; /** * A RenderInstruction is a basic graphical primitive to draw a map. */ public abstract class RenderStyle { - public interface StyleBuilder { - RenderStyle build(); + public static abstract class StyleBuilder> { + + public String style; + + public int level; + + public int fillColor; + + public int strokeColor; + public float strokeWidth; + + public T setStyle(String style) { + this.style = style; + return self(); + } + + public T level(int level) { + this.level = level; + return self(); + } + + public T outline(int color, float width) { + this.strokeColor = color; + this.strokeWidth = width; + return self(); + } + + public T strokeColor(int color) { + this.strokeColor = color; + return self(); + } + + public T strokeColor(String color) { + this.strokeColor = parseColor(color); + return self(); + } + + public T strokeWidth(float width) { + this.strokeWidth = width; + return self(); + } + + public T color(int color) { + this.fillColor = color; + return self(); + } + + public T color(String color) { + this.fillColor = parseColor(color); + return self(); + } + + @SuppressWarnings("unchecked") + protected T self() { + return (T) this; + } + + public abstract RenderStyle build(); + } + + /** + * Callback methods for rendering areas, ways and points of interest (POIs). + */ + public static interface Callback { + /** + * Renders an area with the given parameters. + * + * @param area + * @param level + */ + void renderArea(AreaStyle area, int level); + + /** + * Renders an extrusion with the given parameters. + * + * @param extrusion + * @param level + */ + void renderExtrusion(ExtrusionStyle extrusion, int level); + + /** + * Renders a point of interest circle with the given parameters. + * + * @param circle + * the circle. + * @param level + * the drawing level on which the circle should be rendered. + */ + void renderCircle(CircleStyle circle, int level); + + /** + * Renders a point of interest symbol with the given bitmap. + * + * @param symbol + * the symbol to be rendered. + */ + void renderSymbol(SymbolStyle symbol); + + /** + * Renders a way with the given parameters. + * + * @param line + * @param level + */ + void renderWay(LineStyle line, int level); + + /** + * Renders a way with the given text along the way path. + * + * @param text + */ + void renderText(TextStyle text); - StyleBuilder level(int level); } RenderStyle mCurrent = this; diff --git a/vtm/src/org/oscim/theme/styles/SymbolStyle.java b/vtm/src/org/oscim/theme/styles/SymbolStyle.java index 0f3fdde7..77e49ba2 100644 --- a/vtm/src/org/oscim/theme/styles/SymbolStyle.java +++ b/vtm/src/org/oscim/theme/styles/SymbolStyle.java @@ -18,7 +18,6 @@ package org.oscim.theme.styles; import org.oscim.renderer.atlas.TextureRegion; -import org.oscim.theme.IRenderTheme.Callback; /** * Represents an icon on the map. diff --git a/vtm/src/org/oscim/theme/styles/TextStyle.java b/vtm/src/org/oscim/theme/styles/TextStyle.java index e315d2cb..12998085 100644 --- a/vtm/src/org/oscim/theme/styles/TextStyle.java +++ b/vtm/src/org/oscim/theme/styles/TextStyle.java @@ -23,13 +23,11 @@ import org.oscim.backend.canvas.Paint.Align; import org.oscim.backend.canvas.Paint.FontFamily; import org.oscim.backend.canvas.Paint.FontStyle; import org.oscim.renderer.atlas.TextureRegion; -import org.oscim.theme.IRenderTheme.Callback; public final class TextStyle extends RenderStyle { - public static class TextBuilder implements StyleBuilder { + public static class TextBuilder> extends StyleBuilder { - public String style; public float fontSize; public String textKey; @@ -40,11 +38,7 @@ public final class TextStyle extends RenderStyle { public FontFamily fontFamily; public FontStyle fontStyle; - public int color; - public int stroke; - public float strokeWidth; - - public TextBuilder reset() { + public T reset() { fontFamily = FontFamily.DEFAULT; fontStyle = FontStyle.NORMAL; style = null; @@ -53,11 +47,11 @@ public final class TextStyle extends RenderStyle { caption = false; priority = Integer.MAX_VALUE; texture = null; - color = Color.BLACK; - stroke = Color.BLACK; + fillColor = Color.BLACK; + strokeColor = Color.BLACK; strokeWidth = 0; dy = 0; - return this; + return self(); } public TextBuilder() { @@ -75,89 +69,80 @@ public final class TextStyle extends RenderStyle { return new TextStyle(this); } - public TextBuilder setStyle(String style) { - this.style = style; - return this; - } - - public TextBuilder setFontSize(float fontSize) { + public T fontSize(float fontSize) { this.fontSize = fontSize; - return this; + return self(); } - public TextBuilder setTextKey(String textKey) { + public T textKey(String textKey) { this.textKey = textKey; - return this; + return self(); } - public TextBuilder setCaption(boolean caption) { + public T isCaption(boolean caption) { this.caption = caption; - return this; + return self(); } - public TextBuilder setOffsetY(float dy) { + public T offsetY(float dy) { this.dy = dy; - return this; + return self(); } - public TextBuilder setPriority(int priority) { + public T priority(int priority) { this.priority = priority; - return this; + return self(); } - public TextBuilder setTexture(TextureRegion texture) { + public T texture(TextureRegion texture) { this.texture = texture; - return this; + return self(); } - public TextBuilder setFontFamily(FontFamily fontFamily) { + public T fontFamily(FontFamily fontFamily) { this.fontFamily = fontFamily; - return this; + return self(); } - public TextBuilder setFontStyle(FontStyle fontStyle) { + public T fontStyle(FontStyle fontStyle) { this.fontStyle = fontStyle; - return this; + return self(); } - public TextBuilder setColor(int color) { - this.color = color; - return this; + public T from(TextBuilder other) { + fontFamily = other.fontFamily; + fontStyle = other.fontStyle; + style = other.style; + textKey = other.textKey; + fontSize = other.fontSize; + caption = other.caption; + priority = other.priority; + texture = other.texture; + fillColor = other.fillColor; + strokeColor = other.strokeColor; + strokeWidth = other.strokeWidth; + dy = other.dy; + return self(); } - public TextBuilder setStroke(int stroke) { - this.stroke = stroke; - return this; - } - - public TextBuilder setStrokeWidth(float strokeWidth) { - this.strokeWidth = strokeWidth; - return this; - } - - @Override - public TextBuilder level(int level) { - return this; - } - - public TextBuilder setFrom(TextBuilder tb) { - fontFamily = tb.fontFamily; - fontStyle = tb.fontStyle; - style = tb.style; - textKey = tb.textKey; - fontSize = tb.fontSize; - caption = tb.caption; - priority = tb.priority; - texture = tb.texture; - color = tb.color; - stroke = tb.stroke; - strokeWidth = tb.strokeWidth; - dy = tb.dy; - return this; + public TextBuilder from(TextStyle style) { + this.style = style.style; + this.textKey = style.textKey; + this.caption = style.caption; + this.dy = style.dy; + this.priority = style.priority; + this.texture = style.texture; + this.fillColor = style.paint.getColor(); + this.fontFamily = FontFamily.DEFAULT; + this.fontStyle = FontStyle.NORMAL; + this.strokeColor = style.stroke.getColor(); + this.strokeWidth = 2; + this.fontSize = style.fontSize; + return self(); } } - TextStyle(TextBuilder tb) { + TextStyle(TextBuilder tb) { this.style = tb.style; this.textKey = tb.textKey; this.caption = tb.caption; @@ -169,7 +154,7 @@ public final class TextStyle extends RenderStyle { paint.setTextAlign(Align.CENTER); paint.setTypeface(tb.fontFamily, tb.fontStyle); - paint.setColor(tb.color); + paint.setColor(tb.fillColor); paint.setTextSize(tb.fontSize); if (tb.strokeWidth > 0) { @@ -177,7 +162,7 @@ public final class TextStyle extends RenderStyle { stroke.setStyle(Paint.Style.STROKE); stroke.setTextAlign(Align.CENTER); stroke.setTypeface(tb.fontFamily, tb.fontStyle); - stroke.setColor(tb.stroke); + stroke.setColor(tb.strokeColor); stroke.setStrokeWidth(tb.strokeWidth); stroke.setTextSize(tb.fontSize); } else @@ -226,4 +211,9 @@ public final class TextStyle extends RenderStyle { fontHeight = paint.getFontHeight(); fontDescent = paint.getFontDescent(); } + + @SuppressWarnings("rawtypes") + public static TextBuilder builder() { + return new TextBuilder(); + } }