/*
Swisscom Safe Connect
Copyright (C) 2014 Swisscom
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.swisscom.safeconnect.utils;
import android.content.Context;
import android.graphics.Paint;
import android.graphics.Typeface;
import android.text.TextPaint;
import android.text.style.RelativeSizeSpan;
import android.text.style.TypefaceSpan;
public class Fonts {
public static Typeface FONT_BOLD;
public static Typeface FONT_NORMAL;
public static TypefaceSpan FONT_BOLD_SPAN;
public static TypefaceSpan FONT_NORMAL_SPAN;
public static RelativeSizeSpan SIZE_TAB_TITLE;
public static void init(Context context) {
if (FONT_BOLD != null) return;
Context appCtx = context.getApplicationContext();
FONT_BOLD = Typeface.createFromAsset(appCtx.getAssets(), "Ftb.ttf");
FONT_NORMAL = Typeface.createFromAsset(appCtx.getAssets(), "Ftc.ttf");
FONT_BOLD_SPAN = new CustomTypefaceSpan("", FONT_BOLD);
FONT_NORMAL_SPAN = new CustomTypefaceSpan("", FONT_NORMAL);
SIZE_TAB_TITLE = new RelativeSizeSpan(1.2f);
}
public static boolean isInitialized() {
return FONT_BOLD != null;
}
public static class CustomTypefaceSpan extends TypefaceSpan {
private final Typeface newType;
public CustomTypefaceSpan(String family, Typeface type) {
super(family);
newType = type;
}
@Override
public void updateDrawState(TextPaint ds) {
applyCustomTypeFace(ds, newType);
}
@Override
public void updateMeasureState(TextPaint paint) {
applyCustomTypeFace(paint, newType);
}
private void applyCustomTypeFace(Paint paint, Typeface tf) {
int oldStyle;
Typeface old = paint.getTypeface();
if (old == null) {
oldStyle = 0;
} else {
oldStyle = old.getStyle();
}
int fake = oldStyle & ~tf.getStyle();
if ((fake & Typeface.BOLD) != 0) {
paint.setFakeBoldText(true);
}
if ((fake & Typeface.ITALIC) != 0) {
paint.setTextSkewX(-0.25f);
}
paint.setTypeface(tf);
}
}
}