SkDebugCanvas.h revision 370a89980b2d38a6d01903b484bf404d6c48b496
11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/*
31d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright 2012 Google Inc.
41d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert *
51d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Use of this source code is governed by a BSD-style license that can be
61d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * found in the LICENSE file.
71d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */
81d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
91d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert#ifndef SKDEBUGCANVAS_H_
111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert#define SKDEBUGCANVAS_H_
121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert#include "SkCanvas.h"
141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert#include "SkDrawCommand.h"
151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert#include "SkPicture.h"
161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert#include "SkTArray.h"
171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert#include "SkString.h"
181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertclass SkTexOverrideFilter;
201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertclass SK_API SkDebugCanvas : public SkCanvas {
221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic:
231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    SkDebugCanvas(int width, int height);
241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    virtual ~SkDebugCanvas();
251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    void toggleFilter(bool toggle);
271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    /**
29cc4666fc64939f1a9a56a0cb5eb8a237942c5243Jeff Hamilton     * Enable or disable overdraw visualization
301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert     */
311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    void setOverdrawViz(bool overdrawViz) { fOverdrawViz = overdrawViz; }
321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    /**
341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert     * Enable or disable texure filtering override
351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert     */
361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    void overrideTexFiltering(bool overrideTexFiltering, SkPaint::FilterLevel level);
371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    /**
391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        Executes all draw calls to the canvas.
401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        @param canvas  The canvas being drawn to
411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert     */
421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    void draw(SkCanvas* canvas);
43cc4666fc64939f1a9a56a0cb5eb8a237942c5243Jeff Hamilton
441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    /**
451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        Executes the draw calls up to the specified index.
461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        @param canvas  The canvas being drawn to
471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        @param index  The index of the final command being executed
481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert     */
491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    void drawTo(SkCanvas* canvas, int index);
501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    /**
521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        Returns the most recently calculated transformation matrix
531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert     */
541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    const SkMatrix& getCurrentMatrix() {
551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        return fMatrix;
561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    /**
591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        Returns the most recently calculated clip
601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert     */
611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    const SkIRect& getCurrentClip() {
621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        return fClip;
631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    /**
661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        Returns the index of the last draw command to write to the pixel at (x,y)
671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert     */
681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    int getCommandAtPoint(int x, int y, int index);
691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    /**
711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        Removes the command at the specified index
721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        @param index  The index of the command to delete
731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert     */
741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    void deleteDrawCommandAt(int index);
751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    /**
771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        Returns the draw command at the given index.
781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        @param index  The index of the command
791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert     */
801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    SkDrawCommand* getDrawCommandAt(int index);
811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    /**
831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        Sets the draw command for a given index.
841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        @param index  The index to overwrite
851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        @param command The new command
861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert     */
871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    void setDrawCommandAt(int index, SkDrawCommand* command);
881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    /**
901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        Returns information about the command at the given index.
911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        @param index  The index of the command
921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert     */
931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    SkTDArray<SkString*>* getCommandInfo(int index);
941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    /**
961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        Returns the visibility of the command at the given index.
971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        @param index  The index of the command
981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert     */
991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    bool getDrawCommandVisibilityAt(int index);
1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    /**
1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        Returns the vector of draw commands
1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert     */
1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    SK_ATTR_DEPRECATED("please use getDrawCommandAt and getSize instead")
1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    const SkTDArray<SkDrawCommand*>& getDrawCommands() const;
1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    /**
1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        Returns the vector of draw commands. Do not use this entry
1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        point - it is going away!
1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert     */
1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    SkTDArray<SkDrawCommand*>& getDrawCommands();
1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    /**
1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert     * Returns the string vector of draw commands
1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert     */
1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    SkTArray<SkString>* getDrawCommandsAsStrings() const;
1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    /**
1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        Returns length of draw command vector.
1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert     */
1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    int getSize() const {
1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        return fCommandVector.count();
1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    /**
1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        Toggles the visibility / execution of the draw command at index i with
1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        the value of toggle.
1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert     */
1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    void toggleCommand(int index, bool toggle);
1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    void setBounds(int width, int height) {
1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        fWidth = width;
1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        fHeight = height;
1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    void setUserMatrix(SkMatrix matrix) {
1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        fUserMatrix = matrix;
1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert////////////////////////////////////////////////////////////////////////////////
1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert// Inherited from SkCanvas
1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert////////////////////////////////////////////////////////////////////////////////
1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    virtual void clear(SkColor) SK_OVERRIDE;
1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    virtual bool concat(const SkMatrix& matrix) SK_OVERRIDE;
1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    virtual void drawBitmap(const SkBitmap&, SkScalar left, SkScalar top,
1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                            const SkPaint*) SK_OVERRIDE;
1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    virtual void drawBitmapRectToRect(const SkBitmap&, const SkRect* src,
1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                                      const SkRect& dst, const SkPaint* paint,
1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                                      DrawBitmapRectFlags flags) SK_OVERRIDE;
1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    virtual void drawBitmapMatrix(const SkBitmap&, const SkMatrix&,
1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                                  const SkPaint*) SK_OVERRIDE;
1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    virtual void drawBitmapNine(const SkBitmap& bitmap, const SkIRect& center,
1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                                const SkRect& dst, const SkPaint*) SK_OVERRIDE;
1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    virtual void drawData(const void*, size_t) SK_OVERRIDE;
1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    virtual void beginCommentGroup(const char* description) SK_OVERRIDE;
1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    virtual void addComment(const char* kywd, const char* value) SK_OVERRIDE;
1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    virtual void endCommentGroup() SK_OVERRIDE;
1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    virtual void drawOval(const SkRect& oval, const SkPaint&) SK_OVERRIDE;
1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    virtual void drawPaint(const SkPaint& paint) SK_OVERRIDE;
1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    virtual void drawPath(const SkPath& path, const SkPaint&) SK_OVERRIDE;
1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    virtual void drawPicture(SkPicture& picture) SK_OVERRIDE;
1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    virtual void drawPoints(PointMode, size_t count, const SkPoint pts[],
1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                            const SkPaint&) SK_OVERRIDE;
1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    virtual void drawPosText(const void* text, size_t byteLength,
1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                             const SkPoint pos[], const SkPaint&) SK_OVERRIDE;
1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    virtual void drawPosTextH(const void* text, size_t byteLength,
1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                              const SkScalar xpos[], SkScalar constY,
1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                              const SkPaint&) SK_OVERRIDE;
1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    virtual void drawRect(const SkRect& rect, const SkPaint&) SK_OVERRIDE;
1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    virtual void drawRRect(const SkRRect& rrect, const SkPaint& paint) SK_OVERRIDE;
1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    virtual void drawSprite(const SkBitmap&, int left, int top,
1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                            const SkPaint*) SK_OVERRIDE;
1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    virtual void drawText(const void* text, size_t byteLength, SkScalar x,
1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                          SkScalar y, const SkPaint&) SK_OVERRIDE;
1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    virtual void drawTextOnPath(const void* text, size_t byteLength,
1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                                const SkPath& path, const SkMatrix* matrix,
1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                                const SkPaint&) SK_OVERRIDE;
2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    virtual void drawVertices(VertexMode, int vertexCount,
2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                              const SkPoint vertices[], const SkPoint texs[],
2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                              const SkColor colors[], SkXfermode*,
2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                              const uint16_t indices[], int indexCount,
2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                              const SkPaint&) SK_OVERRIDE;
2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    virtual void restore() SK_OVERRIDE;
2081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    virtual bool rotate(SkScalar degrees) SK_OVERRIDE;
2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    virtual int save(SaveFlags) SK_OVERRIDE;
2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    virtual int saveLayer(const SkRect* bounds, const SkPaint*, SaveFlags) SK_OVERRIDE;
2141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    virtual bool scale(SkScalar sx, SkScalar sy) SK_OVERRIDE;
2161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    virtual void setMatrix(const SkMatrix& matrix) SK_OVERRIDE;
2181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    virtual bool skew(SkScalar sx, SkScalar sy) SK_OVERRIDE;
2201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    virtual bool translate(SkScalar dx, SkScalar dy) SK_OVERRIDE;
2221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    static const int kVizImageHeight = 256;
2241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    static const int kVizImageWidth = 256;
2251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    virtual bool isClipEmpty() const SK_OVERRIDE { return false; }
2271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    virtual ClipType getClipType() const SK_OVERRIDE {
2281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        return kRect_ClipType;
2291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
2301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    virtual bool getClipBounds(SkRect* bounds) const SK_OVERRIDE {
2311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        if (NULL != bounds) {
2321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            bounds->setXYWH(0, 0,
2331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                            SkIntToScalar(this->imageInfo().fWidth),
2341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                            SkIntToScalar(this->imageInfo().fHeight));
2351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        }
2361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        return true;
2371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
2381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    virtual bool getClipDeviceBounds(SkIRect* bounds) const SK_OVERRIDE {
2391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        if (NULL != bounds) {
2401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            bounds->setLargest();
2411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        }
2421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        return true;
2431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
2441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertprotected:
2461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    virtual void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) SK_OVERRIDE;
2471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    virtual void onPushCull(const SkRect& cullRect) SK_OVERRIDE;
2481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    virtual void onPopCull() SK_OVERRIDE;
2491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    virtual void onClipRect(const SkRect&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
2511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    virtual void onClipRRect(const SkRRect&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
2521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    virtual void onClipPath(const SkPath&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
2531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    virtual void onClipRegion(const SkRegion& region, SkRegion::Op) SK_OVERRIDE;
2541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertprivate:
2561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    SkTDArray<SkDrawCommand*> fCommandVector;
2571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    int fWidth;
2581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    int fHeight;
2591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    bool fFilter;
2601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    int fIndex;
2611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    SkMatrix fUserMatrix;
2621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    SkMatrix fMatrix;
2631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    SkIRect fClip;
2641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    bool fOverdrawViz;
2661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    SkDrawFilter* fOverdrawFilter;
2671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    bool fOverrideTexFiltering;
2691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    SkTexOverrideFilter* fTexOverrideFilter;
2701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    /**
2721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        Number of unmatched save() calls at any point during a draw.
2731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        If there are any saveLayer() calls outstanding, we need to resolve
2741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        all of them, which in practice means resolving all save() calls,
2751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        to avoid corruption of our canvas.
2761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    */
2771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    int fOutstandingSaveCount;
2781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    /**
2801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        Adds the command to the classes vector of commands.
2811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        @param command  The draw command for execution
2821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert     */
2831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    void addDrawCommand(SkDrawCommand* command);
2841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    /**
2861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        Applies any panning and zooming the user has specified before
2871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        drawing anything else into the canvas.
2881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert     */
2891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    void applyUserTransform(SkCanvas* canvas);
2901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    typedef SkCanvas INHERITED;
2921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert};
2931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert#endif
2951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert