ExtrusionStyle: add StyleBuilder interface
This commit is contained in:
parent
e9bb7aaae4
commit
02db7ca08d
@ -41,6 +41,7 @@ import org.oscim.theme.styles.AreaStyle.AreaBuilder;
|
|||||||
import org.oscim.theme.styles.CircleStyle;
|
import org.oscim.theme.styles.CircleStyle;
|
||||||
import org.oscim.theme.styles.CircleStyle.CircleBuilder;
|
import org.oscim.theme.styles.CircleStyle.CircleBuilder;
|
||||||
import org.oscim.theme.styles.ExtrusionStyle;
|
import org.oscim.theme.styles.ExtrusionStyle;
|
||||||
|
import org.oscim.theme.styles.ExtrusionStyle.ExtrusionBuilder;
|
||||||
import org.oscim.theme.styles.LineStyle;
|
import org.oscim.theme.styles.LineStyle;
|
||||||
import org.oscim.theme.styles.LineStyle.LineBuilder;
|
import org.oscim.theme.styles.LineStyle.LineBuilder;
|
||||||
import org.oscim.theme.styles.RenderStyle;
|
import org.oscim.theme.styles.RenderStyle;
|
||||||
@ -124,6 +125,7 @@ public class XmlThemeBuilder extends DefaultHandler {
|
|||||||
|
|
||||||
private final AreaBuilder<?> mAreaBuilder = AreaStyle.builder();
|
private final AreaBuilder<?> mAreaBuilder = AreaStyle.builder();
|
||||||
private final CircleBuilder<?> mCircleBuilder = CircleStyle.builder();
|
private final CircleBuilder<?> mCircleBuilder = CircleStyle.builder();
|
||||||
|
private final ExtrusionBuilder<?> mExtrusionBuilder = ExtrusionStyle.builder();
|
||||||
private final LineBuilder<?> mLineBuilder = LineStyle.builder();
|
private final LineBuilder<?> mLineBuilder = LineStyle.builder();
|
||||||
private final SymbolBuilder<?> mSymbolBuilder = SymbolStyle.builder();
|
private final SymbolBuilder<?> mSymbolBuilder = SymbolStyle.builder();
|
||||||
private final TextBuilder<?> mTextBuilder = TextStyle.builder();
|
private final TextBuilder<?> mTextBuilder = TextStyle.builder();
|
||||||
@ -1028,37 +1030,33 @@ public class XmlThemeBuilder extends DefaultHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private ExtrusionStyle createExtrusion(String elementName, Attributes attributes, int level) {
|
private ExtrusionStyle createExtrusion(String elementName, Attributes attributes, int level) {
|
||||||
String cat = null;
|
ExtrusionBuilder<?> b = mExtrusionBuilder.reset();
|
||||||
int colorSide = 0;
|
b.level(level);
|
||||||
int colorTop = 0;
|
|
||||||
int colorLine = 0;
|
|
||||||
int defaultHeight = 0;
|
|
||||||
|
|
||||||
for (int i = 0; i < attributes.getLength(); ++i) {
|
for (int i = 0; i < attributes.getLength(); ++i) {
|
||||||
String name = attributes.getLocalName(i);
|
String name = attributes.getLocalName(i);
|
||||||
String value = attributes.getValue(i);
|
String value = attributes.getValue(i);
|
||||||
|
|
||||||
if ("cat".equals(name))
|
if ("cat".equals(name))
|
||||||
cat = value;
|
b.cat(value);
|
||||||
|
|
||||||
else if ("side-color".equals(name))
|
else if ("side-color".equals(name))
|
||||||
colorSide = Color.parseColor(value);
|
b.colorSide(Color.parseColor(value));
|
||||||
|
|
||||||
else if ("top-color".equals(name))
|
else if ("top-color".equals(name))
|
||||||
colorTop = Color.parseColor(value);
|
b.colorTop(Color.parseColor(value));
|
||||||
|
|
||||||
else if ("line-color".equals(name))
|
else if ("line-color".equals(name))
|
||||||
colorLine = Color.parseColor(value);
|
b.colorLine(Color.parseColor(value));
|
||||||
|
|
||||||
else if ("default-height".equals(name))
|
else if ("default-height".equals(name))
|
||||||
defaultHeight = Integer.parseInt(value);
|
b.defaultHeight(Integer.parseInt(value));
|
||||||
|
|
||||||
else
|
else
|
||||||
logUnknownAttribute(elementName, name, value, i);
|
logUnknownAttribute(elementName, name, value, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new ExtrusionStyle(level, colorSide, colorTop, colorLine, defaultHeight)
|
return b.build();
|
||||||
.setCat(cat);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getStringAttribute(Attributes attributes, String name) {
|
private String getStringAttribute(Attributes attributes, String name) {
|
||||||
|
@ -19,54 +19,152 @@ package org.oscim.theme.styles;
|
|||||||
|
|
||||||
import org.oscim.backend.canvas.Color;
|
import org.oscim.backend.canvas.Color;
|
||||||
|
|
||||||
|
import static org.oscim.backend.canvas.Color.parseColor;
|
||||||
|
|
||||||
public class ExtrusionStyle extends RenderStyle<ExtrusionStyle> {
|
public class ExtrusionStyle extends RenderStyle<ExtrusionStyle> {
|
||||||
|
|
||||||
public ExtrusionStyle(int level, int colorSides, int colorTop, int colorLine, int defaultHeight) {
|
public final int colorLine;
|
||||||
|
public final int colorSide;
|
||||||
|
public final int colorTop;
|
||||||
|
public final int defaultHeight;
|
||||||
|
private final int level;
|
||||||
|
|
||||||
|
public final float[] colors;
|
||||||
|
|
||||||
|
public ExtrusionStyle(int level, int colorSide, int colorTop, int colorLine, int defaultHeight) {
|
||||||
|
this.level = level;
|
||||||
|
|
||||||
|
this.colorSide = colorSide;
|
||||||
|
this.colorTop = colorTop;
|
||||||
|
this.colorLine = colorLine;
|
||||||
this.colors = new float[16];
|
this.colors = new float[16];
|
||||||
fillColors(colorSides, colorTop, colorLine, colors);
|
fillColors(colorSide, colorTop, colorLine, colors);
|
||||||
|
|
||||||
this.defaultHeight = defaultHeight;
|
this.defaultHeight = defaultHeight;
|
||||||
this.level = level;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void fillColors(int sides, int top, int lines, float[] colors) {
|
public ExtrusionStyle(ExtrusionBuilder<?> b) {
|
||||||
|
this.level = b.level;
|
||||||
|
|
||||||
|
this.colorSide = b.colorSide;
|
||||||
|
this.colorTop = b.colorTop;
|
||||||
|
this.colorLine = b.colorLine;
|
||||||
|
this.colors = new float[16];
|
||||||
|
fillColors(colorSide, colorTop, colorLine, colors);
|
||||||
|
|
||||||
|
this.defaultHeight = b.defaultHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void fillColors(int side, int top, int line, float[] colors) {
|
||||||
float a = Color.aToFloat(top);
|
float a = Color.aToFloat(top);
|
||||||
colors[0] = a * Color.rToFloat(top);
|
colors[0] = a * Color.rToFloat(top);
|
||||||
colors[1] = a * Color.gToFloat(top);
|
colors[1] = a * Color.gToFloat(top);
|
||||||
colors[2] = a * Color.bToFloat(top);
|
colors[2] = a * Color.bToFloat(top);
|
||||||
colors[3] = a;
|
colors[3] = a;
|
||||||
|
|
||||||
a = Color.aToFloat(sides);
|
a = Color.aToFloat(side);
|
||||||
colors[4] = a * Color.rToFloat(sides);
|
colors[4] = a * Color.rToFloat(side);
|
||||||
colors[5] = a * Color.gToFloat(sides);
|
colors[5] = a * Color.gToFloat(side);
|
||||||
colors[6] = a * Color.bToFloat(sides);
|
colors[6] = a * Color.bToFloat(side);
|
||||||
colors[7] = a;
|
colors[7] = a;
|
||||||
|
|
||||||
a = Color.aToFloat(sides);
|
a = Color.aToFloat(side);
|
||||||
colors[8] = a * Color.rToFloat(sides);
|
colors[8] = a * Color.rToFloat(side);
|
||||||
colors[9] = a * Color.gToFloat(sides);
|
colors[9] = a * Color.gToFloat(side);
|
||||||
colors[10] = a * Color.bToFloat(sides);
|
colors[10] = a * Color.bToFloat(side);
|
||||||
colors[11] = a;
|
colors[11] = a;
|
||||||
|
|
||||||
a = Color.aToFloat(lines);
|
a = Color.aToFloat(line);
|
||||||
colors[12] = a * Color.rToFloat(lines);
|
colors[12] = a * Color.rToFloat(line);
|
||||||
colors[13] = a * Color.gToFloat(lines);
|
colors[13] = a * Color.gToFloat(line);
|
||||||
colors[14] = a * Color.bToFloat(lines);
|
colors[14] = a * Color.bToFloat(line);
|
||||||
colors[15] = a;
|
colors[15] = a;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void renderWay(Callback cb) {
|
|
||||||
cb.renderExtrusion(this, this.level);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ExtrusionStyle current() {
|
public ExtrusionStyle current() {
|
||||||
return (ExtrusionStyle) mCurrent;
|
return (ExtrusionStyle) mCurrent;
|
||||||
}
|
}
|
||||||
|
|
||||||
private final int level;
|
@Override
|
||||||
public final float[] colors;
|
public void renderWay(Callback cb) {
|
||||||
public final int defaultHeight;
|
cb.renderExtrusion(this, this.level);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class ExtrusionBuilder<T extends ExtrusionBuilder<T>> extends StyleBuilder<T> {
|
||||||
|
|
||||||
|
public int colorSide;
|
||||||
|
public int colorTop;
|
||||||
|
public int colorLine;
|
||||||
|
public int defaultHeight;
|
||||||
|
|
||||||
|
public ExtrusionBuilder() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public T set(ExtrusionStyle extrusion) {
|
||||||
|
if (extrusion == null)
|
||||||
|
return reset();
|
||||||
|
|
||||||
|
this.level = extrusion.level;
|
||||||
|
this.colorSide = extrusion.colorSide;
|
||||||
|
this.colorTop = extrusion.colorTop;
|
||||||
|
this.colorLine = extrusion.colorLine;
|
||||||
|
this.defaultHeight = extrusion.defaultHeight;
|
||||||
|
|
||||||
|
return self();
|
||||||
|
}
|
||||||
|
|
||||||
|
public T colorSide(int colorSide) {
|
||||||
|
this.colorSide = colorSide;
|
||||||
|
return self();
|
||||||
|
}
|
||||||
|
|
||||||
|
public T colorSide(String colorSide) {
|
||||||
|
this.colorSide = parseColor(colorSide);
|
||||||
|
return self();
|
||||||
|
}
|
||||||
|
|
||||||
|
public T colorTop(int colorTop) {
|
||||||
|
this.colorTop = colorTop;
|
||||||
|
return self();
|
||||||
|
}
|
||||||
|
|
||||||
|
public T colorTop(String colorTop) {
|
||||||
|
this.colorTop = parseColor(colorTop);
|
||||||
|
return self();
|
||||||
|
}
|
||||||
|
|
||||||
|
public T colorLine(int colorLine) {
|
||||||
|
this.colorLine = colorLine;
|
||||||
|
return self();
|
||||||
|
}
|
||||||
|
|
||||||
|
public T colorLine(String colorLine) {
|
||||||
|
this.colorLine = parseColor(colorLine);
|
||||||
|
return self();
|
||||||
|
}
|
||||||
|
|
||||||
|
public T defaultHeight(int defaultHeight) {
|
||||||
|
this.defaultHeight = defaultHeight;
|
||||||
|
return self();
|
||||||
|
}
|
||||||
|
|
||||||
|
public T reset() {
|
||||||
|
level = -1;
|
||||||
|
colorSide = Color.TRANSPARENT;
|
||||||
|
colorTop = Color.TRANSPARENT;
|
||||||
|
colorLine = Color.TRANSPARENT;
|
||||||
|
defaultHeight = 0;
|
||||||
|
return self();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ExtrusionStyle build() {
|
||||||
|
return new ExtrusionStyle(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("rawtypes")
|
||||||
|
public static ExtrusionBuilder<?> builder() {
|
||||||
|
return new ExtrusionBuilder();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user