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) { |