19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.text.style; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.Paint; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.Canvas; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.Layout; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.ParcelableSpan; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.TextUtils; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2671b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt/** 2771b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt * A paragraph style affecting the leading margin. There can be multiple leading 2871b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt * margin spans on a single paragraph; they will be rendered in order, each 2971b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt * adding its margin to the ones before it. The leading margin is on the right 3071b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt * for lines in a right-to-left paragraph. 3171b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt */ 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic interface LeadingMarginSpan 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectextends ParagraphStyle 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 3571b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt /** 3671b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt * Returns the amount by which to adjust the leading margin. Positive values 3771b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt * move away from the leading edge of the paragraph, negative values move 3871b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt * towards it. 3971b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt * 4071b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt * @param first true if the request is for the first line of a paragraph, 4171b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt * false for subsequent lines 4271b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt * @return the offset for the margin. 4371b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt */ 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getLeadingMargin(boolean first); 4571b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt 4671b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt /** 4771b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt * Renders the leading margin. This is called before the margin has been 487951eaa92a962e39ebba0366fdcafc4a0a78cc98Kenny Root * adjusted by the value returned by {@link #getLeadingMargin(boolean)}. 4971b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt * 5071b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt * @param c the canvas 5171b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt * @param p the paint. The this should be left unchanged on exit. 5271b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt * @param x the current position of the margin 5371b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt * @param dir the base direction of the paragraph; if negative, the margin 5471b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt * is to the right of the text, otherwise it is to the left. 5571b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt * @param top the top of the line 5671b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt * @param baseline the baseline of the line 5771b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt * @param bottom the bottom of the line 5871b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt * @param text the text 5971b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt * @param start the start of the line 6071b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt * @param end the end of the line 6171b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt * @param first true if this is the first line of its paragraph 6271b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt * @param layout the layout containing this line 6371b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt */ 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void drawLeadingMargin(Canvas c, Paint p, 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int x, int dir, 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int top, int baseline, int bottom, 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CharSequence text, int start, int end, 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean first, Layout layout); 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 707b5676e4d40a09ccdbc8b6f691a3d8be23e480d3Mark Wagner 71ec8b1021906f77c47a772da5ca5641836361513dEric Fischer /** 72ec8b1021906f77c47a772da5ca5641836361513dEric Fischer * An extended version of {@link LeadingMarginSpan}, which allows 73ec8b1021906f77c47a772da5ca5641836361513dEric Fischer * the implementor to specify the number of lines of text to which 74ec8b1021906f77c47a772da5ca5641836361513dEric Fischer * this object is attached that the "first line of paragraph" margin 75ec8b1021906f77c47a772da5ca5641836361513dEric Fischer * width will be applied to. 76ec8b1021906f77c47a772da5ca5641836361513dEric Fischer */ 777b5676e4d40a09ccdbc8b6f691a3d8be23e480d3Mark Wagner public interface LeadingMarginSpan2 extends LeadingMarginSpan, WrapTogetherSpan { 78ec8b1021906f77c47a772da5ca5641836361513dEric Fischer /** 79ec8b1021906f77c47a772da5ca5641836361513dEric Fischer * Returns the number of lines of text to which this object is 80ec8b1021906f77c47a772da5ca5641836361513dEric Fischer * attached that the "first line" margin will apply to. 81ec8b1021906f77c47a772da5ca5641836361513dEric Fischer * Note that if this returns N, the first N lines of the region, 82ec8b1021906f77c47a772da5ca5641836361513dEric Fischer * not the first N lines of each paragraph, will be given the 83ec8b1021906f77c47a772da5ca5641836361513dEric Fischer * special margin width. 84ec8b1021906f77c47a772da5ca5641836361513dEric Fischer */ 857b5676e4d40a09ccdbc8b6f691a3d8be23e480d3Mark Wagner public int getLeadingMarginLineCount(); 867b5676e4d40a09ccdbc8b6f691a3d8be23e480d3Mark Wagner }; 877b5676e4d40a09ccdbc8b6f691a3d8be23e480d3Mark Wagner 8871b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt /** 8971b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt * The standard implementation of LeadingMarginSpan, which adjusts the 9071b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt * margin but does not do any rendering. 9171b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt */ 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class Standard implements LeadingMarginSpan, ParcelableSpan { 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final int mFirst, mRest; 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9571b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt /** 9671b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt * Constructor taking separate indents for the first and subsequent 9771b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt * lines. 9871b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt * 9971b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt * @param first the indent for the first line of the paragraph 10071b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt * @param rest the indent for the remaining lines of the paragraph 10171b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt */ 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Standard(int first, int rest) { 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFirst = first; 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRest = rest; 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10771b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt /** 10871b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt * Constructor taking an indent for all lines. 10971b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt * @param every the indent of each line 11071b8dd71e49016e057c46a257f79162d186a3c3aDoug Felt */ 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Standard(int every) { 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this(every, every); 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Standard(Parcel src) { 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFirst = src.readInt(); 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRest = src.readInt(); 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getSpanTypeId() { 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return TextUtils.LEADING_MARGIN_SPAN; 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int describeContents() { 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel dest, int flags) { 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(mFirst); 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(mRest); 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getLeadingMargin(boolean first) { 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return first ? mFirst : mRest; 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void drawLeadingMargin(Canvas c, Paint p, 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int x, int dir, 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int top, int baseline, int bottom, 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CharSequence text, int start, int end, 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean first, Layout layout) { 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ; 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 146