Index: src/core/SkMatrixImageFilter.cpp |
diff --git a/src/core/SkMatrixImageFilter.cpp b/src/core/SkMatrixImageFilter.cpp |
index 6cd79f3f4ad0c8ef7ddc5cd1230f3a289afd5606..2470513feb35e7820eaebe69a45161b92f45dd60 100644 |
--- a/src/core/SkMatrixImageFilter.cpp |
+++ b/src/core/SkMatrixImageFilter.cpp |
@@ -16,32 +16,52 @@ |
SkMatrixImageFilter::SkMatrixImageFilter(const SkMatrix& transform, |
SkFilterQuality filterQuality, |
+ bool doAntiAlias, |
sk_sp<SkImageFilter> input) |
: INHERITED(&input, 1, nullptr) |
, fTransform(transform) |
- , fFilterQuality(filterQuality) { |
-} |
+ , fFilterQuality(filterQuality) |
+ , fDoAntiAlias(doAntiAlias) |
+{} |
sk_sp<SkImageFilter> SkMatrixImageFilter::Make(const SkMatrix& transform, |
SkFilterQuality filterQuality, |
+ bool doAntiAlias, |
sk_sp<SkImageFilter> input) { |
return sk_sp<SkImageFilter>(new SkMatrixImageFilter(transform, |
filterQuality, |
+ doAntiAlias, |
std::move(input))); |
} |
+// We store various attributes in a 32bit flag |
+enum Flags { |
+ kQuality_Mask = 0x3, |
+ kQuality_Shift = 0, |
+ |
+ kAntiAlias_Mask = 0x1, |
+ kAntiAlias_Shift = 2, |
+}; |
+ |
sk_sp<SkFlattenable> SkMatrixImageFilter::CreateProc(SkReadBuffer& buffer) { |
SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1); |
SkMatrix matrix; |
buffer.readMatrix(&matrix); |
- SkFilterQuality quality = static_cast<SkFilterQuality>(buffer.readInt()); |
- return Make(matrix, quality, common.getInput(0)); |
+ uint32_t flags = buffer.readInt(); |
+ |
+ return Make(matrix, |
+ static_cast<SkFilterQuality>((flags >> kQuality_Shift) & kQuality_Mask), |
+ static_cast<bool>((flags >> kAntiAlias_Shift) & kAntiAlias_Mask), |
+ common.getInput(0)); |
} |
void SkMatrixImageFilter::flatten(SkWriteBuffer& buffer) const { |
this->INHERITED::flatten(buffer); |
buffer.writeMatrix(fTransform); |
- buffer.writeInt(fFilterQuality); |
+ |
+ uint32_t flags = (fFilterQuality << kQuality_Shift) | |
+ (fDoAntiAlias << kAntiAlias_Shift); |
+ buffer.writeInt(flags); |
} |
sk_sp<SkSpecialImage> SkMatrixImageFilter::onFilterImage(SkSpecialImage* source, |
@@ -88,6 +108,7 @@ sk_sp<SkSpecialImage> SkMatrixImageFilter::onFilterImage(SkSpecialImage* source, |
SkPaint paint; |
paint.setXfermodeMode(SkXfermode::kSrc_Mode); |
paint.setFilterQuality(fFilterQuality); |
+ paint.setAntiAlias(fDoAntiAlias); |
input->draw(canvas, srcRect.x(), srcRect.y(), &paint); |