peekpixels.cpp revision 5d0b150257f9a630154a39ab6aa5cffc850d4622
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 14static 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 22class PeekPixelsGM : public skiagm::GM { 23public: 24 PeekPixelsGM() {} 25 26protected: 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), 50 rowBytes, NULL, NULL)) { 51 canvas->drawBitmap(bitmap, 0, 0, NULL); 52 } 53 } 54 55 // test ROCanvasPixels 56 canvas->translate(120, 0); 57 SkAutoROCanvasPixels ropixels(surfCanvas); 58 if (ropixels.asROBitmap(&bitmap)) { 59 canvas->drawBitmap(bitmap, 0, 0, NULL); 60 } 61 62 // test Surface 63 canvas->translate(120, 0); 64 surface->draw(canvas, 0, 0, NULL); 65 } 66 } 67 68 virtual uint32_t onGetFlags() const { 69 // we explicitly test peekPixels and readPixels, neither of which 70 // return something for a picture-backed canvas, so we skip that test. 71 return kSkipPicture_Flag; 72 } 73 74private: 75 typedef skiagm::GM INHERITED; 76}; 77 78DEF_GM( return SkNEW(PeekPixelsGM); ) 79