Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 32b87e01 authored by Seigo Nonaka's avatar Seigo Nonaka
Browse files

Move hasEqualAttribute from Paint with adding some accessors

Paint#hasEqualAttributes is not a equal method in Paint.
TextLine depends on this method but making this public will make
developer confused. So, moving hasEqualAttributes to TextLine and
provide some accessors for shadow layer parameters.

For the TextPaint, unhide underlineColor and underlineThckness for
implementing equalAttributes in TextLine.

Bug: 112327179
Test: atest android.graphics.cts.PaintTest
Change-Id: I4565e18134856e31d26bd06bcddeb31ddbe7e093
parent 665f5b9b
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -14001,6 +14001,10 @@ package android.graphics {
    method public float getRunAdvance(char[], int, int, int, int, boolean, int);
    method public float getRunAdvance(java.lang.CharSequence, int, int, int, int, boolean, int);
    method public android.graphics.Shader getShader();
    method public int getShadowLayerColor();
    method public float getShadowLayerDx();
    method public float getShadowLayerDy();
    method public float getShadowLayerRadius();
    method public float getStrikeThruPosition();
    method public float getStrikeThruThickness();
    method public android.graphics.Paint.Cap getStrokeCap();
@@ -43968,6 +43972,8 @@ package android.text {
    field public float density;
    field public int[] drawableState;
    field public int linkColor;
    field public int underlineColor;
    field public float underlineThickness;
  }
  public class TextUtils {
+39 −1
Original line number Diff line number Diff line
@@ -1231,7 +1231,7 @@ public class TextLine {
                    // with the next chunk. So we just save the TextPaint for future comparisons
                    // and use.
                    activePaint.set(wp);
                } else if (!wp.hasEqualAttributes(activePaint)) {
                } else if (!equalAttributes(wp, activePaint)) {
                    // The style of the present chunk of text is substantially different from the
                    // style of the previous chunk. We need to handle the active piece of text
                    // and restart with the present chunk.
@@ -1336,4 +1336,42 @@ public class TextLine {
    }

    private static final int TAB_INCREMENT = 20;

    private static boolean equalAttributes(@NonNull TextPaint lp, @NonNull TextPaint rp) {
        return lp.getColorFilter() == rp.getColorFilter()
                && lp.getMaskFilter() == rp.getMaskFilter()
                && lp.getShader() == rp.getShader()
                && lp.getTypeface() == rp.getTypeface()
                && lp.getXfermode() == rp.getXfermode()
                && lp.getTextLocales().equals(rp.getTextLocales())
                && TextUtils.equals(lp.getFontFeatureSettings(), rp.getFontFeatureSettings())
                && TextUtils.equals(lp.getFontVariationSettings(), rp.getFontVariationSettings())
                && lp.getShadowLayerRadius() == rp.getShadowLayerRadius()
                && lp.getShadowLayerDx() == rp.getShadowLayerDx()
                && lp.getShadowLayerDy() == rp.getShadowLayerDy()
                && lp.getShadowLayerColor() == rp.getShadowLayerColor()
                && lp.getFlags() == rp.getFlags()
                && lp.getHinting() == rp.getHinting()
                && lp.getStyle() == rp.getStyle()
                && lp.getColor() == rp.getColor()
                && lp.getStrokeWidth() == rp.getStrokeWidth()
                && lp.getStrokeMiter() == rp.getStrokeMiter()
                && lp.getStrokeCap() == rp.getStrokeCap()
                && lp.getStrokeJoin() == rp.getStrokeJoin()
                && lp.getTextAlign() == rp.getTextAlign()
                && lp.isElegantTextHeight() == rp.isElegantTextHeight()
                && lp.getTextSize() == rp.getTextSize()
                && lp.getTextScaleX() == rp.getTextScaleX()
                && lp.getTextSkewX() == rp.getTextSkewX()
                && lp.getLetterSpacing() == rp.getLetterSpacing()
                && lp.getWordSpacing() == rp.getWordSpacing()
                && lp.getHyphenEdit() == rp.getHyphenEdit()
                && lp.bgColor == rp.bgColor
                && lp.baselineShift == rp.baselineShift
                && lp.linkColor == rp.linkColor
                && lp.drawableState == rp.drawableState
                && lp.density == rp.density
                && lp.underlineColor == rp.underlineColor
                && lp.underlineThickness == rp.underlineThickness;
    }
}
+3 −24
Original line number Diff line number Diff line
@@ -17,7 +17,7 @@
package android.text;

import android.annotation.ColorInt;
import android.annotation.NonNull;
import android.annotation.Px;
import android.annotation.UnsupportedAppUsage;
import android.graphics.Paint;

@@ -37,17 +37,14 @@ public class TextPaint extends Paint {
    public float density = 1.0f;
    /**
     * Special value 0 means no custom underline
     * @hide
     */
    @ColorInt
    @UnsupportedAppUsage
    public int underlineColor = 0;

    /**
     * Thickness of the underline, in pixels.
     * @hide
     */
    @UnsupportedAppUsage
    public float underlineThickness;
    public @Px float underlineThickness;

    public TextPaint() {
        super();
@@ -77,24 +74,6 @@ public class TextPaint extends Paint {
        underlineThickness = tp.underlineThickness;
    }

    /**
     * Returns true if all attributes, including the attributes inherited from Paint, are equal.
     *
     * The caller is expected to have checked the trivial cases, like the pointers being equal,
     * the objects having different classes, or the parameter being null.
     * @hide
     */
    public boolean hasEqualAttributes(@NonNull TextPaint other) {
        return bgColor == other.bgColor
                && baselineShift == other.baselineShift
                && linkColor == other.linkColor
                && drawableState == other.drawableState
                && density == other.density
                && underlineColor == other.underlineColor
                && underlineThickness == other.underlineThickness
                && super.hasEqualAttributes((Paint) other);
    }

    /**
     * Defines a custom underline for this Paint.
     * @param color underline solid color
+32 −43
Original line number Diff line number Diff line
@@ -580,49 +580,6 @@ public class Paint {
        mShadowLayerColor = paint.mShadowLayerColor;
    }

    /**
     * Returns true if all attributes are equal.
     *
     * The caller is expected to have checked the trivial cases, like the pointers being equal,
     * the objects having different classes, or the parameter being null.
     * @hide
     */
    public boolean hasEqualAttributes(@NonNull Paint other) {
        return mColorFilter == other.mColorFilter
                && mMaskFilter == other.mMaskFilter
                && mPathEffect == other.mPathEffect
                && mShader == other.mShader
                && mTypeface == other.mTypeface
                && mXfermode == other.mXfermode
                && mHasCompatScaling == other.mHasCompatScaling
                && mCompatScaling == other.mCompatScaling
                && mInvCompatScaling == other.mInvCompatScaling
                && mBidiFlags == other.mBidiFlags
                && mLocales.equals(other.mLocales)
                && TextUtils.equals(mFontFeatureSettings, other.mFontFeatureSettings)
                && TextUtils.equals(mFontVariationSettings, other.mFontVariationSettings)
                && mShadowLayerRadius == other.mShadowLayerRadius
                && mShadowLayerDx == other.mShadowLayerDx
                && mShadowLayerDy == other.mShadowLayerDy
                && mShadowLayerColor == other.mShadowLayerColor
                && getFlags() == other.getFlags()
                && getHinting() == other.getHinting()
                && getStyle() == other.getStyle()
                && getColor() == other.getColor()
                && getStrokeWidth() == other.getStrokeWidth()
                && getStrokeMiter() == other.getStrokeMiter()
                && getStrokeCap() == other.getStrokeCap()
                && getStrokeJoin() == other.getStrokeJoin()
                && getTextAlign() == other.getTextAlign()
                && isElegantTextHeight() == other.isElegantTextHeight()
                && getTextSize() == other.getTextSize()
                && getTextScaleX() == other.getTextScaleX()
                && getTextSkewX() == other.getTextSkewX()
                && getLetterSpacing() == other.getLetterSpacing()
                && getWordSpacing() == other.getWordSpacing()
                && getHyphenEdit() == other.getHyphenEdit();
    }

    /** @hide */
    @UnsupportedAppUsage
    public void setCompatibilityScaling(float factor) {
@@ -1382,6 +1339,38 @@ public class Paint {
        return nHasShadowLayer(mNativePaint);
    }

    /**
     * Returns the blur radius of the shadow layer.
     * @see #setShadowLayer(float,float,float,int)
     */
    public float getShadowLayerRadius() {
        return mShadowLayerRadius;
    }

    /**
     * Returns the x offset of the shadow layer.
     * @see #setShadowLayer(float,float,float,int)
     */
    public float getShadowLayerDx() {
        return mShadowLayerDx;
    }

    /**
     * Returns the y offset of the shadow layer.
     * @see #setShadowLayer(float,float,float,int)
     */
    public float getShadowLayerDy() {
        return mShadowLayerDy;
    }

    /**
     * Returns the color of the shadow layer.
     * @see #setShadowLayer(float,float,float,int)
     */
    public @ColorInt int getShadowLayerColor() {
        return mShadowLayerColor;
    }

    /**
     * Return the paint's Align value for drawing text. This controls how the
     * text is positioned relative to its origin. LEFT align means that all of