Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(118)

Unified Diff: src/core/SkMatrixImageFilter.cpp

Issue 1899263002: post apply non-scale transforms after imagefilters have run (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: fission out gm to separate pre-CL Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« include/core/SkCanvas.h ('K') | « src/core/SkMatrixImageFilter.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
« include/core/SkCanvas.h ('K') | « src/core/SkMatrixImageFilter.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698