use of com.mta.tehreer.layout.style.TypefaceSpan in project Tehreer-Android by mta452.
the class Typesetter method createTruncationToken.
private ComposedLine createTruncationToken(int charStart, int charEnd, TruncationPlace truncationPlace, String tokenStr) {
int truncationIndex = 0;
switch(truncationPlace) {
case START:
truncationIndex = charStart;
break;
case MIDDLE:
truncationIndex = (charStart + charEnd) / 2;
break;
case END:
truncationIndex = charEnd - 1;
break;
}
Object[] charSpans = mSpanned.getSpans(truncationIndex, truncationIndex + 1, Object.class);
TypefaceSpan typefaceSpan = null;
TypeSizeSpan typeSizeSpan = null;
final int typefaceBit = 1;
final int typeSizeBit = 1 << 1;
final int requiredBits = typefaceBit | typeSizeBit;
int foundBits = 0;
for (Object span : charSpans) {
if (span instanceof TypefaceSpan) {
if (typefaceSpan == null) {
typefaceSpan = (TypefaceSpan) span;
foundBits |= typefaceBit;
}
} else if (span instanceof TypeSizeSpan) {
if (typeSizeSpan == null) {
typeSizeSpan = (TypeSizeSpan) span;
foundBits |= typeSizeBit;
}
}
if (foundBits == requiredBits) {
Typeface tokenTypeface = typefaceSpan.getTypeface();
float tokenTypeSize = typeSizeSpan.getSize();
if (tokenStr == null || tokenStr.length() == 0) {
// Token string is not given. Use ellipsis character if available; fallback to
// three dots.
int ellipsisGlyphId = tokenTypeface.getGlyphId(0x2026);
if (ellipsisGlyphId == 0) {
tokenStr = "...";
} else {
tokenStr = "\u2026";
}
}
Typesetter typesetter = new Typesetter(tokenStr, tokenTypeface, tokenTypeSize);
return typesetter.createSimpleLine(0, tokenStr.length());
}
}
return null;
}
use of com.mta.tehreer.layout.style.TypefaceSpan in project Tehreer-Android by mta452.
the class Typesetter method resolveTypefaces.
private void resolveTypefaces(int charStart, int charEnd, byte bidiLevel, ShapingEngine shapingEngine) {
Spanned spanned = mSpanned;
TopSpanIterator<TypefaceSpan> iterator = new TopSpanIterator<>(spanned, charStart, charEnd, TypefaceSpan.class);
while (iterator.hasNext()) {
TypefaceSpan spanObject = iterator.next();
int spanStart = iterator.getSpanStart();
int spanEnd = iterator.getSpanEnd();
if (spanObject == null || spanObject.getTypeface() == null) {
throw new IllegalArgumentException("No typeface is specified for range [" + spanStart + ".." + spanEnd + ")");
}
resolveFonts(spanStart, spanEnd, bidiLevel, shapingEngine, spanObject.getTypeface());
}
}
use of com.mta.tehreer.layout.style.TypefaceSpan in project Tehreer-Android by mta452.
the class TLabel method updateTypesetter.
private void updateTypesetter() {
if (mNeedsTypesetter) {
return;
}
mTypesetter = null;
long t1 = System.nanoTime();
if (mText != null) {
Typeface typeface = getTypeface();
if (typeface != null && mText.length() > 0) {
mTypesetter = new Typesetter(mText, typeface, getTextSize());
}
} else if (mSpanned != null) {
if (mSpanned.length() > 0) {
List<Object> defaultSpans = new ArrayList<>();
Typeface typeface = getTypeface();
float textSize = getTextSize();
if (typeface != null) {
defaultSpans.add(new TypefaceSpan(typeface));
}
defaultSpans.add(new TypeSizeSpan(textSize));
mTypesetter = new Typesetter(mSpanned, defaultSpans);
}
}
long t2 = System.nanoTime();
Log.i("Tehreer", "Time taken to create typesetter: " + ((t2 - t1) * 1E-6));
requestLayout();
invalidate();
}
Aggregations