Index: cc/paint/record_paint_canvas.h |
diff --git a/cc/paint/skia_paint_canvas.h b/cc/paint/record_paint_canvas.h |
similarity index 76% |
copy from cc/paint/skia_paint_canvas.h |
copy to cc/paint/record_paint_canvas.h |
index 8e016f0db5159c5066023d3ad92c294fefad20a9..4677512a9b88ec26ac1ab713df85e9c075a4d37e 100644 |
--- a/cc/paint/skia_paint_canvas.h |
+++ b/cc/paint/record_paint_canvas.h |
@@ -2,36 +2,30 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#ifndef CC_PAINT_SKIA_PAINT_CANVAS_H_ |
-#define CC_PAINT_SKIA_PAINT_CANVAS_H_ |
+#ifndef CC_PAINT_RECORD_PAINT_CANVAS_H_ |
+#define CC_PAINT_RECORD_PAINT_CANVAS_H_ |
#include <memory> |
#include "base/compiler_specific.h" |
#include "base/logging.h" |
#include "base/macros.h" |
+#include "base/optional.h" |
#include "build/build_config.h" |
#include "cc/paint/paint_canvas.h" |
#include "cc/paint/paint_flags.h" |
#include "cc/paint/paint_record.h" |
-#include "third_party/skia/include/core/SkCanvas.h" |
+#include "third_party/skia/include/utils/SkNoDrawCanvas.h" |
namespace cc { |
+class PaintOpBuffer; |
class PaintFlags; |
-// A PaintCanvas derived class that passes PaintCanvas APIs through to |
-// an SkCanvas. This is more efficient than recording to a PaintRecord |
-// and then playing back to an SkCanvas. |
-class CC_PAINT_EXPORT SkiaPaintCanvas final : public PaintCanvas { |
+class CC_PAINT_EXPORT RecordPaintCanvas final : public PaintCanvas { |
public: |
- explicit SkiaPaintCanvas(SkCanvas* canvas); |
- explicit SkiaPaintCanvas(const SkBitmap& bitmap); |
- explicit SkiaPaintCanvas(const SkBitmap& bitmap, const SkSurfaceProps& props); |
- explicit SkiaPaintCanvas(SkiaPaintCanvas&& other); |
- ~SkiaPaintCanvas() override; |
- |
- SkiaPaintCanvas& operator=(SkiaPaintCanvas&& other) = default; |
+ explicit RecordPaintCanvas(PaintOpBuffer* buffer); |
+ ~RecordPaintCanvas() override; |
SkMetaData& getMetaData() override; |
SkImageInfo imageInfo() const override; |
@@ -40,7 +34,7 @@ class CC_PAINT_EXPORT SkiaPaintCanvas final : public PaintCanvas { |
int save() override; |
int saveLayer(const SkRect* bounds, const PaintFlags* flags) override; |
- int saveLayerAlpha(const SkRect* bounds, U8CPU alpha) override; |
+ int saveLayerAlpha(const SkRect* bounds, uint8_t alpha) override; |
void restore() override; |
int getSaveCount() const override; |
@@ -51,11 +45,9 @@ class CC_PAINT_EXPORT SkiaPaintCanvas final : public PaintCanvas { |
void concat(const SkMatrix& matrix) override; |
void setMatrix(const SkMatrix& matrix) override; |
- void clipRect(const SkRect& rect, SkClipOp op, bool do_anti_alias) override; |
- void clipRRect(const SkRRect& rrect, |
- SkClipOp op, |
- bool do_anti_alias) override; |
- void clipPath(const SkPath& path, SkClipOp op, bool do_anti_alias) override; |
+ void clipRect(const SkRect& rect, SkClipOp op, bool antialias) override; |
+ void clipRRect(const SkRRect& rrect, SkClipOp op, bool antialias) override; |
+ void clipPath(const SkPath& path, SkClipOp op, bool antialias) override; |
bool quickReject(const SkRect& rect) const override; |
bool quickReject(const SkPath& path) const override; |
SkRect getLocalClipBounds() const override; |
@@ -144,12 +136,24 @@ class CC_PAINT_EXPORT SkiaPaintCanvas final : public PaintCanvas { |
using PaintCanvas::drawPicture; |
private: |
- SkCanvas* canvas_; |
- std::unique_ptr<SkCanvas> owned_; |
- |
- DISALLOW_COPY_AND_ASSIGN(SkiaPaintCanvas); |
+ const SkNoDrawCanvas* GetCanvas() const; |
+ SkNoDrawCanvas* GetCanvas(); |
+ |
+ PaintOpBuffer* buffer_; |
+ |
+ // TODO(enne): Although RecordPaintCanvas is mostly a write-only interface |
+ // where paint commands are stored, occasionally users of PaintCanvas want |
+ // to ask stateful questions mid-stream of clip and transform state. |
+ // To avoid duplicating all this code (for now?), just forward to an SkCanvas |
+ // that's not backed by anything but can answer these questions. |
+ // |
+ // This is mutable so that const functions (e.g. quickReject) that may |
+ // lazy initialize the canvas can still be const. |
+ mutable base::Optional<SkNoDrawCanvas> canvas_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(RecordPaintCanvas); |
}; |
} // namespace cc |
-#endif // CC_PAINT_SKIA_PAINT_CANVAS_H_ |
+#endif // CC_PAINT_RECORD_PAINT_CANVAS_H_ |