1 /* 2 * Copyright 2011 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #include "gm.h" 9 #include "SkCanvas.h" 10 #include "SkPath.h" 11 #include "SkSurface.h" 12 #include "SkPicture.h" 13 14 static void draw_content(SkCanvas* canvas) { 15 SkImageInfo info = canvas->imageInfo(); 16 SkPaint paint; 17 paint.setAntiAlias(true); 18 canvas->drawCircle(SkScalarHalf(info.width()), SkScalarHalf(info.height()), 19 SkScalarHalf(info.width()), paint); 20 } 21 22 class PeekPixelsGM : public skiagm::GM { 23 public: 24 PeekPixelsGM() {} 25 26 protected: 27 virtual SkString onShortName() SK_OVERRIDE { 28 return SkString("peekpixels"); 29 } 30 31 virtual SkISize onISize() SK_OVERRIDE { 32 return SkISize::Make(360, 120); 33 } 34 35 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { 36 SkImageInfo info = SkImageInfo::MakeN32Premul(100, 100); 37 SkAutoTUnref<SkSurface> surface(canvas->newSurface(info)); 38 if (surface.get()) { 39 SkCanvas* surfCanvas = surface->getCanvas(); 40 41 draw_content(surfCanvas); 42 SkBitmap bitmap; 43 44 // test peekPixels 45 { 46 SkImageInfo info; 47 size_t rowBytes; 48 const void* addr = surfCanvas->peekPixels(&info, &rowBytes); 49 if (addr && bitmap.installPixels(info, const_cast<void*>(addr), rowBytes)) { 50 canvas->drawBitmap(bitmap, 0, 0, NULL); 51 } 52 } 53 54 // test ROCanvasPixels 55 canvas->translate(120, 0); 56 SkAutoROCanvasPixels ropixels(surfCanvas); 57 if (ropixels.asROBitmap(&bitmap)) { 58 canvas->drawBitmap(bitmap, 0, 0, NULL); 59 } 60 61 // test Surface 62 canvas->translate(120, 0); 63 surface->draw(canvas, 0, 0, NULL); 64 } 65 } 66 67 virtual uint32_t onGetFlags() const { 68 // we explicitly test peekPixels and readPixels, neither of which 69 // return something for a picture-backed canvas, so we skip that test. 70 return kSkipPicture_Flag; 71 } 72 73 private: 74 typedef skiagm::GM INHERITED; 75 }; 76 77 DEF_GM( return SkNEW(PeekPixelsGM); ) 78