1 /* 2 * Copyright 2012 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 10 #include "Resources.h" 11 #include "SkCanvas.h" 12 #include "SkData.h" 13 #include "SkDiscardableMemoryPool.h" 14 #include "SkDiscardablePixelRef.h" 15 #include "SkImageDecoder.h" 16 #include "SkImageGeneratorPriv.h" 17 #include "SkOSFile.h" 18 #include "SkStream.h" 19 20 namespace skiagm { 21 22 /** 23 * Draw a PNG created by SkBitmapFactory. 24 */ 25 class FactoryGM : public GM { 26 public: FactoryGM()27 FactoryGM() {} 28 29 protected: onOnceBeforeDraw()30 void onOnceBeforeDraw() override { 31 // Copyright-free file from http://openclipart.org/detail/29213/paper-plane-by-ddoo 32 SkString pngFilename = GetResourcePath("plane.png"); 33 SkAutoDataUnref data(SkData::NewFromFileName(pngFilename.c_str())); 34 if (data.get()) { 35 // Create a cache which will boot the pixels out anytime the 36 // bitmap is unlocked. 37 SkAutoTUnref<SkDiscardableMemoryPool> pool( 38 SkDiscardableMemoryPool::Create(1)); 39 SkAssertResult(SkInstallDiscardablePixelRef(SkImageGenerator::NewFromData(data), 40 &fBitmap, pool)); 41 } 42 } 43 onShortName()44 virtual SkString onShortName() override { 45 return SkString("factory"); 46 } 47 onISize()48 virtual SkISize onISize() override { 49 return SkISize::Make(640, 480); 50 } 51 onDraw(SkCanvas * canvas)52 virtual void onDraw(SkCanvas* canvas) override { 53 canvas->drawBitmap(fBitmap, 0, 0); 54 } 55 56 private: 57 SkBitmap fBitmap; 58 59 typedef GM INHERITED; 60 }; 61 62 ////////////////////////////////////////////////////////////////////////////// 63 MyFactory(void *)64static GM* MyFactory(void*) { return new FactoryGM; } 65 static GMRegistry reg(MyFactory); 66 67 } // namespace skiagm 68