skia2/debugger/SkDebugger.h
kkinnunen 26e5400de4 Remove draw window size state from SkDebugCanvas
The SkDebugCanvas can be (or is currently) being used to draw to multiple
different canvases. If this use-case is intended, then storing draw
-related state in the canvas causes bugs.

Remove draw window size state form SkDebugCanvas. Instead, use the canvas
base layer size as the window size to clip to. This is consistent with
the current use in debugger.

This is part of work trying to remove bugs in debugger that result from
replaying one SkDrawCanvas to two different canvases. Currently the
SkDrawCanvas stores state that can only be valid if it is used for one
canvas.

Review URL: https://codereview.chromium.org/835113002
2015-01-05 12:58:56 -08:00

134 lines
2.9 KiB
C++

/*
* 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);
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 NULL == fPicture ? SkRect::MakeEmpty() : fPicture->cullRect();
}
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, SkPaint::FilterLevel level) {
if (fDebugCanvas) {
fDebugCanvas->overrideTexFiltering(texFilterOverride, level);
}
}
void getOverviewText(const SkTDArray<double>* typeTimes, double totTime,
SkString* overview, int numRuns);
void getClipStackText(SkString* clipStack);
private:
SkDebugCanvas* fDebugCanvas;
SkPicture* fPicture;
int fIndex;
};
#endif /* SKDEBUGGER_H_ */