update LineBuilder
This commit is contained in:
parent
f80b4ee2b1
commit
4e473bf242
@ -758,9 +758,9 @@ public final class LineLayer extends RenderElement {
|
|||||||
MercatorProjection.groundResolution(v.pos));
|
MercatorProjection.groundResolution(v.pos));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (line.fade < v.pos.zoomLevel) {
|
if (line.fadeScale < v.pos.zoomLevel) {
|
||||||
GLUtils.setColor(uLineColor, line.color, 1);
|
GLUtils.setColor(uLineColor, line.color, 1);
|
||||||
} else if (line.fade > v.pos.zoomLevel) {
|
} else if (line.fadeScale > v.pos.zoomLevel) {
|
||||||
continue;
|
continue;
|
||||||
} else {
|
} else {
|
||||||
float alpha = (float) (scale > 1.2 ? scale : 1.2) - 1;
|
float alpha = (float) (scale > 1.2 ? scale : 1.2) - 1;
|
||||||
|
@ -17,6 +17,10 @@
|
|||||||
*/
|
*/
|
||||||
package org.oscim.theme;
|
package org.oscim.theme;
|
||||||
|
|
||||||
|
import static java.lang.Boolean.parseBoolean;
|
||||||
|
import static java.lang.Float.parseFloat;
|
||||||
|
import static java.lang.Integer.parseInt;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -42,6 +46,7 @@ import org.oscim.theme.styles.Area.AreaBuilder;
|
|||||||
import org.oscim.theme.styles.Circle;
|
import org.oscim.theme.styles.Circle;
|
||||||
import org.oscim.theme.styles.Extrusion;
|
import org.oscim.theme.styles.Extrusion;
|
||||||
import org.oscim.theme.styles.Line;
|
import org.oscim.theme.styles.Line;
|
||||||
|
import org.oscim.theme.styles.Line.LineBuilder;
|
||||||
import org.oscim.theme.styles.LineSymbol;
|
import org.oscim.theme.styles.LineSymbol;
|
||||||
import org.oscim.theme.styles.RenderStyle;
|
import org.oscim.theme.styles.RenderStyle;
|
||||||
import org.oscim.theme.styles.Symbol;
|
import org.oscim.theme.styles.Symbol;
|
||||||
@ -129,6 +134,7 @@ public class XmlThemeBuilder extends DefaultHandler {
|
|||||||
|
|
||||||
private final TextBuilder mTextBuilder = new TextBuilder();
|
private final TextBuilder mTextBuilder = new TextBuilder();
|
||||||
private final AreaBuilder mAreaBuilder = new AreaBuilder();
|
private final AreaBuilder mAreaBuilder = new AreaBuilder();
|
||||||
|
private final LineBuilder mLineBuilder = new LineBuilder();
|
||||||
|
|
||||||
private RuleBuilder mCurrentRule;
|
private RuleBuilder mCurrentRule;
|
||||||
private TextureAtlas mTextureAtlas;
|
private TextureAtlas mTextureAtlas;
|
||||||
@ -333,41 +339,16 @@ public class XmlThemeBuilder extends DefaultHandler {
|
|||||||
*/
|
*/
|
||||||
private Line createLine(Line line, String elementName, Attributes attributes,
|
private Line createLine(Line line, String elementName, Attributes attributes,
|
||||||
int level, boolean isOutline) {
|
int level, boolean isOutline) {
|
||||||
|
LineBuilder b = mLineBuilder.set(line);
|
||||||
// Style name
|
b.isOutline(isOutline);
|
||||||
String style = null;
|
b.level(level);
|
||||||
float width = 0;
|
|
||||||
Cap cap = Cap.ROUND;
|
|
||||||
|
|
||||||
// Extras
|
|
||||||
int fade = -1;
|
|
||||||
boolean fixed = false;
|
|
||||||
float blur = 0;
|
|
||||||
|
|
||||||
// Stipple
|
|
||||||
int stipple = 0;
|
|
||||||
float stippleWidth = 1;
|
|
||||||
|
|
||||||
int color = Color.TRANSPARENT;
|
|
||||||
int stippleColor = Color.BLACK;
|
|
||||||
|
|
||||||
if (line != null) {
|
|
||||||
color = line.color;
|
|
||||||
fixed = line.fixed;
|
|
||||||
fade = line.fadeScale;
|
|
||||||
cap = line.cap;
|
|
||||||
blur = line.blur;
|
|
||||||
stipple = line.stipple;
|
|
||||||
stippleColor = line.stippleColor;
|
|
||||||
stippleWidth = line.stippleWidth;
|
|
||||||
}
|
|
||||||
|
|
||||||
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 ("id".equals(name))
|
if ("id".equals(name))
|
||||||
style = value;
|
b.style = value;
|
||||||
|
|
||||||
else if ("src".equals(name))
|
else if ("src".equals(name))
|
||||||
;// src = value;
|
;// src = value;
|
||||||
@ -379,34 +360,43 @@ public class XmlThemeBuilder extends DefaultHandler {
|
|||||||
;// ignore
|
;// ignore
|
||||||
|
|
||||||
else if ("stroke".equals(name))
|
else if ("stroke".equals(name))
|
||||||
color = Color.parseColor(value);
|
b.color(value);
|
||||||
|
|
||||||
else if ("width".equals(name) || "stroke-width".equals(name))
|
|
||||||
width = Float.parseFloat(value);
|
|
||||||
|
|
||||||
|
else if ("width".equals(name) || "stroke-width".equals(name)) {
|
||||||
|
float width = parseFloat(value);
|
||||||
|
if (line == null) {
|
||||||
|
validateNonNegative("width", width);
|
||||||
|
} else {
|
||||||
|
/* use stroke width relative to 'line' */
|
||||||
|
width += line.width;
|
||||||
|
if (width <= 0)
|
||||||
|
width = 1;
|
||||||
|
}
|
||||||
|
b.width = width;
|
||||||
|
}
|
||||||
else if ("cap".equals(name) || "stroke-linecap".equals(name))
|
else if ("cap".equals(name) || "stroke-linecap".equals(name))
|
||||||
cap = Cap.valueOf(value.toUpperCase());
|
b.cap = Cap.valueOf(value.toUpperCase());
|
||||||
|
|
||||||
else if ("fix".equals(name))
|
else if ("fix".equals(name))
|
||||||
fixed = Boolean.parseBoolean(value);
|
b.fixed = parseBoolean(value);
|
||||||
|
|
||||||
else if ("stipple".equals(name))
|
else if ("stipple".equals(name))
|
||||||
stipple = Integer.parseInt(value);
|
b.stipple = parseInt(value);
|
||||||
|
|
||||||
else if ("stipple-stroke".equals(name))
|
else if ("stipple-stroke".equals(name))
|
||||||
stippleColor = Color.parseColor(value);
|
b.stippleColor(value);
|
||||||
|
|
||||||
else if ("stipple-width".equals(name))
|
else if ("stipple-width".equals(name))
|
||||||
stippleWidth = Float.parseFloat(value);
|
b.stippleWidth = parseFloat(value);
|
||||||
|
|
||||||
else if ("fade".equals(name))
|
else if ("fade".equals(name))
|
||||||
fade = Integer.parseInt(value);
|
b.fadeScale = Integer.parseInt(value);
|
||||||
|
|
||||||
else if ("min".equals(name))
|
else if ("min".equals(name))
|
||||||
; //min = Float.parseFloat(value);
|
; //min = Float.parseFloat(value);
|
||||||
|
|
||||||
else if ("blur".equals(name))
|
else if ("blur".equals(name))
|
||||||
blur = Float.parseFloat(value);
|
b.blur = parseFloat(value);
|
||||||
|
|
||||||
else if ("style".equals(name))
|
else if ("style".equals(name))
|
||||||
; // ignore
|
; // ignore
|
||||||
@ -417,21 +407,7 @@ public class XmlThemeBuilder extends DefaultHandler {
|
|||||||
else
|
else
|
||||||
logUnknownAttribute(elementName, name, value, i);
|
logUnknownAttribute(elementName, name, value, i);
|
||||||
}
|
}
|
||||||
|
return b.build();
|
||||||
// inherit properties from 'line'
|
|
||||||
if (line != null) {
|
|
||||||
// use stroke width relative to 'line'
|
|
||||||
width = line.width + width;
|
|
||||||
if (width <= 0)
|
|
||||||
width = 1;
|
|
||||||
|
|
||||||
} else if (!isOutline) {
|
|
||||||
validateNonNegative("width", width);
|
|
||||||
}
|
|
||||||
|
|
||||||
return new Line(level, style, color, width, cap, fixed,
|
|
||||||
stipple, stippleColor, stippleWidth,
|
|
||||||
fade, blur, isOutline);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleAreaElement(String localName, Attributes attributes, boolean isStyle)
|
private void handleAreaElement(String localName, Attributes attributes, boolean isStyle)
|
||||||
|
@ -17,76 +17,22 @@
|
|||||||
*/
|
*/
|
||||||
package org.oscim.theme.styles;
|
package org.oscim.theme.styles;
|
||||||
|
|
||||||
|
import static org.oscim.backend.canvas.Color.parseColor;
|
||||||
|
|
||||||
import org.oscim.backend.canvas.Color;
|
import org.oscim.backend.canvas.Color;
|
||||||
import org.oscim.backend.canvas.Paint.Cap;
|
import org.oscim.backend.canvas.Paint.Cap;
|
||||||
import org.oscim.theme.IRenderTheme.Callback;
|
import org.oscim.theme.IRenderTheme.Callback;
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents a polyline on the map.
|
|
||||||
*/
|
|
||||||
public final class Line extends RenderStyle {
|
public final class Line extends RenderStyle {
|
||||||
|
|
||||||
public final static class LineBuilder {
|
|
||||||
public int level;
|
|
||||||
|
|
||||||
public String style;
|
|
||||||
public float width;
|
|
||||||
public int color;
|
|
||||||
public Cap cap;
|
|
||||||
public boolean outline;
|
|
||||||
public boolean fixed;
|
|
||||||
public int fade;
|
|
||||||
public float blur;
|
|
||||||
|
|
||||||
public int stipple;
|
|
||||||
public int stippleColor;
|
|
||||||
public float stippleWidth;
|
|
||||||
|
|
||||||
public LineBuilder set(Line line) {
|
|
||||||
this.level = line.level;
|
|
||||||
this.style = line.style;
|
|
||||||
this.width = line.width;
|
|
||||||
this.color = line.color;
|
|
||||||
this.cap = line.cap;
|
|
||||||
this.outline = line.outline;
|
|
||||||
this.fixed = line.fixed;
|
|
||||||
this.fade = line.fade;
|
|
||||||
this.blur = line.blur;
|
|
||||||
this.stipple = line.stipple;
|
|
||||||
this.stippleColor = line.stippleColor;
|
|
||||||
this.stippleWidth = line.stippleWidth;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public LineBuilder setColor(int color) {
|
|
||||||
this.color = color;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public LineBuilder setStippleColor(int color) {
|
|
||||||
this.stippleColor = color;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public LineBuilder setColor(String color) {
|
|
||||||
this.color = Color.parseColor(color);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Line build() {
|
|
||||||
return new Line(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
final int level;
|
final int level;
|
||||||
|
|
||||||
public final String style;
|
public final String style;
|
||||||
public final float width;
|
public final float width;
|
||||||
public final int color;
|
public final int color;
|
||||||
public final Cap cap;
|
public final Cap cap;
|
||||||
public final boolean outline;
|
public final boolean outline;
|
||||||
public final boolean fixed;
|
public final boolean fixed;
|
||||||
public final int fade;
|
public final int fadeScale;
|
||||||
public final float blur;
|
public final float blur;
|
||||||
|
|
||||||
public final int stipple;
|
public final int stipple;
|
||||||
@ -101,7 +47,7 @@ public final class Line extends RenderStyle {
|
|||||||
this.cap = builer.cap;
|
this.cap = builer.cap;
|
||||||
this.outline = builer.outline;
|
this.outline = builer.outline;
|
||||||
this.fixed = builer.fixed;
|
this.fixed = builer.fixed;
|
||||||
this.fade = builer.fade;
|
this.fadeScale = builer.fadeScale;
|
||||||
this.blur = builer.blur;
|
this.blur = builer.blur;
|
||||||
this.stipple = builer.stipple;
|
this.stipple = builer.stipple;
|
||||||
this.stippleColor = builer.stippleColor;
|
this.stippleColor = builer.stippleColor;
|
||||||
@ -111,27 +57,12 @@ public final class Line extends RenderStyle {
|
|||||||
public Line(int level, String style, int color, float width,
|
public Line(int level, String style, int color, float width,
|
||||||
Cap cap, boolean fixed,
|
Cap cap, boolean fixed,
|
||||||
int stipple, int stippleColor, float stippleWidth,
|
int stipple, int stippleColor, float stippleWidth,
|
||||||
int fade, float blur, boolean isOutline) {
|
int fadeScale, float blur, boolean isOutline) {
|
||||||
|
|
||||||
this.level = level;
|
this.level = level;
|
||||||
this.style = style;
|
this.style = style;
|
||||||
this.outline = isOutline;
|
this.outline = isOutline;
|
||||||
|
|
||||||
// paint = new Paint(Paint.ANTI_ALIAS_FLAG);
|
|
||||||
//
|
|
||||||
// if (src != null) {
|
|
||||||
// Shader shader = BitmapUtils.createBitmapShader(src);
|
|
||||||
// paint.setShader(shader);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// paint.setStyle(Style.STROKE);
|
|
||||||
// paint.setColor(stroke);
|
|
||||||
// if (strokeDasharray != null) {
|
|
||||||
// paint.setPathEffect(new DashPathEffect(strokeDasharray, 0));
|
|
||||||
// }
|
|
||||||
|
|
||||||
//GlUtils.changeSaturation(color, 1.02f);
|
|
||||||
|
|
||||||
this.cap = cap;
|
this.cap = cap;
|
||||||
this.color = color;
|
this.color = color;
|
||||||
this.width = width;
|
this.width = width;
|
||||||
@ -142,7 +73,7 @@ public final class Line extends RenderStyle {
|
|||||||
this.stippleWidth = stippleWidth;
|
this.stippleWidth = stippleWidth;
|
||||||
|
|
||||||
this.blur = blur;
|
this.blur = blur;
|
||||||
this.fade = fade;
|
this.fadeScale = fadeScale;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Line(int stroke, float width) {
|
public Line(int stroke, float width) {
|
||||||
@ -161,4 +92,111 @@ public final class Line extends RenderStyle {
|
|||||||
public void renderWay(Callback renderCallback) {
|
public void renderWay(Callback renderCallback) {
|
||||||
renderCallback.renderWay(this, level);
|
renderCallback.renderWay(this, level);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final static class LineBuilder {
|
||||||
|
public int level;
|
||||||
|
|
||||||
|
public String style;
|
||||||
|
public float width;
|
||||||
|
public int color;
|
||||||
|
public Cap cap;
|
||||||
|
public boolean outline;
|
||||||
|
public boolean fixed;
|
||||||
|
public int fadeScale;
|
||||||
|
public float blur;
|
||||||
|
|
||||||
|
public int stipple;
|
||||||
|
public int stippleColor;
|
||||||
|
public float stippleWidth;
|
||||||
|
|
||||||
|
public LineBuilder set(Line line) {
|
||||||
|
if (line == null)
|
||||||
|
return reset();
|
||||||
|
this.level = line.level;
|
||||||
|
this.style = line.style;
|
||||||
|
this.width = line.width;
|
||||||
|
this.color = line.color;
|
||||||
|
this.cap = line.cap;
|
||||||
|
this.outline = line.outline;
|
||||||
|
this.fixed = line.fixed;
|
||||||
|
this.fadeScale = line.fadeScale;
|
||||||
|
this.blur = line.blur;
|
||||||
|
this.stipple = line.stipple;
|
||||||
|
this.stippleColor = line.stippleColor;
|
||||||
|
this.stippleWidth = line.stippleWidth;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LineBuilder reset() {
|
||||||
|
level = -1;
|
||||||
|
style = null;
|
||||||
|
color = Color.BLACK;
|
||||||
|
cap = Cap.ROUND;
|
||||||
|
width = 1;
|
||||||
|
fixed = false;
|
||||||
|
|
||||||
|
fadeScale = -1;
|
||||||
|
blur = 0;
|
||||||
|
|
||||||
|
stipple = 0;
|
||||||
|
stippleWidth = 1;
|
||||||
|
stippleColor = Color.BLACK;
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LineBuilder style(String name) {
|
||||||
|
this.style = name;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
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) {
|
||||||
|
this.blur = blur;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LineBuilder fadeScale(int zoom) {
|
||||||
|
this.fadeScale = zoom;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LineBuilder stippleColor(int color) {
|
||||||
|
this.stippleColor = color;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LineBuilder color(String color) {
|
||||||
|
this.color = parseColor(color);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LineBuilder stippleColor(String color) {
|
||||||
|
this.stippleColor = parseColor(color);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LineBuilder isOutline(boolean outline) {
|
||||||
|
this.outline = outline;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Line build() {
|
||||||
|
return new Line(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user