1/*
2 * Copyright 2016 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#ifndef SkNoDrawCanvas_DEFINED
9#define SkNoDrawCanvas_DEFINED
10
11#include "SkCanvas.h"
12#include "SkVertices.h"
13
14struct SkIRect;
15
16// SkNoDrawCanvas is a helper for SkCanvas subclasses which do not need to
17// actually rasterize (e.g., analysis of the draw calls).
18//
19// It provides the following simplifications:
20//
21//   * not backed by any device/pixels
22//   * conservative clipping (clipping calls only use rectangles)
23//
24class SK_API SkNoDrawCanvas : public SkCanvas {
25public:
26    SkNoDrawCanvas(int width, int height);
27
28    // TODO: investigate the users of this ctor.
29    SkNoDrawCanvas(const SkIRect&);
30
31    // Optimization to reset state to be the same as after construction.
32    void resetCanvas(int width, int height) {
33        resetForNextPicture(SkIRect::MakeWH(width, height));
34    }
35
36protected:
37    SaveLayerStrategy getSaveLayerStrategy(const SaveLayerRec& rec) override;
38
39    // No-op overrides for aborting rasterization earlier than SkNullBlitter.
40    void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) override {}
41    void onDrawDrawable(SkDrawable*, const SkMatrix*) override {}
42    void onDrawText(const void*, size_t, SkScalar, SkScalar, const SkPaint&) override {}
43    void onDrawPosText(const void*, size_t, const SkPoint[], const SkPaint&) override {}
44    void onDrawPosTextH(const void*, size_t, const SkScalar[], SkScalar, const SkPaint&) override {}
45    void onDrawTextOnPath(const void*, size_t, const SkPath&, const SkMatrix*,
46                          const SkPaint&) override {}
47    void onDrawTextRSXform(const void*, size_t, const SkRSXform[], const SkRect*,
48                           const SkPaint&) override {}
49    void onDrawTextBlob(const SkTextBlob*, SkScalar, SkScalar, const SkPaint&) override {}
50    void onDrawPatch(const SkPoint[12], const SkColor[4], const SkPoint[4], SkBlendMode,
51                     const SkPaint&) override {}
52
53    void onDrawPaint(const SkPaint&) override {}
54    void onDrawPoints(PointMode, size_t, const SkPoint[], const SkPaint&) override {}
55    void onDrawRect(const SkRect&, const SkPaint&) override {}
56    void onDrawRegion(const SkRegion&, const SkPaint&) override {}
57    void onDrawOval(const SkRect&, const SkPaint&) override {}
58    void onDrawArc(const SkRect&, SkScalar, SkScalar, bool, const SkPaint&) override {}
59    void onDrawRRect(const SkRRect&, const SkPaint&) override {}
60    void onDrawPath(const SkPath&, const SkPaint&) override {}
61    void onDrawBitmap(const SkBitmap&, SkScalar, SkScalar, const SkPaint*) override {}
62    void onDrawBitmapRect(const SkBitmap&, const SkRect*, const SkRect&, const SkPaint*,
63                          SrcRectConstraint) override {}
64    void onDrawImage(const SkImage*, SkScalar, SkScalar, const SkPaint*) override {}
65    void onDrawImageRect(const SkImage*, const SkRect*, const SkRect&, const SkPaint*,
66                         SrcRectConstraint) override {}
67    void onDrawImageNine(const SkImage*, const SkIRect&, const SkRect&, const SkPaint*) override {}
68    void onDrawBitmapNine(const SkBitmap&, const SkIRect&, const SkRect&,
69                          const SkPaint*) override {}
70    void onDrawImageLattice(const SkImage*, const Lattice&, const SkRect&,
71                            const SkPaint*) override {}
72    void onDrawBitmapLattice(const SkBitmap&, const Lattice&, const SkRect&,
73                             const SkPaint*) override {}
74    void onDrawVerticesObject(const SkVertices*, SkBlendMode, const SkPaint&) override {}
75    void onDrawAtlas(const SkImage*, const SkRSXform[], const SkRect[], const SkColor[],
76                     int, SkBlendMode, const SkRect*, const SkPaint*) override {}
77
78private:
79    typedef SkCanvas INHERITED;
80};
81
82#endif // SkNoDrawCanvas_DEFINED
83