aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/mdbviz/Model.h
diff options
context:
space:
mode:
Diffstat (limited to 'tools/mdbviz/Model.h')
-rw-r--r--tools/mdbviz/Model.h54
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;
+};