/* * Copyright 2014 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef SkCanvasPriv_DEFINED #define SkCanvasPriv_DEFINED #include "include/core/SkCanvas.h" #include "include/core/SkPaint.h" #include "include/core/SkScalar.h" #include "include/private/base/SkDebug.h" #include "include/private/base/SkNoncopyable.h" #include <cstddef> class SkDevice; class SkImageFilter; class SkMatrix; class SkReadBuffer; struct SkRect; class SkWriteBuffer; class SkAutoCanvasMatrixPaint : SkNoncopyable { … }; class SkCanvasPriv { … }; /** * This constant is trying to balance the speed of ref'ing a subpicture into a parent picture, * against the playback cost of recursing into the subpicture to get at its actual ops. * * For now we pick a conservatively small value, though measurement (and other heuristics like * the type of ops contained) may justify changing this value. */ constexpr int kMaxPictureOpsToUnrollInsteadOfRef = …; /** * We implement ImageFilters and MaskFilters for a given draw by creating a layer, then applying * the filter to the pixels of that layer (its backing surface/image), and then we call restore() * to blend that layer to the main canvas. * * If the paint has neither an image filter nor a mask filter, there will be no layer and paint() * returns the original without modification. * * NOTE: This works by assuming all sources of color and shading are represented by the SkPaint. * Operations like drawImageRect must convert to an equivalent drawRect call if there's a mask * filter, or otherwise ensure there are no mask filters (e.g. drawAtlas). */ class AutoLayerForImageFilter { … }; #endif