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