add SkImage::newSurface
BUG=skia:
Review URL: https://codereview.chromium.org/741763002
diff --git a/gm/surface.cpp b/gm/surface.cpp
index dbcced2..f84c5ab 100644
--- a/gm/surface.cpp
+++ b/gm/surface.cpp
@@ -105,5 +105,55 @@
private:
typedef GM INHERITED;
};
-
DEF_GM( return new SurfacePropsGM )
+
+#ifdef SK_DEBUG
+static bool equal(const SkSurfaceProps& a, const SkSurfaceProps& b) {
+ return a.flags() == b.flags() && a.pixelGeometry() == b.pixelGeometry();
+}
+#endif
+
+class NewSurfaceGM : public skiagm::GM {
+public:
+ NewSurfaceGM() {}
+
+protected:
+ SkString onShortName() SK_OVERRIDE {
+ return SkString("surfacenew");
+ }
+
+ virtual SkISize onISize() SK_OVERRIDE {
+ return SkISize::Make(300, 140);
+ }
+
+ static void drawInto(SkCanvas* canvas) {
+ canvas->drawColor(SK_ColorRED);
+ }
+
+ virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
+ SkImageInfo info = SkImageInfo::MakeN32Premul(100, 100);
+
+ SkAutoTUnref<SkSurface> surf(canvas->newSurface(info, NULL));
+ if (!surf.get()) {
+ surf.reset(SkSurface::NewRaster(info));
+ }
+ drawInto(surf->getCanvas());
+
+ SkAutoTUnref<SkImage> image(surf->newImageSnapshot());
+ canvas->drawImage(image, 10, 10, NULL);
+
+ SkAutoTUnref<SkSurface> surf2(image->newSurface(info, NULL));
+ drawInto(surf2->getCanvas());
+
+ // Assert that the props were communicated transitively through the first image
+ SkASSERT(equal(surf->props(), surf2->props()));
+
+ SkAutoTUnref<SkImage> image2(surf2->newImageSnapshot());
+ canvas->drawImage(image2, 10 + SkIntToScalar(image->width()) + 10, 10, NULL);
+ }
+
+private:
+ typedef GM INHERITED;
+};
+DEF_GM( return new NewSurfaceGM )
+