1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "skia/ext/opacity_filter_canvas.h"
6 #include "third_party/skia/include/core/SkPaint.h"
7 
8 namespace skia {
9 
OpacityFilterCanvas(SkCanvas * canvas,float opacity,bool disable_image_filtering)10 OpacityFilterCanvas::OpacityFilterCanvas(SkCanvas* canvas,
11                                          float opacity,
12                                          bool disable_image_filtering)
13     : INHERITED(canvas),
14       opacity_(opacity),
15       disable_image_filtering_(disable_image_filtering) {}
16 
onFilter(SkPaint & paint) const17 bool OpacityFilterCanvas::onFilter(SkPaint& paint) const {
18   if (opacity_ < 1.f)
19     paint.setAlphaf(paint.getAlphaf() * opacity_);
20 
21   if (disable_image_filtering_)
22     paint.setFilterQuality(kNone_SkFilterQuality);
23 
24   return true;
25 }
26 
onDrawPicture(const SkPicture * picture,const SkMatrix * matrix,const SkPaint * paint)27 void OpacityFilterCanvas::onDrawPicture(const SkPicture* picture,
28                                         const SkMatrix* matrix,
29                                         const SkPaint* paint) {
30   SkPaint filteredPaint(paint ? *paint : SkPaint());
31   if (this->onFilter(filteredPaint)) {
32     // Unfurl pictures in order to filter nested paints.
33     this->SkCanvas::onDrawPicture(picture, matrix, &filteredPaint);
34   }
35 }
36 
37 }  // namespace skia
38