/** * Ti.StyledLabel Module * Copyright (c) 2010-2013 by Appcelerator, Inc. All Rights Reserved. * Please see the LICENSE included with this distribution for details. */ package ti.styledlabel.style; import ti.styledlabel.Constants; import android.graphics.Canvas; import android.graphics.Paint; import android.os.Parcel; import android.text.Layout; import android.text.ParcelableSpan; import android.text.Spanned; import android.text.style.LeadingMarginSpan; public class NumberedSpan implements LeadingMarginSpan, ParcelableSpan { private final int mGapWidth; private final boolean mWantColor; private final int mColor; private final int mNumber; private static final int BULLET_RADIUS = 3; public static final int STANDARD_GAP_WIDTH = 2; public NumberedSpan(int number) { mGapWidth = STANDARD_GAP_WIDTH; mWantColor = false; mColor = 0; mNumber = number; } public NumberedSpan(int number, int gapWidth) { mGapWidth = gapWidth; mWantColor = false; mColor = 0; mNumber = number; } public NumberedSpan(int number, int gapWidth, int color) { mGapWidth = gapWidth; mWantColor = true; mColor = color; mNumber = number; } public NumberedSpan(int number, Parcel src) { mGapWidth = src.readInt(); mWantColor = src.readInt() != 0; mColor = src.readInt(); mNumber = number; } public int getSpanTypeId() { return Constants.NUMBERED_SPAN; } public int describeContents() { return 0; } public void writeToParcel(Parcel dest, int flags) { dest.writeInt(mGapWidth); dest.writeInt(mWantColor ? 1 : 0); dest.writeInt(mColor); } public int getLeadingMargin(boolean first) { return 2 * BULLET_RADIUS + mGapWidth; } public void drawLeadingMargin(Canvas c, Paint p, int x, int dir, int top, int baseline, int bottom, CharSequence text, int start, int end, boolean first, Layout l) { if (((Spanned) text).getSpanStart(this) == start) { Paint.Style style = p.getStyle(); int oldcolor = 0; if (mWantColor) { oldcolor = p.getColor(); p.setColor(mColor); } p.setStyle(Paint.Style.FILL); c.drawText(mNumber + ".", x - ((mNumber + "").length() * 10), top + 19, p); if (mWantColor) { p.setColor(oldcolor); } p.setStyle(style); } } }