aboutsummaryrefslogtreecommitdiffhomepage
path: root/gm
diff options
context:
space:
mode:
authorGravatar reed@android.com <reed@android.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2009-06-10 15:38:48 +0000
committerGravatar reed@android.com <reed@android.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2009-06-10 15:38:48 +0000
commit00dae86f5872b60927b28a32b375bc01cd7c61c9 (patch)
tree4902e09c48c0cf17eab3cf3f64a68acdd0f3c8af /gm
parent199f108f14a5f60a9c2205ffa79b26102a206ad0 (diff)
checkpoint for golden master suite (gm)
git-svn-id: http://skia.googlecode.com/svn/trunk@208 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'gm')
-rw-r--r--gm/gm.h24
-rw-r--r--gm/gmmain.cpp86
2 files changed, 110 insertions, 0 deletions
diff --git a/gm/gm.h b/gm/gm.h
new file mode 100644
index 0000000000..1ad72407d1
--- /dev/null
+++ b/gm/gm.h
@@ -0,0 +1,24 @@
+#ifndef skiagm_DEFINED
+#define skiagm_DEFINED
+
+#include "SkRefCnt.h"
+#include "SkString.h"
+#include "SkTRegistry.h"
+
+namespace skiagm {
+
+ class GM {
+ public:
+ GM();
+ virtual ~GM();
+
+ void draw(SkCanvas*);
+
+ protected:
+ virtual void onDraw(SkCanvas*) {}
+ };
+
+ typedef SkTRegistry<GM*, void*> GMRegistry;
+}
+
+#endif
diff --git a/gm/gmmain.cpp b/gm/gmmain.cpp
new file mode 100644
index 0000000000..22341882ac
--- /dev/null
+++ b/gm/gmmain.cpp
@@ -0,0 +1,86 @@
+#include "SkGraphics.h"
+#include "gm.h"
+
+using namespace skiagm;
+
+// need to explicitly declare this, or we get some weird infinite loop llist
+template GMRegistry* GMRegistry::gHead;
+
+class Iter {
+public:
+ Iter() {
+ fReg = TestRegistry::Head();
+ }
+
+ Test* next() {
+ if (fReg) {
+ TestRegistry::Factory fact = fReg->factory();
+ fReg = fReg->next();
+ return fact();
+ }
+ return NULL;
+ }
+
+ static int Count() {
+ const TestRegistry* reg = TestRegistry::Head();
+ int count = 0;
+ while (reg) {
+ count += 1;
+ reg = reg->next();
+ }
+ return count;
+ }
+
+private:
+ const GMRegistry* fReg;
+};
+
+class SkAutoGraphics {
+public:
+ SkAutoGraphics() {
+ SkGraphics::Init();
+ }
+ ~SkAutoGraphics() {
+ SkGraphics::Term();
+ }
+};
+
+static const struct {
+ SkBitmap::Config fConfig;
+ bool fUsePicture;
+ const char* fName;
+} gRec[] = {
+ { SkBitmap::kARGB_8888_Config, false, "8888" },
+ { SkBitmap::kARGB_4444_Config, false, "4444" },
+ { SkBitmap::kRGB_565_Config, false, "565" },
+ { SkBitmap::kA8_Config, false, "A8" },
+};
+
+int main (int argc, char * const argv[]) {
+ SkAutoGraphics ag;
+
+ Iter iter;
+ GM* gm;
+
+ while ((gm = iter.next()) != NULL) {
+ SkISize size = gm->getISize();
+ SkBitmap bitmap;
+ for (size_t i = 0; i < SK_ARRAY_COUNT(gConfigs); i++) {
+ bitmap.setConfig(gRec[i].fConfig, size.width(), size.height());
+ bitmap.allocPixels();
+ bitmap.eraseColor(0);
+ SkCanvas canvas(bitmap);
+
+ gm->draw(&canvas);
+
+ if (gRec[i].fUsePicture) {
+ SkPicture picture;
+ gm->draw(picture.beginRecording(size.width(), size.height(), 0));
+ canvas.drawPicture(picture);
+ } else {
+ }
+ }
+ SkDELETE(gm);
+ }
+ return 0;
+}