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)