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
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user