diff options
Diffstat (limited to 'tools/mdbviz/Model.h')
-rw-r--r-- | tools/mdbviz/Model.h | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/tools/mdbviz/Model.h b/tools/mdbviz/Model.h new file mode 100644 index 0000000000..773c148c3f --- /dev/null +++ b/tools/mdbviz/Model.h @@ -0,0 +1,54 @@ +/* + * Copyright 2017 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "SkBitmap.h" +#include "SkTDArray.h" + +class SkDrawCommand; + +// This class encapsulates the both the in-memory representation of the draw ops +// and the state of Skia/Ganesh's rendering. It should never have any Qt intrusions. +class Model { +public: + enum class ErrorCode { + kOK, + kCouldntOpenFile, + kCouldntDecodeSKP + }; + + Model(); + ~Model(); + + static const char* ErrorString(ErrorCode); + + // Replace the list of draw ops by reading the provided skp filename and + // reset the Skia draw state. It is up to the view portion to update itself + // after this call (i.e., rebuild the opList view). + ErrorCode load(const char* filename); + + // Update the rendering state to the provided op + void setCurOp(int curOp); + int curOp() const { return fCurOp; } + + int numOps() const { return fOps.count(); } + const char* getOpName(int index); + + // Get the bits visually representing the current rendering state + void* getPixels() const { return fBM.getPixels(); } + int width() const { return fBM.width(); } + int height() const { return fBM.height(); } + +protected: + // draw the ops up to (and including) the index-th op + void drawTo(int index); + void resetOpList(); + +private: + SkTDArray<SkDrawCommand*> fOps; + int fCurOp; // The current op the rendering state is at + SkBitmap fBM; +}; |