1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/*
2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2016 Google Inc.
3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot *
4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be
5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file.
6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */
7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#ifndef SkOverdrawCanvas_DEFINED
9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define SkOverdrawCanvas_DEFINED
10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkNWayCanvas.h"
12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/**
14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot *  Captures all drawing commands.  Rather than draw the actual content, this device
15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot *  increments the alpha channel of each pixel every time it would have been touched
16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot *  by a draw call.  This is useful for detecting overdraw.
17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */
18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SK_API SkOverdrawCanvas : public SkNWayCanvas {
19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic:
20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /* Does not take ownership of canvas */
21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkOverdrawCanvas(SkCanvas*);
22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawText(const void*, size_t, SkScalar, SkScalar, const SkPaint&) override;
24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawPosText(const void*, size_t, const SkPoint[], const SkPaint&) override;
25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawPosTextH(const void*, size_t, const SkScalar[], SkScalar, const SkPaint&) override;
26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawTextOnPath(const void*, size_t, const SkPath&, const SkMatrix*,
27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                          const SkPaint&) override;
28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawTextRSXform(const void*, size_t, const SkRSXform[], const SkRect*,
29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                           const SkPaint&) override;
30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawTextBlob(const SkTextBlob*, SkScalar, SkScalar, const SkPaint&) override;
31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawPatch(const SkPoint[12], const SkColor[4], const SkPoint[4], SkBlendMode,
32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                     const SkPaint&) override;
33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawPaint(const SkPaint&) override;
34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawRect(const SkRect&, const SkPaint&) override;
35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawRegion(const SkRegion&, const SkPaint&) override;
36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawOval(const SkRect&, const SkPaint&) override;
37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawArc(const SkRect&, SkScalar, SkScalar, bool, const SkPaint&) override;
38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) override;
39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawRRect(const SkRRect&, const SkPaint&) override;
40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawPoints(PointMode, size_t, const SkPoint[], const SkPaint&) override;
41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawVerticesObject(const SkVertices*, SkBlendMode, const SkPaint&) override;
42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawAtlas(const SkImage*, const SkRSXform[], const SkRect[], const SkColor[],
43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                     int, SkBlendMode, const SkRect*, const SkPaint*) override;
44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawPath(const SkPath&, const SkPaint&) override;
45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawImage(const SkImage*, SkScalar, SkScalar, const SkPaint*) override;
46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawImageRect(const SkImage*, const SkRect*, const SkRect&, const SkPaint*,
47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                         SrcRectConstraint) override;
48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawImageNine(const SkImage*, const SkIRect&, const SkRect&, const SkPaint*) override;
49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawImageLattice(const SkImage*, const Lattice&, const SkRect&, const SkPaint*) override;
50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawBitmap(const SkBitmap&, SkScalar, SkScalar, const SkPaint*) override;
51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawBitmapRect(const SkBitmap&, const SkRect*, const SkRect&, const SkPaint*,
52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                          SrcRectConstraint) override;
53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawBitmapNine(const SkBitmap&, const SkIRect&, const SkRect&, const SkPaint*) override;
54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawBitmapLattice(const SkBitmap&, const Lattice&, const SkRect&,
55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                             const SkPaint*) override;
56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawDrawable(SkDrawable*, const SkMatrix*) override;
57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawPicture(const SkPicture*, const SkMatrix*, const SkPaint*) override;
58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate:
60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void drawPosTextCommon(const void*, size_t, const SkScalar[], int, const SkPoint&,
61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                           const SkPaint&);
62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    inline SkPaint overdrawPaint(const SkPaint& paint);
64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkPaint   fPaint;
66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    typedef SkNWayCanvas INHERITED;
68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot};
69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
70fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif
71