/* * 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) const; bool isHierarchyPush(int index) const; bool isHierarchyPop(int index) const; // 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 fOps; int fCurOp; // The current op the rendering state is at SkBitmap fBM; };