diff options
Diffstat (limited to 'gm/surface.cpp')
-rw-r--r-- | gm/surface.cpp | 52 |
1 files changed, 51 insertions, 1 deletions
diff --git a/gm/surface.cpp b/gm/surface.cpp index dbcced2cbf..f84c5ab7e7 100644 --- a/gm/surface.cpp +++ b/gm/surface.cpp @@ -105,5 +105,55 @@ protected: 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 ) + |