| Index: src/core/SkPaint.cpp
|
| diff --git a/src/core/SkPaint.cpp b/src/core/SkPaint.cpp
|
| index f3bf01bfafc5ca30e0507190a8ffee37f8a5efaa..68f0dfbf6b50b9867f22764b59035ecce51def4a 100644
|
| --- a/src/core/SkPaint.cpp
|
| +++ b/src/core/SkPaint.cpp
|
| @@ -70,6 +70,8 @@ enum {
|
| #endif
|
|
|
| SkPaint::SkPaint() {
|
| + fCachedFont = NULL;
|
| +
|
| fTypeface = NULL;
|
| fPathEffect = NULL;
|
| fShader = NULL;
|
| @@ -114,6 +116,8 @@ SkPaint::SkPaint(const SkPaint& src) {
|
| #define COPY(field) field = src.field
|
| #define REF_COPY(field) field = SkSafeRef(src.field)
|
|
|
| + REF_COPY(fCachedFont);
|
| +
|
| REF_COPY(fTypeface);
|
| REF_COPY(fPathEffect);
|
| REF_COPY(fShader);
|
| @@ -144,6 +148,7 @@ SkPaint::SkPaint(const SkPaint& src) {
|
| }
|
|
|
| SkPaint::~SkPaint() {
|
| + SkSafeUnref(fCachedFont);
|
| SkSafeUnref(fTypeface);
|
| SkSafeUnref(fPathEffect);
|
| SkSafeUnref(fShader);
|
| @@ -166,6 +171,8 @@ SkPaint& SkPaint::operator=(const SkPaint& src) {
|
|
|
| SkASSERT(&src);
|
|
|
| + REF_COPY(fCachedFont);
|
| +
|
| REF_COPY(fTypeface);
|
| REF_COPY(fPathEffect);
|
| REF_COPY(fShader);
|
| @@ -267,11 +274,13 @@ void SkPaint::setFilterLevel(FilterLevel level) {
|
| }
|
|
|
| void SkPaint::setHinting(Hinting hintingLevel) {
|
| + this->dirtyCachedFont(hintingLevel != fHinting);
|
| GEN_ID_INC_EVAL((unsigned) hintingLevel != fHinting);
|
| fHinting = hintingLevel;
|
| }
|
|
|
| void SkPaint::setFlags(uint32_t flags) {
|
| + this->dirtyCachedFont(fFlags != flags);
|
| GEN_ID_INC_EVAL(fFlags != flags);
|
| fFlags = flags;
|
| }
|
| @@ -415,6 +424,7 @@ void SkPaint::setTextAlign(Align align) {
|
|
|
| void SkPaint::setTextSize(SkScalar ts) {
|
| if (ts >= 0) {
|
| + this->dirtyCachedFont(ts != fTextSize);
|
| GEN_ID_INC_EVAL(ts != fTextSize);
|
| fTextSize = ts;
|
| fDirtyBits |= kTextSize_DirtyBit;
|
| @@ -426,12 +436,14 @@ void SkPaint::setTextSize(SkScalar ts) {
|
| }
|
|
|
| void SkPaint::setTextScaleX(SkScalar scaleX) {
|
| + this->dirtyCachedFont(scaleX != fTextScaleX);
|
| GEN_ID_INC_EVAL(scaleX != fTextScaleX);
|
| fTextScaleX = scaleX;
|
| fDirtyBits |= kTextScaleX_DirtyBit;
|
| }
|
|
|
| void SkPaint::setTextSkewX(SkScalar skewX) {
|
| + this->dirtyCachedFont(skewX != fTextSkewX);
|
| GEN_ID_INC_EVAL(skewX != fTextSkewX);
|
| fTextSkewX = skewX;
|
| fDirtyBits |= kTextSkewX_DirtyBit;
|
| @@ -455,11 +467,12 @@ inline static uint32_t set_mask(uint32_t dst, uint32_t bitmask, bool value) {
|
| return value ? (dst | bitmask) : (dst & ~bitmask);
|
| }
|
|
|
| -SkTypeface* SkPaint::setTypeface(SkTypeface* font) {
|
| - SkRefCnt_SafeAssign(fTypeface, font);
|
| +SkTypeface* SkPaint::setTypeface(SkTypeface* typeface) {
|
| + this->dirtyCachedFont(typeface != fTypeface);
|
| + SkRefCnt_SafeAssign(fTypeface, typeface);
|
| GEN_ID_INC;
|
| - fDirtyBits = set_mask(fDirtyBits, kTypeface_DirtyBit, font != NULL);
|
| - return font;
|
| + fDirtyBits = set_mask(fDirtyBits, kTypeface_DirtyBit, typeface != NULL);
|
| + return typeface;
|
| }
|
|
|
| SkRasterizer* SkPaint::setRasterizer(SkRasterizer* r) {
|
|
|