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