summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--skia/ext/opacity_filter_canvas.cc26
-rw-r--r--skia/ext/opacity_filter_canvas.h2
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,