diff --git a/vtm-playground/src/org/oscim/test/CircleTest.java b/vtm-playground/src/org/oscim/test/CircleTest.java index 0adaf721..02b8cd45 100644 --- a/vtm-playground/src/org/oscim/test/CircleTest.java +++ b/vtm-playground/src/org/oscim/test/CircleTest.java @@ -59,7 +59,10 @@ public class CircleTest extends GdxMap { mMap.setMapPosition(0, 0, 1 << 4); - CircleStyle cs = new CircleStyle(30, false, 0xff00ff00, 0xffffffff, 2, 0); + CircleStyle cs = CircleStyle.builder() + .radius(30) + .color(0xff00ff00) + .build(); CircleBucket cb = renderer.buckets.addCircleBucket(0, cs); addCircle(200, -200, cb); addCircle(-200, -200, cb); diff --git a/vtm/src/org/oscim/renderer/bucket/CircleBucket.java b/vtm/src/org/oscim/renderer/bucket/CircleBucket.java index 5ff6af1a..4f68a369 100644 --- a/vtm/src/org/oscim/renderer/bucket/CircleBucket.java +++ b/vtm/src/org/oscim/renderer/bucket/CircleBucket.java @@ -100,7 +100,7 @@ public class CircleBucket extends RenderBucket { for (; b != null && b.type == CIRCLE; b = b.next) { CircleBucket cb = (CircleBucket) b; - GLUtils.setColor(s.uColor, cb.circle.fill, 1); + GLUtils.setColor(s.uColor, cb.circle.fillColor, 1); gl.uniform1f(s.uScale, cb.circle.radius); gl.vertexAttribPointer(s.aPos, 2, GL.SHORT, diff --git a/vtm/src/org/oscim/theme/XmlThemeBuilder.java b/vtm/src/org/oscim/theme/XmlThemeBuilder.java index d21d6ec8..1c4f7190 100644 --- a/vtm/src/org/oscim/theme/XmlThemeBuilder.java +++ b/vtm/src/org/oscim/theme/XmlThemeBuilder.java @@ -901,7 +901,7 @@ public class XmlThemeBuilder extends DefaultHandler { */ private CircleStyle createCircle(String elementName, Attributes attributes, int level) { String cat = null; - Float radius = null; + float radius = 0; boolean scaleRadius = false; int fill = Color.TRANSPARENT; int stroke = Color.TRANSPARENT; diff --git a/vtm/src/org/oscim/theme/styles/CircleStyle.java b/vtm/src/org/oscim/theme/styles/CircleStyle.java index dc3b0b05..d53ce64c 100644 --- a/vtm/src/org/oscim/theme/styles/CircleStyle.java +++ b/vtm/src/org/oscim/theme/styles/CircleStyle.java @@ -18,40 +18,97 @@ */ package org.oscim.theme.styles; +import org.oscim.backend.canvas.Color; + /** * Represents a round area on the map. */ public final class CircleStyle extends RenderStyle { + public final int fillColor; public final int level; - - public final int fill; - public final int outline; public final float radius; public final boolean scaleRadius; + public final int strokeColor; public final float strokeWidth; - public CircleStyle(float radius, boolean scaleRadius, int fill, int stroke, + public CircleStyle(float radius, boolean scaleRadius, int fillColor, int strokeColor, float strokeWidth, int level) { - super(); - this.radius = radius; this.scaleRadius = scaleRadius; - - this.fill = fill; - this.outline = stroke; - + this.fillColor = fillColor; + this.strokeColor = strokeColor; this.strokeWidth = strokeWidth; this.level = level; } + public CircleStyle(CircleStyle.CircleBuilder b) { + this.radius = b.radius; + this.scaleRadius = b.scaleRadius; + this.fillColor = b.fillColor; + this.strokeColor = b.strokeColor; + this.strokeWidth = b.strokeWidth; + this.level = b.level; + } + + @Override + public CircleStyle current() { + return (CircleStyle) mCurrent; + } + @Override public void renderNode(Callback cb) { cb.renderCircle(this, this.level); } - @Override - public CircleStyle current() { - return (CircleStyle) mCurrent; + public static class CircleBuilder> extends StyleBuilder { + + public float radius; + public boolean scaleRadius; + + public CircleBuilder() { + } + + public T set(CircleStyle circle) { + if (circle == null) + return reset(); + + this.radius = circle.radius; + this.scaleRadius = circle.scaleRadius; + this.fillColor = circle.fillColor; + this.strokeColor = circle.strokeColor; + this.strokeWidth = circle.strokeWidth; + this.level = circle.level; + + return self(); + } + + public T radius(float radius) { + this.radius = radius; + return self(); + } + + public T scaleRadius(boolean scaleRadius) { + this.scaleRadius = scaleRadius; + return self(); + } + + public T reset() { + radius = 0; + scaleRadius = false; + fillColor = Color.TRANSPARENT; + strokeColor = Color.TRANSPARENT; + strokeWidth = 0; + return self(); + } + + public CircleStyle build() { + return new CircleStyle(this); + } + } + + @SuppressWarnings("rawtypes") + public static CircleStyle.CircleBuilder builder() { + return new CircleStyle.CircleBuilder<>(); } }