Search in sources :

Example 1 with TypefaceSpan

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;
}
Also used : Typeface(com.mta.tehreer.graphics.Typeface) TypeSizeSpan(com.mta.tehreer.layout.style.TypeSizeSpan) TypefaceSpan(com.mta.tehreer.layout.style.TypefaceSpan)

Example 2 with TypefaceSpan

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());
    }
}
Also used : TopSpanIterator(com.mta.tehreer.internal.text.TopSpanIterator) Spanned(android.text.Spanned) TypefaceSpan(com.mta.tehreer.layout.style.TypefaceSpan)

Example 3 with TypefaceSpan

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();
}
Also used : Typesetter(com.mta.tehreer.layout.Typesetter) Typeface(com.mta.tehreer.graphics.Typeface) ArrayList(java.util.ArrayList) List(java.util.List) TypeSizeSpan(com.mta.tehreer.layout.style.TypeSizeSpan) TypefaceSpan(com.mta.tehreer.layout.style.TypefaceSpan)

Aggregations

TypefaceSpan (com.mta.tehreer.layout.style.TypefaceSpan)3 Typeface (com.mta.tehreer.graphics.Typeface)2 TypeSizeSpan (com.mta.tehreer.layout.style.TypeSizeSpan)2 Spanned (android.text.Spanned)1 TopSpanIterator (com.mta.tehreer.internal.text.TopSpanIterator)1 Typesetter (com.mta.tehreer.layout.Typesetter)1 ArrayList (java.util.ArrayList)1 List (java.util.List)1