CircleStyle: add style builder #122

This commit is contained in:
Emux 2016-12-07 15:12:50 +02:00
parent 0a5d08a908
commit 229ea0b350
4 changed files with 76 additions and 16 deletions

View File

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

View File

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

View File

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

View File

@ -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<CircleStyle> {
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<T extends CircleStyle.CircleBuilder<T>> extends StyleBuilder<T> {
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<>();
}
}