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