// Copyright 2017 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CC_PAINT_PAINT_CANVAS_H_ #define CC_PAINT_PAINT_CANVAS_H_ #include "base/compiler_specific.h" #include "base/containers/span.h" #include "base/memory/raw_ptr.h" #include "base/memory/ref_counted.h" #include "build/build_config.h" #include "cc/paint/node_id.h" #include "cc/paint/paint_export.h" #include "cc/paint/paint_image.h" #include "cc/paint/refcounted_buffer.h" #include "cc/paint/skottie_color_map.h" #include "cc/paint/skottie_frame_data.h" #include "cc/paint/skottie_text_property_value.h" #include "third_party/skia/include/core/SkCanvas.h" #include "third_party/skia/include/core/SkRefCnt.h" class SkTextBlob; namespace printing { class MetafileSkia; } // namespace printing namespace paint_preview { class PaintPreviewTracker; } // namespace paint_preview namespace cc { class SkottieWrapper; class PaintFilter; class PaintFlags; class PaintRecord; enum class UsePaintCache { … }; // PaintCanvas is the cc/paint wrapper of SkCanvas. It has a more restricted // interface than SkCanvas (trimmed back to only what Chrome uses). Its reason // for existence is so that it can do custom serialization logic into a // PaintOpBuffer which (unlike SkPicture) is mutable, handles image replacement, // and can be serialized in custom ways (such as using the transfer cache). // // PaintCanvas is usually implemented by either: // (1) SkiaPaintCanvas, which is backed by an SkCanvas, usually for rasterizing. // (2) RecordPaintCanvas, which records paint commands into a PaintOpBuffer. // // SkiaPaintCanvas allows callers to go from PaintCanvas to SkCanvas (or // PaintRecord to SkPicture), but this is a one way trip. There is no way to go // from SkCanvas to PaintCanvas or from SkPicture back into PaintRecord. class CC_PAINT_EXPORT PaintCanvas { … }; class CC_PAINT_EXPORT PaintCanvasAutoRestore { … }; } // namespace cc #endif // CC_PAINT_PAINT_CANVAS_H_