diff options
-rw-r--r-- | skia/ext/opacity_filter_canvas.cc | 26 | ||||
-rw-r--r-- | skia/ext/opacity_filter_canvas.h | 2 |
2 files changed, 16 insertions, 12 deletions
diff --git a/skia/ext/opacity_filter_canvas.cc b/skia/ext/opacity_filter_canvas.cc index 53d3580..d786759 100644 --- a/skia/ext/opacity_filter_canvas.cc +++ b/skia/ext/opacity_filter_canvas.cc @@ -15,24 +15,28 @@ OpacityFilterCanvas::OpacityFilterCanvas(SkCanvas* canvas, alpha_(SkScalarRoundToInt(opacity * 255)), disable_image_filtering_(disable_image_filtering) { } -void OpacityFilterCanvas::onFilterPaint(SkPaint* paint, Type) const { - if (alpha_ < 255) - paint->setAlpha(alpha_); +bool OpacityFilterCanvas::onFilter(SkTCopyOnFirstWrite<SkPaint>* paint, Type) const { + // TODO(fmalita): with the new onFilter() API we could override alpha even + // when the original paint is null; is this something we should do? + if (*paint) { + if (alpha_ < 255) + paint->writable()->setAlpha(alpha_); + + if (disable_image_filtering_) + paint->writable()->setFilterQuality(kNone_SkFilterQuality); + } - if (disable_image_filtering_) - paint->setFilterQuality(kNone_SkFilterQuality); + return true; } void OpacityFilterCanvas::onDrawPicture(const SkPicture* picture, const SkMatrix* matrix, const SkPaint* paint) { - SkTLazy<SkPaint> filteredPaint; - if (paint) { - this->onFilterPaint(filteredPaint.set(*paint), kPicture_Type); + SkTCopyOnFirstWrite<SkPaint> filteredPaint(paint); + if (this->onFilter(&filteredPaint, kPicture_Type)) { + // Unfurl pictures in order to filter nested paints. + this->SkCanvas::onDrawPicture(picture, matrix, filteredPaint); } - - // Unfurl pictures in order to filter nested paints. - this->SkCanvas::onDrawPicture(picture, matrix, filteredPaint.getMaybeNull()); } } // namespace skia diff --git a/skia/ext/opacity_filter_canvas.h b/skia/ext/opacity_filter_canvas.h index ee3eca6e..450e378 100644 --- a/skia/ext/opacity_filter_canvas.h +++ b/skia/ext/opacity_filter_canvas.h @@ -20,7 +20,7 @@ class SK_API OpacityFilterCanvas : public SkPaintFilterCanvas { bool disable_image_filtering); protected: - void onFilterPaint(SkPaint* paint, Type type) const override; + bool onFilter(SkTCopyOnFirstWrite<SkPaint>* paint, Type type) const override; void onDrawPicture(const SkPicture* picture, const SkMatrix* matrix, |