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