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