Remove use of SkRefCnt_SafeAssign.
Update pointer to SkRefCnt fields which require it to sk_sp. Test: refactoring CL. Existing unit tests still pass. Change-Id: I4f3eb790ee67c09746708458c4492569b64cc58f
This commit is contained in:
@@ -44,8 +44,8 @@ void LayerProperties::reset() {
|
||||
}
|
||||
|
||||
bool LayerProperties::setColorFilter(SkColorFilter* filter) {
|
||||
if (mColorFilter == filter) return false;
|
||||
SkRefCnt_SafeAssign(mColorFilter, filter);
|
||||
if (mColorFilter.get() == filter) return false;
|
||||
mColorFilter = sk_ref_sp(filter);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -62,7 +62,7 @@ LayerProperties& LayerProperties::operator=(const LayerProperties& other) {
|
||||
setOpaque(other.opaque());
|
||||
setAlpha(other.alpha());
|
||||
setXferMode(other.xferMode());
|
||||
setColorFilter(other.colorFilter());
|
||||
setColorFilter(other.getColorFilter());
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
@@ -89,9 +89,7 @@ public:
|
||||
|
||||
SkBlendMode xferMode() const { return mMode; }
|
||||
|
||||
bool setColorFilter(SkColorFilter* filter);
|
||||
|
||||
SkColorFilter* colorFilter() const { return mColorFilter; }
|
||||
SkColorFilter* getColorFilter() const { return mColorFilter.get(); }
|
||||
|
||||
// Sets alpha, xfermode, and colorfilter from an SkPaint
|
||||
// paint may be NULL, in which case defaults will be set
|
||||
@@ -105,6 +103,7 @@ private:
|
||||
LayerProperties();
|
||||
~LayerProperties();
|
||||
void reset();
|
||||
bool setColorFilter(SkColorFilter* filter);
|
||||
|
||||
// Private since external users should go through properties().effectiveLayerType()
|
||||
LayerType type() const { return mType; }
|
||||
@@ -116,7 +115,7 @@ private:
|
||||
bool mOpaque;
|
||||
uint8_t mAlpha;
|
||||
SkBlendMode mMode;
|
||||
SkColorFilter* mColorFilter = nullptr;
|
||||
sk_sp<SkColorFilter> mColorFilter;
|
||||
};
|
||||
|
||||
/*
|
||||
|
||||
@@ -59,12 +59,6 @@ namespace VectorDrawable {
|
||||
onPropertyChanged(); \
|
||||
retVal; \
|
||||
})
|
||||
#define UPDATE_SKPROP(field, value) \
|
||||
({ \
|
||||
bool retVal = ((field) != (value)); \
|
||||
if ((field) != (value)) SkRefCnt_SafeAssign((field), (value)); \
|
||||
retVal; \
|
||||
})
|
||||
|
||||
/* A VectorDrawable is composed of a tree of nodes.
|
||||
* Each node can be a group node, or a path.
|
||||
@@ -223,29 +217,28 @@ public:
|
||||
int fillType = 0; /* non-zero or kWinding_FillType in Skia */
|
||||
};
|
||||
explicit FullPathProperties(Node* mNode) : Properties(mNode), mTrimDirty(false) {}
|
||||
~FullPathProperties() {
|
||||
SkSafeUnref(fillGradient);
|
||||
SkSafeUnref(strokeGradient);
|
||||
}
|
||||
~FullPathProperties() {}
|
||||
void syncProperties(const FullPathProperties& prop) {
|
||||
mPrimitiveFields = prop.mPrimitiveFields;
|
||||
mTrimDirty = true;
|
||||
UPDATE_SKPROP(fillGradient, prop.fillGradient);
|
||||
UPDATE_SKPROP(strokeGradient, prop.strokeGradient);
|
||||
fillGradient = prop.fillGradient;
|
||||
strokeGradient = prop.strokeGradient;
|
||||
onPropertyChanged();
|
||||
}
|
||||
void setFillGradient(SkShader* gradient) {
|
||||
if (UPDATE_SKPROP(fillGradient, gradient)) {
|
||||
if (fillGradient.get() != gradient) {
|
||||
fillGradient = sk_ref_sp(gradient);
|
||||
onPropertyChanged();
|
||||
}
|
||||
}
|
||||
void setStrokeGradient(SkShader* gradient) {
|
||||
if (UPDATE_SKPROP(strokeGradient, gradient)) {
|
||||
if (strokeGradient.get() != gradient) {
|
||||
strokeGradient = sk_ref_sp(gradient);
|
||||
onPropertyChanged();
|
||||
}
|
||||
}
|
||||
SkShader* getFillGradient() const { return fillGradient; }
|
||||
SkShader* getStrokeGradient() const { return strokeGradient; }
|
||||
SkShader* getFillGradient() const { return fillGradient.get(); }
|
||||
SkShader* getStrokeGradient() const { return strokeGradient.get(); }
|
||||
float getStrokeWidth() const { return mPrimitiveFields.strokeWidth; }
|
||||
void setStrokeWidth(float strokeWidth) {
|
||||
VD_SET_PRIMITIVE_FIELD_AND_NOTIFY(strokeWidth, strokeWidth);
|
||||
@@ -325,8 +318,8 @@ public:
|
||||
count,
|
||||
};
|
||||
PrimitiveFields mPrimitiveFields;
|
||||
SkShader* fillGradient = nullptr;
|
||||
SkShader* strokeGradient = nullptr;
|
||||
sk_sp<SkShader> fillGradient;
|
||||
sk_sp<SkShader> strokeGradient;
|
||||
};
|
||||
|
||||
// Called from UI thread
|
||||
@@ -550,8 +543,7 @@ public:
|
||||
SkRect bounds;
|
||||
int scaledWidth = 0;
|
||||
int scaledHeight = 0;
|
||||
SkColorFilter* colorFilter = nullptr;
|
||||
~NonAnimatableProperties() { SkSafeUnref(colorFilter); }
|
||||
sk_sp<SkColorFilter> colorFilter;
|
||||
} mNonAnimatableProperties;
|
||||
bool mNonAnimatablePropertiesDirty = true;
|
||||
|
||||
@@ -561,8 +553,7 @@ public:
|
||||
void syncNonAnimatableProperties(const TreeProperties& prop) {
|
||||
// Copy over the data that can only be changed in UI thread
|
||||
if (mNonAnimatableProperties.colorFilter != prop.mNonAnimatableProperties.colorFilter) {
|
||||
SkRefCnt_SafeAssign(mNonAnimatableProperties.colorFilter,
|
||||
prop.mNonAnimatableProperties.colorFilter);
|
||||
mNonAnimatableProperties.colorFilter = prop.mNonAnimatableProperties.colorFilter;
|
||||
}
|
||||
mNonAnimatableProperties = prop.mNonAnimatableProperties;
|
||||
}
|
||||
@@ -599,12 +590,13 @@ public:
|
||||
}
|
||||
}
|
||||
void setColorFilter(SkColorFilter* filter) {
|
||||
if (UPDATE_SKPROP(mNonAnimatableProperties.colorFilter, filter)) {
|
||||
if (mNonAnimatableProperties.colorFilter.get() != filter) {
|
||||
mNonAnimatableProperties.colorFilter = sk_ref_sp(filter);
|
||||
mNonAnimatablePropertiesDirty = true;
|
||||
mTree->onPropertyChanged(this);
|
||||
}
|
||||
}
|
||||
SkColorFilter* getColorFilter() const { return mNonAnimatableProperties.colorFilter; }
|
||||
SkColorFilter* getColorFilter() const { return mNonAnimatableProperties.colorFilter.get(); }
|
||||
|
||||
float getViewportWidth() const { return mNonAnimatableProperties.viewportWidth; }
|
||||
float getViewportHeight() const { return mNonAnimatableProperties.viewportHeight; }
|
||||
|
||||
@@ -156,10 +156,10 @@ static bool layerNeedsPaint(const LayerProperties& properties, float alphaMultip
|
||||
SkPaint* paint) {
|
||||
paint->setFilterQuality(kLow_SkFilterQuality);
|
||||
if (alphaMultiplier < 1.0f || properties.alpha() < 255 ||
|
||||
properties.xferMode() != SkBlendMode::kSrcOver || properties.colorFilter() != nullptr) {
|
||||
properties.xferMode() != SkBlendMode::kSrcOver || properties.getColorFilter() != nullptr) {
|
||||
paint->setAlpha(properties.alpha() * alphaMultiplier);
|
||||
paint->setBlendMode(properties.xferMode());
|
||||
paint->setColorFilter(sk_ref_sp(properties.colorFilter()));
|
||||
paint->setColorFilter(sk_ref_sp(properties.getColorFilter()));
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user