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
316a280a50eddc30c6b2a090d9e8e7df78afe7a457Adrienne Walker    // Optimization to reset state to be the same as after construction.
326a280a50eddc30c6b2a090d9e8e7df78afe7a457Adrienne Walker    void resetCanvas(int width, int height) {
336a280a50eddc30c6b2a090d9e8e7df78afe7a457Adrienne Walker        resetForNextPicture(SkIRect::MakeWH(width, height));
346a280a50eddc30c6b2a090d9e8e7df78afe7a457Adrienne Walker    }
356a280a50eddc30c6b2a090d9e8e7df78afe7a457Adrienne Walker
36ee424acbb87bf999be132a437527e656e37541d7Florin Malitaprotected:
37ee424acbb87bf999be132a437527e656e37541d7Florin Malita    SaveLayerStrategy getSaveLayerStrategy(const SaveLayerRec& rec) override;
38ee424acbb87bf999be132a437527e656e37541d7Florin Malita
39d8c278af51f0e5b3f98f66320acb827310b50e2cFlorin Malita    // No-op overrides for aborting rasterization earlier than SkNullBlitter.
40d8c278af51f0e5b3f98f66320acb827310b50e2cFlorin Malita    void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) override {}
41d8c278af51f0e5b3f98f66320acb827310b50e2cFlorin Malita    void onDrawDrawable(SkDrawable*, const SkMatrix*) override {}
42d8c278af51f0e5b3f98f66320acb827310b50e2cFlorin Malita    void onDrawText(const void*, size_t, SkScalar, SkScalar, const SkPaint&) override {}
43d8c278af51f0e5b3f98f66320acb827310b50e2cFlorin Malita    void onDrawPosText(const void*, size_t, const SkPoint[], const SkPaint&) override {}
44d8c278af51f0e5b3f98f66320acb827310b50e2cFlorin Malita    void onDrawPosTextH(const void*, size_t, const SkScalar[], SkScalar, const SkPaint&) override {}
45d8c278af51f0e5b3f98f66320acb827310b50e2cFlorin Malita    void onDrawTextOnPath(const void*, size_t, const SkPath&, const SkMatrix*,
46d8c278af51f0e5b3f98f66320acb827310b50e2cFlorin Malita                          const SkPaint&) override {}
47d8c278af51f0e5b3f98f66320acb827310b50e2cFlorin Malita    void onDrawTextRSXform(const void*, size_t, const SkRSXform[], const SkRect*,
48d8c278af51f0e5b3f98f66320acb827310b50e2cFlorin Malita                           const SkPaint&) override {}
49d8c278af51f0e5b3f98f66320acb827310b50e2cFlorin Malita    void onDrawTextBlob(const SkTextBlob*, SkScalar, SkScalar, const SkPaint&) override {}
50d8c278af51f0e5b3f98f66320acb827310b50e2cFlorin Malita    void onDrawPatch(const SkPoint[12], const SkColor[4], const SkPoint[4], SkBlendMode,
51d8c278af51f0e5b3f98f66320acb827310b50e2cFlorin Malita                     const SkPaint&) override {}
52d8c278af51f0e5b3f98f66320acb827310b50e2cFlorin Malita
53d8c278af51f0e5b3f98f66320acb827310b50e2cFlorin Malita    void onDrawPaint(const SkPaint&) override {}
54d8c278af51f0e5b3f98f66320acb827310b50e2cFlorin Malita    void onDrawPoints(PointMode, size_t, const SkPoint[], const SkPaint&) override {}
55d8c278af51f0e5b3f98f66320acb827310b50e2cFlorin Malita    void onDrawRect(const SkRect&, const SkPaint&) override {}
56d8c278af51f0e5b3f98f66320acb827310b50e2cFlorin Malita    void onDrawRegion(const SkRegion&, const SkPaint&) override {}
57d8c278af51f0e5b3f98f66320acb827310b50e2cFlorin Malita    void onDrawOval(const SkRect&, const SkPaint&) override {}
58d8c278af51f0e5b3f98f66320acb827310b50e2cFlorin Malita    void onDrawArc(const SkRect&, SkScalar, SkScalar, bool, const SkPaint&) override {}
59d8c278af51f0e5b3f98f66320acb827310b50e2cFlorin Malita    void onDrawRRect(const SkRRect&, const SkPaint&) override {}
60d8c278af51f0e5b3f98f66320acb827310b50e2cFlorin Malita    void onDrawPath(const SkPath&, const SkPaint&) override {}
61d8c278af51f0e5b3f98f66320acb827310b50e2cFlorin Malita    void onDrawBitmap(const SkBitmap&, SkScalar, SkScalar, const SkPaint*) override {}
62d8c278af51f0e5b3f98f66320acb827310b50e2cFlorin Malita    void onDrawBitmapRect(const SkBitmap&, const SkRect*, const SkRect&, const SkPaint*,
63d8c278af51f0e5b3f98f66320acb827310b50e2cFlorin Malita                          SrcRectConstraint) override {}
64d8c278af51f0e5b3f98f66320acb827310b50e2cFlorin Malita    void onDrawImage(const SkImage*, SkScalar, SkScalar, const SkPaint*) override {}
65d8c278af51f0e5b3f98f66320acb827310b50e2cFlorin Malita    void onDrawImageRect(const SkImage*, const SkRect*, const SkRect&, const SkPaint*,
66d8c278af51f0e5b3f98f66320acb827310b50e2cFlorin Malita                         SrcRectConstraint) override {}
67d8c278af51f0e5b3f98f66320acb827310b50e2cFlorin Malita    void onDrawImageNine(const SkImage*, const SkIRect&, const SkRect&, const SkPaint*) override {}
68d8c278af51f0e5b3f98f66320acb827310b50e2cFlorin Malita    void onDrawBitmapNine(const SkBitmap&, const SkIRect&, const SkRect&,
69d8c278af51f0e5b3f98f66320acb827310b50e2cFlorin Malita                          const SkPaint*) override {}
70d8c278af51f0e5b3f98f66320acb827310b50e2cFlorin Malita    void onDrawImageLattice(const SkImage*, const Lattice&, const SkRect&,
71d8c278af51f0e5b3f98f66320acb827310b50e2cFlorin Malita                            const SkPaint*) override {}
72d8c278af51f0e5b3f98f66320acb827310b50e2cFlorin Malita    void onDrawBitmapLattice(const SkBitmap&, const Lattice&, const SkRect&,
73d8c278af51f0e5b3f98f66320acb827310b50e2cFlorin Malita                             const SkPaint*) override {}
74e88a1cb20e6b4c9f099070112225a88693a4630bMike Reed    void onDrawVerticesObject(const SkVertices*, SkBlendMode, const SkPaint&) override {}
75d8c278af51f0e5b3f98f66320acb827310b50e2cFlorin Malita    void onDrawAtlas(const SkImage*, const SkRSXform[], const SkRect[], const SkColor[],
76d8c278af51f0e5b3f98f66320acb827310b50e2cFlorin Malita                     int, SkBlendMode, const SkRect*, const SkPaint*) override {}
77d8c278af51f0e5b3f98f66320acb827310b50e2cFlorin Malita
78ee424acbb87bf999be132a437527e656e37541d7Florin Malitaprivate:
79ee424acbb87bf999be132a437527e656e37541d7Florin Malita    typedef SkCanvas INHERITED;
80ee424acbb87bf999be132a437527e656e37541d7Florin Malita};
81ee424acbb87bf999be132a437527e656e37541d7Florin Malita
824b7b6f0229fa51f5beb71f92cb77ba84d39b41e1Florin Malita#endif // SkNoDrawCanvas_DEFINED
83