| Index: src/core/SkPaint.cpp
|
| diff --git a/src/core/SkPaint.cpp b/src/core/SkPaint.cpp
|
| index cdfb1104544eb15690ac5037057a570fcb3b4eb6..3d768074cad262bc64fe4c34569f8bdcd67666a9 100644
|
| --- a/src/core/SkPaint.cpp
|
| +++ b/src/core/SkPaint.cpp
|
| @@ -44,16 +44,6 @@ static inline uint32_t set_clear_mask(uint32_t bits, bool cond, uint32_t mask) {
|
| //#define SK_REPORT_API_RANGE_CHECK
|
|
|
| SkPaint::SkPaint() {
|
| - fTypeface = nullptr;
|
| - fPathEffect = nullptr;
|
| - fShader = nullptr;
|
| - fXfermode = nullptr;
|
| - fMaskFilter = nullptr;
|
| - fColorFilter = nullptr;
|
| - fRasterizer = nullptr;
|
| - fLooper = nullptr;
|
| - fImageFilter = nullptr;
|
| -
|
| fTextSize = SkPaintDefaults_TextSize;
|
| fTextScaleX = SK_Scalar1;
|
| fTextSkewX = 0;
|
| @@ -72,46 +62,38 @@ SkPaint::SkPaint() {
|
| fBitfields.fHinting = SkPaintDefaults_Hinting;
|
| }
|
|
|
| -SkPaint::SkPaint(const SkPaint& src) {
|
| -#define COPY(field) field = src.field
|
| -#define REF_COPY(field) field = SkSafeRef(src.field)
|
| -
|
| - REF_COPY(fTypeface);
|
| - REF_COPY(fPathEffect);
|
| - REF_COPY(fShader);
|
| - REF_COPY(fXfermode);
|
| - REF_COPY(fMaskFilter);
|
| - REF_COPY(fColorFilter);
|
| - REF_COPY(fRasterizer);
|
| - REF_COPY(fLooper);
|
| - REF_COPY(fImageFilter);
|
| -
|
| - COPY(fTextSize);
|
| - COPY(fTextScaleX);
|
| - COPY(fTextSkewX);
|
| - COPY(fColor);
|
| - COPY(fWidth);
|
| - COPY(fMiterLimit);
|
| - COPY(fBitfields);
|
| -
|
| +SkPaint::SkPaint(const SkPaint& src)
|
| +#define COPY(field) field(src.field)
|
| + : COPY(fTypeface)
|
| + , COPY(fPathEffect)
|
| + , COPY(fShader)
|
| + , COPY(fXfermode)
|
| + , COPY(fMaskFilter)
|
| + , COPY(fColorFilter)
|
| + , COPY(fRasterizer)
|
| + , COPY(fLooper)
|
| + , COPY(fImageFilter)
|
| + , COPY(fTextSize)
|
| + , COPY(fTextScaleX)
|
| + , COPY(fTextSkewX)
|
| + , COPY(fColor)
|
| + , COPY(fWidth)
|
| + , COPY(fMiterLimit)
|
| + , COPY(fBitfields)
|
| #undef COPY
|
| -#undef REF_COPY
|
| -}
|
| +{}
|
|
|
| SkPaint::SkPaint(SkPaint&& src) {
|
| #define MOVE(field) field = std::move(src.field)
|
| -#define REF_MOVE(field) field = src.field; src.field = nullptr
|
| -
|
| - REF_MOVE(fTypeface);
|
| - REF_MOVE(fPathEffect);
|
| - REF_MOVE(fShader);
|
| - REF_MOVE(fXfermode);
|
| - REF_MOVE(fMaskFilter);
|
| - REF_MOVE(fColorFilter);
|
| - REF_MOVE(fRasterizer);
|
| - REF_MOVE(fLooper);
|
| - REF_MOVE(fImageFilter);
|
| -
|
| + MOVE(fTypeface);
|
| + MOVE(fPathEffect);
|
| + MOVE(fShader);
|
| + MOVE(fXfermode);
|
| + MOVE(fMaskFilter);
|
| + MOVE(fColorFilter);
|
| + MOVE(fRasterizer);
|
| + MOVE(fLooper);
|
| + MOVE(fImageFilter);
|
| MOVE(fTextSize);
|
| MOVE(fTextScaleX);
|
| MOVE(fTextSkewX);
|
| @@ -119,53 +101,36 @@ SkPaint::SkPaint(SkPaint&& src) {
|
| MOVE(fWidth);
|
| MOVE(fMiterLimit);
|
| MOVE(fBitfields);
|
| -
|
| #undef MOVE
|
| -#undef REF_MOVE
|
| }
|
|
|
| -SkPaint::~SkPaint() {
|
| - SkSafeUnref(fTypeface);
|
| - SkSafeUnref(fPathEffect);
|
| - SkSafeUnref(fShader);
|
| - SkSafeUnref(fXfermode);
|
| - SkSafeUnref(fMaskFilter);
|
| - SkSafeUnref(fColorFilter);
|
| - SkSafeUnref(fRasterizer);
|
| - SkSafeUnref(fLooper);
|
| - SkSafeUnref(fImageFilter);
|
| -}
|
| +SkPaint::~SkPaint() {}
|
|
|
| SkPaint& SkPaint::operator=(const SkPaint& src) {
|
| if (this == &src) {
|
| return *this;
|
| }
|
|
|
| -#define COPY(field) field = src.field
|
| -#define REF_COPY(field) SkSafeUnref(field); field = SkSafeRef(src.field)
|
| -
|
| - REF_COPY(fTypeface);
|
| - REF_COPY(fPathEffect);
|
| - REF_COPY(fShader);
|
| - REF_COPY(fXfermode);
|
| - REF_COPY(fMaskFilter);
|
| - REF_COPY(fColorFilter);
|
| - REF_COPY(fRasterizer);
|
| - REF_COPY(fLooper);
|
| - REF_COPY(fImageFilter);
|
| -
|
| - COPY(fTextSize);
|
| - COPY(fTextScaleX);
|
| - COPY(fTextSkewX);
|
| - COPY(fColor);
|
| - COPY(fWidth);
|
| - COPY(fMiterLimit);
|
| - COPY(fBitfields);
|
| +#define ASSIGN(field) field = src.field
|
| + ASSIGN(fTypeface);
|
| + ASSIGN(fPathEffect);
|
| + ASSIGN(fShader);
|
| + ASSIGN(fXfermode);
|
| + ASSIGN(fMaskFilter);
|
| + ASSIGN(fColorFilter);
|
| + ASSIGN(fRasterizer);
|
| + ASSIGN(fLooper);
|
| + ASSIGN(fImageFilter);
|
| + ASSIGN(fTextSize);
|
| + ASSIGN(fTextScaleX);
|
| + ASSIGN(fTextSkewX);
|
| + ASSIGN(fColor);
|
| + ASSIGN(fWidth);
|
| + ASSIGN(fMiterLimit);
|
| + ASSIGN(fBitfields);
|
| +#undef ASSIGN
|
|
|
| return *this;
|
| -
|
| -#undef COPY
|
| -#undef REF_COPY
|
| }
|
|
|
| SkPaint& SkPaint::operator=(SkPaint&& src) {
|
| @@ -174,18 +139,15 @@ SkPaint& SkPaint::operator=(SkPaint&& src) {
|
| }
|
|
|
| #define MOVE(field) field = std::move(src.field)
|
| -#define REF_MOVE(field) SkSafeUnref(field); field = src.field; src.field = nullptr
|
| -
|
| - REF_MOVE(fTypeface);
|
| - REF_MOVE(fPathEffect);
|
| - REF_MOVE(fShader);
|
| - REF_MOVE(fXfermode);
|
| - REF_MOVE(fMaskFilter);
|
| - REF_MOVE(fColorFilter);
|
| - REF_MOVE(fRasterizer);
|
| - REF_MOVE(fLooper);
|
| - REF_MOVE(fImageFilter);
|
| -
|
| + MOVE(fTypeface);
|
| + MOVE(fPathEffect);
|
| + MOVE(fShader);
|
| + MOVE(fXfermode);
|
| + MOVE(fMaskFilter);
|
| + MOVE(fColorFilter);
|
| + MOVE(fRasterizer);
|
| + MOVE(fLooper);
|
| + MOVE(fImageFilter);
|
| MOVE(fTextSize);
|
| MOVE(fTextScaleX);
|
| MOVE(fTextSkewX);
|
| @@ -193,11 +155,9 @@ SkPaint& SkPaint::operator=(SkPaint&& src) {
|
| MOVE(fWidth);
|
| MOVE(fMiterLimit);
|
| MOVE(fBitfields);
|
| +#undef MOVE
|
|
|
| return *this;
|
| -
|
| -#undef MOVE
|
| -#undef REF_MOVE
|
| }
|
|
|
| bool operator==(const SkPaint& a, const SkPaint& b) {
|
| @@ -392,24 +352,41 @@ void SkPaint::setTextEncoding(TextEncoding encoding) {
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| -SkTypeface* SkPaint::setTypeface(SkTypeface* font) {
|
| - SkRefCnt_SafeAssign(fTypeface, font);
|
| - return font;
|
| -}
|
| -
|
| -SkRasterizer* SkPaint::setRasterizer(SkRasterizer* r) {
|
| - SkRefCnt_SafeAssign(fRasterizer, r);
|
| - return r;
|
| -}
|
| +#define MOVE_FIELD(Field) void SkPaint::set##Field(sk_sp<Sk##Field> f) { f##Field = std::move(f); }
|
| +MOVE_FIELD(Typeface)
|
| +MOVE_FIELD(Rasterizer)
|
| +MOVE_FIELD(ImageFilter)
|
| +MOVE_FIELD(Shader)
|
| +MOVE_FIELD(ColorFilter)
|
| +MOVE_FIELD(Xfermode)
|
| +MOVE_FIELD(PathEffect)
|
| +MOVE_FIELD(MaskFilter)
|
| +#undef MOVE_FIELD
|
| +void SkPaint::setLooper(sk_sp<SkDrawLooper> looper) { fLooper = std::move(looper); }
|
| +
|
| +#define SET_PTR(Field) \
|
| + Sk##Field* SkPaint::set##Field(Sk##Field* f) { \
|
| + this->f##Field.reset(SkSafeRef(f)); \
|
| + return f; \
|
| + }
|
| +SET_PTR(Typeface)
|
| +SET_PTR(Rasterizer)
|
| +SET_PTR(ImageFilter)
|
| +SET_PTR(Shader)
|
| +SET_PTR(ColorFilter)
|
| +SET_PTR(Xfermode)
|
| +SET_PTR(PathEffect)
|
| +SET_PTR(MaskFilter)
|
| +#undef SET_PTR
|
|
|
| SkDrawLooper* SkPaint::setLooper(SkDrawLooper* looper) {
|
| - SkRefCnt_SafeAssign(fLooper, looper);
|
| + fLooper.reset(SkSafeRef(looper));
|
| return looper;
|
| }
|
|
|
| -SkImageFilter* SkPaint::setImageFilter(SkImageFilter* imageFilter) {
|
| - SkRefCnt_SafeAssign(fImageFilter, imageFilter);
|
| - return imageFilter;
|
| +SkXfermode* SkPaint::setXfermodeMode(SkXfermode::Mode mode) {
|
| + fXfermode.reset(SkXfermode::Create(mode));
|
| + return fXfermode.get();
|
| }
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
| @@ -1726,7 +1703,7 @@ void SkPaint::descriptorProc(const SkSurfaceProps* surfaceProps,
|
| test_desc(rec, pe, &peBuffer, mf, &mfBuffer, ra, &raBuffer, desc, descSize);
|
| #endif
|
|
|
| - proc(fTypeface, desc, context);
|
| + proc(fTypeface.get(), desc, context);
|
| }
|
|
|
| SkGlyphCache* SkPaint::detachCache(const SkSurfaceProps* surfaceProps,
|
| @@ -1983,39 +1960,6 @@ void SkPaint::unflatten(SkReadBuffer& buffer) {
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| -SkShader* SkPaint::setShader(SkShader* shader) {
|
| - SkRefCnt_SafeAssign(fShader, shader);
|
| - return shader;
|
| -}
|
| -
|
| -SkColorFilter* SkPaint::setColorFilter(SkColorFilter* filter) {
|
| - SkRefCnt_SafeAssign(fColorFilter, filter);
|
| - return filter;
|
| -}
|
| -
|
| -SkXfermode* SkPaint::setXfermode(SkXfermode* mode) {
|
| - SkRefCnt_SafeAssign(fXfermode, mode);
|
| - return mode;
|
| -}
|
| -
|
| -SkXfermode* SkPaint::setXfermodeMode(SkXfermode::Mode mode) {
|
| - SkSafeUnref(fXfermode);
|
| - fXfermode = SkXfermode::Create(mode);
|
| - return fXfermode;
|
| -}
|
| -
|
| -SkPathEffect* SkPaint::setPathEffect(SkPathEffect* effect) {
|
| - SkRefCnt_SafeAssign(fPathEffect, effect);
|
| - return effect;
|
| -}
|
| -
|
| -SkMaskFilter* SkPaint::setMaskFilter(SkMaskFilter* filter) {
|
| - SkRefCnt_SafeAssign(fMaskFilter, filter);
|
| - return filter;
|
| -}
|
| -
|
| -///////////////////////////////////////////////////////////////////////////////
|
| -
|
| bool SkPaint::getFillPath(const SkPath& src, SkPath* dst, const SkRect* cullRect,
|
| SkScalar resScale) const {
|
| SkStrokeRec rec(*this, resScale);
|
| @@ -2393,7 +2337,7 @@ bool SkPaint::nothingToDraw() const {
|
| return false;
|
| }
|
| SkXfermode::Mode mode;
|
| - if (SkXfermode::AsMode(fXfermode, &mode)) {
|
| + if (SkXfermode::AsMode(fXfermode.get(), &mode)) {
|
| switch (mode) {
|
| case SkXfermode::kSrcOver_Mode:
|
| case SkXfermode::kSrcATop_Mode:
|
| @@ -2401,7 +2345,7 @@ bool SkPaint::nothingToDraw() const {
|
| case SkXfermode::kDstOver_Mode:
|
| case SkXfermode::kPlus_Mode:
|
| if (0 == this->getAlpha()) {
|
| - return !affects_alpha(fColorFilter) && !affects_alpha(fImageFilter);
|
| + return !affects_alpha(fColorFilter.get()) && !affects_alpha(fImageFilter.get());
|
| }
|
| break;
|
| case SkXfermode::kDst_Mode:
|
|
|