diff --git a/resources/rendertheme.xsd b/resources/rendertheme.xsd
index 12093a0d..a388561f 100644
--- a/resources/rendertheme.xsd
+++ b/resources/rendertheme.xsd
@@ -150,6 +150,7 @@
+
@@ -219,6 +220,7 @@
+
diff --git a/vtm-android/src/org/oscim/android/canvas/AndroidCanvas.java b/vtm-android/src/org/oscim/android/canvas/AndroidCanvas.java
index 78392b21..3c68398d 100644
--- a/vtm-android/src/org/oscim/android/canvas/AndroidCanvas.java
+++ b/vtm-android/src/org/oscim/android/canvas/AndroidCanvas.java
@@ -1,6 +1,6 @@
/*
* Copyright 2013 Hannes Janetzek
- * Copyright 2016-2017 devemux86
+ * Copyright 2016-2019 devemux86
* Copyright 2017 nebular
* Copyright 2017 Longri
*
@@ -21,8 +21,8 @@ package org.oscim.android.canvas;
import android.graphics.Color;
import android.graphics.PorterDuff;
+import android.graphics.PorterDuffXfermode;
import android.graphics.RectF;
-
import org.oscim.backend.canvas.Bitmap;
import org.oscim.backend.canvas.Canvas;
import org.oscim.backend.canvas.Paint;
@@ -93,6 +93,7 @@ public class AndroidCanvas implements Canvas {
RectF rect = new RectF(x, y, x + width, y + height);
android.graphics.Paint paint = new android.graphics.Paint();
paint.setColor(color);
+ paint.setXfermode(new PorterDuffXfermode(color == Color.TRANSPARENT ? PorterDuff.Mode.CLEAR : PorterDuff.Mode.SRC_OVER));
canvas.drawRect(rect, paint);
}
diff --git a/vtm-themes/resources/assets/vtm/default.xml b/vtm-themes/resources/assets/vtm/default.xml
index a9297e49..5420e6b2 100644
--- a/vtm-themes/resources/assets/vtm/default.xml
+++ b/vtm-themes/resources/assets/vtm/default.xml
@@ -45,7 +45,8 @@
-
+
diff --git a/vtm-themes/resources/assets/vtm/mapzen.xml b/vtm-themes/resources/assets/vtm/mapzen.xml
index 632ab8b6..3be8656c 100644
--- a/vtm-themes/resources/assets/vtm/mapzen.xml
+++ b/vtm-themes/resources/assets/vtm/mapzen.xml
@@ -25,7 +25,8 @@
-
+
diff --git a/vtm-themes/resources/assets/vtm/newtron.xml b/vtm-themes/resources/assets/vtm/newtron.xml
index 24fee098..4452ee8b 100644
--- a/vtm-themes/resources/assets/vtm/newtron.xml
+++ b/vtm-themes/resources/assets/vtm/newtron.xml
@@ -35,7 +35,8 @@
-
+
diff --git a/vtm-themes/resources/assets/vtm/openmaptiles.xml b/vtm-themes/resources/assets/vtm/openmaptiles.xml
index e89283d4..30e0d801 100644
--- a/vtm-themes/resources/assets/vtm/openmaptiles.xml
+++ b/vtm-themes/resources/assets/vtm/openmaptiles.xml
@@ -40,7 +40,8 @@
-
+
diff --git a/vtm-themes/resources/assets/vtm/osmagray.xml b/vtm-themes/resources/assets/vtm/osmagray.xml
index c61015a2..f2503621 100644
--- a/vtm-themes/resources/assets/vtm/osmagray.xml
+++ b/vtm-themes/resources/assets/vtm/osmagray.xml
@@ -34,7 +34,8 @@
-
+
diff --git a/vtm-themes/resources/assets/vtm/osmarender.xml b/vtm-themes/resources/assets/vtm/osmarender.xml
index 18388033..cf157193 100644
--- a/vtm-themes/resources/assets/vtm/osmarender.xml
+++ b/vtm-themes/resources/assets/vtm/osmarender.xml
@@ -34,7 +34,8 @@
-
+
diff --git a/vtm-themes/resources/assets/vtm/tronrender.xml b/vtm-themes/resources/assets/vtm/tronrender.xml
index 06b473a9..a4c24ea6 100644
--- a/vtm-themes/resources/assets/vtm/tronrender.xml
+++ b/vtm-themes/resources/assets/vtm/tronrender.xml
@@ -35,7 +35,8 @@
-
+
diff --git a/vtm/src/org/oscim/renderer/bucket/TextBucket.java b/vtm/src/org/oscim/renderer/bucket/TextBucket.java
index d6cfe523..ec21998b 100644
--- a/vtm/src/org/oscim/renderer/bucket/TextBucket.java
+++ b/vtm/src/org/oscim/renderer/bucket/TextBucket.java
@@ -1,5 +1,6 @@
/*
* Copyright 2012 Hannes Janetzek
+ * Copyright 2019 devemux86
*
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
*
@@ -89,7 +90,7 @@ public class TextBucket extends TextureBucket {
int advanceY = 0;
float x = 0;
float y = 0;
- float yy;
+ float xx, yy;
TextureItem t = pool.get();
textures = t;
@@ -127,14 +128,18 @@ public class TextBucket extends TextureBucket {
}
}
+ xx = x + mFontPadX;
yy = y + height - it.text.fontDescent;
- mCanvas.drawText(it.label, x, yy, it.text.paint, it.text.stroke);
-
// FIXME !!!
if (width > TEXTURE_WIDTH)
width = TEXTURE_WIDTH;
+ if (it.text.bgFill != null)
+ mCanvas.fillRectangle(x + mFontPadX, y + 1, width - 2 * mFontPadX, height, it.text.bgFill.getColor());
+
+ mCanvas.drawText(it.label, xx, yy, it.text.paint, it.text.stroke);
+
while (it != null) {
addItem(it, width, height, x, y);
diff --git a/vtm/src/org/oscim/theme/XmlThemeBuilder.java b/vtm/src/org/oscim/theme/XmlThemeBuilder.java
index 7d514bbd..774679dc 100644
--- a/vtm/src/org/oscim/theme/XmlThemeBuilder.java
+++ b/vtm/src/org/oscim/theme/XmlThemeBuilder.java
@@ -1012,6 +1012,9 @@ public class XmlThemeBuilder extends DefaultHandler {
else if ("size".equals(name) || "font-size".equals(name))
b.fontSize = Float.parseFloat(value);
+ else if ("bg-fill".equals(name))
+ b.bgFillColor = Color.parseColor(value);
+
else if ("fill".equals(name))
b.fillColor = Color.parseColor(value);
diff --git a/vtm/src/org/oscim/theme/styles/TextStyle.java b/vtm/src/org/oscim/theme/styles/TextStyle.java
index 1b511082..bbd42817 100644
--- a/vtm/src/org/oscim/theme/styles/TextStyle.java
+++ b/vtm/src/org/oscim/theme/styles/TextStyle.java
@@ -26,6 +26,8 @@ import org.oscim.backend.canvas.Paint.FontFamily;
import org.oscim.backend.canvas.Paint.FontStyle;
import org.oscim.renderer.atlas.TextureRegion;
+import static org.oscim.backend.canvas.Color.parseColor;
+
public final class TextStyle extends RenderStyle {
public static class TextBuilder> extends StyleBuilder {
@@ -46,6 +48,8 @@ public final class TextStyle extends RenderStyle {
public int symbolHeight;
public int symbolPercent;
+ public int bgFillColor;
+
public T reset() {
cat = null;
fontFamily = FontFamily.DEFAULT;
@@ -67,6 +71,8 @@ public final class TextStyle extends RenderStyle {
symbolHeight = 0;
symbolPercent = 100;
+ bgFillColor = Color.TRANSPARENT;
+
return self();
}
@@ -151,6 +157,16 @@ public final class TextStyle extends RenderStyle {
return self();
}
+ public T bgFillColor(int color) {
+ this.bgFillColor = color;
+ return self();
+ }
+
+ public T bgFillColor(String color) {
+ this.bgFillColor = parseColor(color);
+ return self();
+ }
+
public T from(TextBuilder> other) {
cat = other.cat;
fontFamily = other.fontFamily;
@@ -172,6 +188,8 @@ public final class TextStyle extends RenderStyle {
symbolHeight = other.symbolHeight;
symbolPercent = other.symbolPercent;
+ bgFillColor = other.bgFillColor;
+
return self();
}
@@ -201,6 +219,9 @@ public final class TextStyle extends RenderStyle {
this.symbolHeight = text.symbolHeight;
this.symbolPercent = text.symbolPercent;
+ if (text.bgFill != null)
+ this.bgFillColor = themeCallback != null ? themeCallback.getColor(text, text.bgFill.getColor()) : text.bgFill.getColor();
+
return self();
}
}
@@ -241,6 +262,12 @@ public final class TextStyle extends RenderStyle {
this.symbolWidth = b.symbolWidth;
this.symbolHeight = b.symbolHeight;
this.symbolPercent = b.symbolPercent;
+
+ if (b.bgFillColor != Color.TRANSPARENT) {
+ bgFill = CanvasAdapter.newPaint();
+ bgFill.setColor(b.themeCallback != null ? b.themeCallback.getColor(this, b.bgFillColor) : b.bgFillColor);
+ } else
+ bgFill = null;
}
public final String style;
@@ -267,6 +294,8 @@ public final class TextStyle extends RenderStyle {
public final int symbolHeight;
public final int symbolPercent;
+ public final Paint bgFill;
+
@Override
public void dispose() {
if (bitmap != null)