org.oscim.theme.styles.TextStyle Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of vtm Show documentation
Show all versions of vtm Show documentation
OpenGL vector map library written in Java - running on Android, iOS, Desktop and within the browser.
/*
* Copyright 2013 Hannes Janetzek
* Copyright 2016-2019 devemux86
* Copyright 2016 Andrey Novikov
*
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
*
* This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see .
*/
package org.oscim.theme.styles;
import org.oscim.backend.CanvasAdapter;
import org.oscim.backend.canvas.Bitmap;
import org.oscim.backend.canvas.Color;
import org.oscim.backend.canvas.Paint;
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 {
public float fontSize;
public String textKey;
public boolean caption;
public float dy;
public int priority;
public float areaSize;
public Bitmap bitmap;
public TextureRegion texture;
public FontFamily fontFamily;
public FontStyle fontStyle;
public int symbolWidth;
public int symbolHeight;
public int symbolPercent;
public int bgFillColor;
public T reset() {
cat = null;
fontFamily = FontFamily.DEFAULT;
fontStyle = FontStyle.NORMAL;
style = null;
textKey = null;
fontSize = 0;
caption = false;
priority = Integer.MAX_VALUE;
areaSize = 0f;
bitmap = null;
texture = null;
fillColor = Color.BLACK;
strokeColor = Color.BLACK;
strokeWidth = 0;
dy = 0;
symbolWidth = 0;
symbolHeight = 0;
symbolPercent = 100;
bgFillColor = Color.TRANSPARENT;
return self();
}
public TextBuilder() {
reset();
}
@Override
public TextStyle build() {
TextStyle t = new TextStyle(this);
t.fontHeight = t.paint.getFontHeight();
t.fontDescent = t.paint.getFontDescent();
return t;
}
public TextStyle buildInternal() {
return new TextStyle(this);
}
public T fontSize(float fontSize) {
this.fontSize = fontSize;
return self();
}
public T textKey(String textKey) {
this.textKey = textKey;
return self();
}
public T isCaption(boolean caption) {
this.caption = caption;
return self();
}
public T offsetY(float dy) {
this.dy = dy;
return self();
}
public T priority(int priority) {
this.priority = priority;
return self();
}
public T areaSize(float areaSize) {
this.areaSize = areaSize;
return self();
}
public T bitmap(Bitmap bitmap) {
this.bitmap = bitmap;
return self();
}
public T texture(TextureRegion texture) {
this.texture = texture;
return self();
}
public T fontFamily(FontFamily fontFamily) {
this.fontFamily = fontFamily;
return self();
}
public T fontStyle(FontStyle fontStyle) {
this.fontStyle = fontStyle;
return self();
}
public T symbolWidth(int symbolWidth) {
this.symbolWidth = symbolWidth;
return self();
}
public T symbolHeight(int symbolHeight) {
this.symbolHeight = symbolHeight;
return self();
}
public T symbolPercent(int symbolPercent) {
this.symbolPercent = symbolPercent;
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;
fontStyle = other.fontStyle;
style = other.style;
textKey = other.textKey;
fontSize = other.fontSize;
caption = other.caption;
priority = other.priority;
areaSize = other.areaSize;
bitmap = other.bitmap;
texture = other.texture;
fillColor = other.fillColor;
strokeColor = other.strokeColor;
strokeWidth = other.strokeWidth;
dy = other.dy;
symbolWidth = other.symbolWidth;
symbolHeight = other.symbolHeight;
symbolPercent = other.symbolPercent;
bgFillColor = other.bgFillColor;
return self();
}
public TextBuilder> set(TextStyle text) {
if (text == null)
return reset();
this.cat = text.cat;
this.style = text.style;
this.textKey = text.textKey;
this.caption = text.caption;
this.dy = text.dy;
this.priority = text.priority;
this.areaSize = text.areaSize;
this.bitmap = text.bitmap;
this.texture = text.texture;
this.fillColor = themeCallback != null ? themeCallback.getColor(text, text.paint.getColor()) : text.paint.getColor();
this.fontFamily = text.fontFamily;
this.fontStyle = text.fontStyle;
if (text.stroke != null) {
this.strokeColor = themeCallback != null ? themeCallback.getColor(text, text.stroke.getColor()) : text.stroke.getColor();
this.strokeWidth = text.stroke.getStrokeWidth();
}
this.fontSize = text.fontSize;
this.symbolWidth = text.symbolWidth;
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();
}
}
TextStyle(TextBuilder> b) {
this.cat = b.cat;
this.style = b.style;
this.textKey = b.textKey;
this.caption = b.caption;
this.dy = b.dy;
this.priority = b.priority;
this.areaSize = b.areaSize;
this.bitmap = b.bitmap;
this.texture = b.texture;
paint = CanvasAdapter.newPaint();
//paint.setTextAlign(Align.CENTER);
paint.setTypeface(b.fontFamily, b.fontStyle);
paint.setColor(b.themeCallback != null ? b.themeCallback.getColor(this, b.fillColor) : b.fillColor);
paint.setTextSize(b.fontSize);
if (b.strokeWidth > 0) {
stroke = CanvasAdapter.newPaint();
stroke.setStyle(Paint.Style.STROKE);
//stroke.setTextAlign(Align.CENTER);
stroke.setTypeface(b.fontFamily, b.fontStyle);
stroke.setColor(b.themeCallback != null ? b.themeCallback.getColor(this, b.strokeColor) : b.strokeColor);
stroke.setStrokeWidth(b.strokeWidth);
stroke.setTextSize(b.fontSize);
} else
stroke = null;
this.fontFamily = b.fontFamily;
this.fontStyle = b.fontStyle;
this.fontSize = b.fontSize;
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;
public final FontFamily fontFamily;
public final FontStyle fontStyle;
public float fontSize;
public final Paint paint;
public final Paint stroke;
public final String textKey;
public final boolean caption;
public final float dy;
public final int priority;
public final float areaSize;
public float fontHeight;
public float fontDescent;
public final Bitmap bitmap;
public final TextureRegion texture;
public final int symbolWidth;
public final int symbolHeight;
public final int symbolPercent;
public final Paint bgFill;
@Override
public void dispose() {
if (bitmap != null)
bitmap.recycle();
}
@Override
public void renderNode(Callback cb) {
cb.renderText(this);
}
@Override
public void renderWay(Callback cb) {
cb.renderText(this);
}
@Override
public TextStyle current() {
return (TextStyle) mCurrent;
}
@Override
public void scaleTextSize(float scaleFactor) {
fontSize *= scaleFactor;
paint.setTextSize(fontSize);
if (stroke != null)
stroke.setTextSize(fontSize);
fontHeight = paint.getFontHeight();
fontDescent = paint.getFontDescent();
}
@SuppressWarnings("rawtypes")
public static TextBuilder> builder() {
return new TextBuilder();
}
}