| |
| /* |
| * Copyright 2012 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| |
| #ifndef SKDEBUGGER_H_ |
| #define SKDEBUGGER_H_ |
| |
| #include "SkDebugCanvas.h" |
| #include "SkPicture.h" |
| #include "SkTArray.h" |
| |
| class SkString; |
| |
| class SkDebugger { |
| public: |
| SkDebugger(); |
| |
| ~SkDebugger(); |
| |
| void setIndex(int index) { |
| fIndex = index; |
| } |
| void draw(SkCanvas* canvas) { |
| if (fIndex >= 0) { |
| fDebugCanvas->drawTo(canvas, fIndex); |
| } |
| } |
| |
| void step(); |
| void stepBack(); |
| void play(); |
| void rewind(); |
| |
| bool isCommandVisible(int index) { |
| return fDebugCanvas->getDrawCommandVisibilityAt(index); |
| } |
| |
| void setCommandVisible(int index, bool isVisible) { |
| fDebugCanvas->toggleCommand(index, isVisible); |
| } |
| |
| SkDrawCommand* getDrawCommandAt(int index) { |
| return fDebugCanvas->getDrawCommandAt(index); |
| } |
| |
| const SkTDArray<SkDrawCommand*>& getDrawCommands() const { |
| return fDebugCanvas->getDrawCommands(); |
| } |
| |
| void highlightCurrentCommand(bool on) { |
| fDebugCanvas->toggleFilter(on); |
| } |
| |
| void loadPicture(SkPicture* picture); |
| |
| sk_sp<SkPicture> copyPicture(); |
| |
| int getSize() const { |
| return fDebugCanvas->getSize(); |
| } |
| |
| void setUserMatrix(SkMatrix userMatrix) { |
| // Should this live in debugger instead? |
| fDebugCanvas->setUserMatrix(userMatrix); |
| } |
| |
| int getCommandAtPoint(int x, int y, int index) { |
| return fDebugCanvas->getCommandAtPoint(x, y, index); |
| } |
| |
| const SkTDArray<SkString*>* getCommandInfo(int index) const { |
| return fDebugCanvas->getCommandInfo(index); |
| } |
| |
| const SkMatrix& getCurrentMatrix() { |
| return fDebugCanvas->getCurrentMatrix(); |
| } |
| |
| const SkIRect& getCurrentClip() { |
| return fDebugCanvas->getCurrentClip(); |
| } |
| |
| SkRect pictureCull() const { |
| return fPicture ? fPicture->cullRect() : SkRect::MakeEmpty(); |
| } |
| |
| int index() { |
| return fIndex; |
| } |
| |
| void setOverdrawViz(bool overDrawViz) { |
| if (fDebugCanvas) { |
| fDebugCanvas->setOverdrawViz(overDrawViz); |
| } |
| } |
| |
| void setPathOps(bool pathOps) { |
| if (fDebugCanvas) { |
| fDebugCanvas->setAllowSimplifyClip(pathOps); |
| } |
| } |
| |
| void setMegaViz(bool megaViz) { |
| if (fDebugCanvas) { |
| fDebugCanvas->setMegaVizMode(megaViz); |
| } |
| } |
| |
| void setTexFilterOverride(bool texFilterOverride, SkFilterQuality quality) { |
| if (fDebugCanvas) { |
| fDebugCanvas->overrideTexFiltering(texFilterOverride, quality); |
| } |
| } |
| |
| void getOverviewText(const SkTDArray<double>* typeTimes, double totTime, |
| SkString* overview, int numRuns); |
| |
| void getClipStackText(SkString* clipStack); |
| |
| private: |
| std::unique_ptr<SkDebugCanvas> fDebugCanvas; |
| sk_sp<SkPicture> fPicture; |
| |
| int fIndex; |
| }; |
| |
| |
| #endif /* SKDEBUGGER_H_ */ |