blob: d7867591ca555175ae4e11fad5fa5b2a9024aa20 [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "skia/ext/opacity_filter_canvas.h"
#include "third_party/skia/include/core/SkPaint.h"
#include "third_party/skia/include/core/SkTLazy.h"
namespace skia {
OpacityFilterCanvas::OpacityFilterCanvas(SkCanvas* canvas,
float opacity,
bool disable_image_filtering)
: INHERITED(canvas),
alpha_(SkScalarRoundToInt(opacity * 255)),
disable_image_filtering_(disable_image_filtering) { }
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);
}
return true;
}
void OpacityFilterCanvas::onDrawPicture(const SkPicture* picture,
const SkMatrix* matrix,
const SkPaint* paint) {
SkTCopyOnFirstWrite<SkPaint> filteredPaint(paint);
if (this->onFilter(&filteredPaint, kPicture_Type)) {
// Unfurl pictures in order to filter nested paints.
this->SkCanvas::onDrawPicture(picture, matrix, filteredPaint);
}
}
} // namespace skia