// Copyright 2016 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 "cc/playback/skip_image_canvas.h" #include "third_party/skia/include/core/SkShader.h" namespace cc { SkipImageCanvas::SkipImageCanvas(SkCanvas* canvas) : SkPaintFilterCanvas(canvas) {} bool SkipImageCanvas::onFilter(SkTCopyOnFirstWrite* paint, Type type) const { if (type == kBitmap_Type) return false; SkShader* shader = (*paint) ? (*paint)->getShader() : nullptr; return !shader || !shader->isABitmap(); } void SkipImageCanvas::onDrawPicture(const SkPicture* picture, const SkMatrix* matrix, const SkPaint* paint) { SkTCopyOnFirstWrite filteredPaint(paint); // To filter nested draws, we must unfurl pictures at this stage. if (onFilter(&filteredPaint, kPicture_Type)) SkCanvas::onDrawPicture(picture, matrix, filteredPaint); } } // namespace cc