From 4af267b11964d4a8acdb232ac46094c84d890e88 Mon Sep 17 00:00:00 2001 From: reed Date: Fri, 21 Nov 2014 08:46:37 -0800 Subject: add SkImage::newSurface BUG=skia: Review URL: https://codereview.chromium.org/741763002 --- gm/surface.cpp | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) (limited to 'gm/surface.cpp') 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 surf(canvas->newSurface(info, NULL)); + if (!surf.get()) { + surf.reset(SkSurface::NewRaster(info)); + } + drawInto(surf->getCanvas()); + + SkAutoTUnref image(surf->newImageSnapshot()); + canvas->drawImage(image, 10, 10, NULL); + + SkAutoTUnref 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 image2(surf2->newImageSnapshot()); + canvas->drawImage(image2, 10 + SkIntToScalar(image->width()) + 10, 10, NULL); + } + +private: + typedef GM INHERITED; +}; +DEF_GM( return new NewSurfaceGM ) + -- cgit v1.2.3