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; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1980756e38882720860db52f1fcc21fa1505a02abfTor Norbyeimport android.annotation.ColorInt; 20538de5bb3b3662c51c17cd9dd24e660c85e88b78Roozbeh Pournaderimport android.annotation.NonNull; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.Paint; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * TextPaint is an extension of Paint that leaves room for some extra 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * data used during text measuring and drawing. 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class TextPaint extends Paint { 28e6d368218918f911b1954296dab25bf84147b4c6Luca Zanolin 29dd8f5ed79c7baed35b3f04e4778aff7867653255Gilles Debunne // Special value 0 means no background paint 3080756e38882720860db52f1fcc21fa1505a02abfTor Norbye @ColorInt 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int bgColor; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int baselineShift; 3380756e38882720860db52f1fcc21fa1505a02abfTor Norbye @ColorInt 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int linkColor; 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int[] drawableState; 36a9f1dd021f8f6ee777bc4d27913bd40c42e753afEric Fischer public float density = 1.0f; 37dd8f5ed79c7baed35b3f04e4778aff7867653255Gilles Debunne /** 38dd8f5ed79c7baed35b3f04e4778aff7867653255Gilles Debunne * Special value 0 means no custom underline 39dd8f5ed79c7baed35b3f04e4778aff7867653255Gilles Debunne * @hide 40dd8f5ed79c7baed35b3f04e4778aff7867653255Gilles Debunne */ 4180756e38882720860db52f1fcc21fa1505a02abfTor Norbye @ColorInt 42c9fd978da60f76c0576150c55629a034e1fa19fbGilles Debunne public int underlineColor = 0; 43dd8f5ed79c7baed35b3f04e4778aff7867653255Gilles Debunne /** 44538de5bb3b3662c51c17cd9dd24e660c85e88b78Roozbeh Pournader * Thickness of the underline, in pixels. 45dd8f5ed79c7baed35b3f04e4778aff7867653255Gilles Debunne * @hide 46dd8f5ed79c7baed35b3f04e4778aff7867653255Gilles Debunne */ 47c9fd978da60f76c0576150c55629a034e1fa19fbGilles Debunne public float underlineThickness; 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public TextPaint() { 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(); 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public TextPaint(int flags) { 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(flags); 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public TextPaint(Paint p) { 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(p); 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copy the fields from tp into this TextPaint, including the 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * fields inherited from Paint. 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void set(TextPaint tp) { 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.set(tp); 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bgColor = tp.bgColor; 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project baselineShift = tp.baselineShift; 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project linkColor = tp.linkColor; 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project drawableState = tp.drawableState; 72a9f1dd021f8f6ee777bc4d27913bd40c42e753afEric Fischer density = tp.density; 73c9fd978da60f76c0576150c55629a034e1fa19fbGilles Debunne underlineColor = tp.underlineColor; 74c9fd978da60f76c0576150c55629a034e1fa19fbGilles Debunne underlineThickness = tp.underlineThickness; 75dd8f5ed79c7baed35b3f04e4778aff7867653255Gilles Debunne } 76dd8f5ed79c7baed35b3f04e4778aff7867653255Gilles Debunne 77dd8f5ed79c7baed35b3f04e4778aff7867653255Gilles Debunne /** 78538de5bb3b3662c51c17cd9dd24e660c85e88b78Roozbeh Pournader * Returns true if all attributes, including the attributes inherited from Paint, are equal. 79538de5bb3b3662c51c17cd9dd24e660c85e88b78Roozbeh Pournader * 80538de5bb3b3662c51c17cd9dd24e660c85e88b78Roozbeh Pournader * The caller is expected to have checked the trivial cases, like the pointers being equal, 81538de5bb3b3662c51c17cd9dd24e660c85e88b78Roozbeh Pournader * the objects having different classes, or the parameter being null. 82538de5bb3b3662c51c17cd9dd24e660c85e88b78Roozbeh Pournader * @hide 83538de5bb3b3662c51c17cd9dd24e660c85e88b78Roozbeh Pournader */ 84538de5bb3b3662c51c17cd9dd24e660c85e88b78Roozbeh Pournader public boolean hasEqualAttributes(@NonNull TextPaint other) { 85538de5bb3b3662c51c17cd9dd24e660c85e88b78Roozbeh Pournader return bgColor == other.bgColor 86538de5bb3b3662c51c17cd9dd24e660c85e88b78Roozbeh Pournader && baselineShift == other.baselineShift 87538de5bb3b3662c51c17cd9dd24e660c85e88b78Roozbeh Pournader && linkColor == other.linkColor 88538de5bb3b3662c51c17cd9dd24e660c85e88b78Roozbeh Pournader && drawableState == other.drawableState 89538de5bb3b3662c51c17cd9dd24e660c85e88b78Roozbeh Pournader && density == other.density 90538de5bb3b3662c51c17cd9dd24e660c85e88b78Roozbeh Pournader && underlineColor == other.underlineColor 91538de5bb3b3662c51c17cd9dd24e660c85e88b78Roozbeh Pournader && underlineThickness == other.underlineThickness 92538de5bb3b3662c51c17cd9dd24e660c85e88b78Roozbeh Pournader && super.hasEqualAttributes((Paint) other); 93538de5bb3b3662c51c17cd9dd24e660c85e88b78Roozbeh Pournader } 94538de5bb3b3662c51c17cd9dd24e660c85e88b78Roozbeh Pournader 95538de5bb3b3662c51c17cd9dd24e660c85e88b78Roozbeh Pournader /** 96dd8f5ed79c7baed35b3f04e4778aff7867653255Gilles Debunne * Defines a custom underline for this Paint. 97dd8f5ed79c7baed35b3f04e4778aff7867653255Gilles Debunne * @param color underline solid color 98e6d368218918f911b1954296dab25bf84147b4c6Luca Zanolin * @param thickness underline thickness 99dd8f5ed79c7baed35b3f04e4778aff7867653255Gilles Debunne * @hide 100dd8f5ed79c7baed35b3f04e4778aff7867653255Gilles Debunne */ 101e6d368218918f911b1954296dab25bf84147b4c6Luca Zanolin public void setUnderlineText(int color, float thickness) { 102c9fd978da60f76c0576150c55629a034e1fa19fbGilles Debunne underlineColor = color; 103c9fd978da60f76c0576150c55629a034e1fa19fbGilles Debunne underlineThickness = thickness; 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 105fd8c22d513d92d547f883efc45a3dbcd9558f90aRoozbeh Pournader 106fd8c22d513d92d547f883efc45a3dbcd9558f90aRoozbeh Pournader /** 107fd8c22d513d92d547f883efc45a3dbcd9558f90aRoozbeh Pournader * @hide 108fd8c22d513d92d547f883efc45a3dbcd9558f90aRoozbeh Pournader */ 109fd8c22d513d92d547f883efc45a3dbcd9558f90aRoozbeh Pournader @Override 110fd8c22d513d92d547f883efc45a3dbcd9558f90aRoozbeh Pournader public float getUnderlineThickness() { 111fd8c22d513d92d547f883efc45a3dbcd9558f90aRoozbeh Pournader if (underlineColor != 0) { // Return custom thickness only if underline color is set. 112fd8c22d513d92d547f883efc45a3dbcd9558f90aRoozbeh Pournader return underlineThickness; 113fd8c22d513d92d547f883efc45a3dbcd9558f90aRoozbeh Pournader } else { 114fd8c22d513d92d547f883efc45a3dbcd9558f90aRoozbeh Pournader return super.getUnderlineThickness(); 115fd8c22d513d92d547f883efc45a3dbcd9558f90aRoozbeh Pournader } 116fd8c22d513d92d547f883efc45a3dbcd9558f90aRoozbeh Pournader } 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 118