| /* |
| * Copyright (C) 2006 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package android.text.style; |
| |
| import android.graphics.Paint; |
| import android.graphics.Canvas; |
| import android.os.Parcel; |
| import android.text.Layout; |
| import android.text.ParcelableSpan; |
| import android.text.TextUtils; |
| |
| /** |
| * A paragraph style affecting the leading margin. There can be multiple leading |
| * margin spans on a single paragraph; they will be rendered in order, each |
| * adding its margin to the ones before it. The leading margin is on the right |
| * for lines in a right-to-left paragraph. |
| * <p> |
| * LeadingMarginSpans should be attached from the first character to the last |
| * character of a single paragraph. |
| */ |
| public interface LeadingMarginSpan |
| extends ParagraphStyle |
| { |
| /** |
| * Returns the amount by which to adjust the leading margin. Positive values |
| * move away from the leading edge of the paragraph, negative values move |
| * towards it. |
| * |
| * @param first true if the request is for the first line of a paragraph, |
| * false for subsequent lines |
| * @return the offset for the margin. |
| */ |
| public int getLeadingMargin(boolean first); |
| |
| /** |
| * Renders the leading margin. This is called before the margin has been |
| * adjusted by the value returned by {@link #getLeadingMargin(boolean)}. |
| * |
| * @param c the canvas |
| * @param p the paint. The this should be left unchanged on exit. |
| * @param x the current position of the margin |
| * @param dir the base direction of the paragraph; if negative, the margin |
| * is to the right of the text, otherwise it is to the left. |
| * @param top the top of the line |
| * @param baseline the baseline of the line |
| * @param bottom the bottom of the line |
| * @param text the text |
| * @param start the start of the line |
| * @param end the end of the line |
| * @param first true if this is the first line of its paragraph |
| * @param layout the layout containing this line |
| */ |
| 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 layout); |
| |
| |
| /** |
| * An extended version of {@link LeadingMarginSpan}, which allows the |
| * implementor to specify the number of lines of the paragraph to which |
| * this object is attached that the "first line of paragraph" margin width |
| * will be applied to. |
| * <p> |
| * There should only be one LeadingMarginSpan2 per paragraph. The leading |
| * margin line count affects all LeadingMarginSpans in the paragraph, |
| * adjusting the number of lines to which the first line margin is applied. |
| * <p> |
| * As with LeadingMarginSpans, LeadingMarginSpan2s should be attached from |
| * the beginning to the end of a paragraph. |
| */ |
| public interface LeadingMarginSpan2 extends LeadingMarginSpan, WrapTogetherSpan { |
| /** |
| * Returns the number of lines of the paragraph to which this object is |
| * attached that the "first line" margin will apply to. |
| */ |
| public int getLeadingMarginLineCount(); |
| }; |
| |
| /** |
| * The standard implementation of LeadingMarginSpan, which adjusts the |
| * margin but does not do any rendering. |
| */ |
| public static class Standard implements LeadingMarginSpan, ParcelableSpan { |
| private final int mFirst, mRest; |
| |
| /** |
| * Constructor taking separate indents for the first and subsequent |
| * lines. |
| * |
| * @param first the indent for the first line of the paragraph |
| * @param rest the indent for the remaining lines of the paragraph |
| */ |
| public Standard(int first, int rest) { |
| mFirst = first; |
| mRest = rest; |
| } |
| |
| /** |
| * Constructor taking an indent for all lines. |
| * @param every the indent of each line |
| */ |
| public Standard(int every) { |
| this(every, every); |
| } |
| |
| public Standard(Parcel src) { |
| mFirst = src.readInt(); |
| mRest = src.readInt(); |
| } |
| |
| public int getSpanTypeId() { |
| return getSpanTypeIdInternal(); |
| } |
| |
| /** @hide */ |
| public int getSpanTypeIdInternal() { |
| return TextUtils.LEADING_MARGIN_SPAN; |
| } |
| |
| public int describeContents() { |
| return 0; |
| } |
| |
| public void writeToParcel(Parcel dest, int flags) { |
| writeToParcelInternal(dest, flags); |
| } |
| |
| /** @hide */ |
| public void writeToParcelInternal(Parcel dest, int flags) { |
| dest.writeInt(mFirst); |
| dest.writeInt(mRest); |
| } |
| |
| public int getLeadingMargin(boolean first) { |
| return first ? mFirst : mRest; |
| } |
| |
| 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 layout) { |
| ; |
| } |
| } |
| } |