/*
* 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_ */