blob: 4538cda8945d007fdbbbeb859af86a075f16c9c7 [file] [log] [blame]
scroggo@google.com9f686f32012-11-29 21:05:37 +00001/*
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#include "SkBitmapFactory.h"
10#include "SkCanvas.h"
11#include "SkData.h"
scroggo@google.comf8d7d272013-02-22 21:38:35 +000012#include "SkImageDecoder.h"
13#include "SkLruImageCache.h"
scroggo@google.com9f686f32012-11-29 21:05:37 +000014#include "SkStream.h"
15
16namespace skiagm {
17
18/**
19 * Draw a PNG created by SkBitmapFactory.
20 */
21class FactoryGM : public GM {
22public:
23 FactoryGM() {}
24
25protected:
26 virtual void onOnceBeforeDraw() SK_OVERRIDE {
27 SkString filename(INHERITED::gResourcePath);
28 if (!filename.endsWith("/") && !filename.endsWith("\\")) {
29 filename.append("/");
30 }
31
32 // Copyright-free file from http://openclipart.org/detail/29213/paper-plane-by-ddoo
33 filename.append("plane.png");
34
commit-bot@chromium.org9711e442013-04-24 20:03:00 +000035 SkAutoTUnref<SkStream> stream(SkStream::NewFromFile(filename.c_str()));
36 if (NULL != stream.get()) {
37 stream->rewind();
38 size_t length = stream->getLength();
scroggo@google.com9f686f32012-11-29 21:05:37 +000039 void* buffer = sk_malloc_throw(length);
commit-bot@chromium.org9711e442013-04-24 20:03:00 +000040 stream->read(buffer, length);
scroggo@google.com9f686f32012-11-29 21:05:37 +000041 SkAutoDataUnref data(SkData::NewFromMalloc(buffer, length));
scroggo@google.comf8d7d272013-02-22 21:38:35 +000042 SkBitmapFactory factory(&SkImageDecoder::DecodeMemoryToTarget);
43 // Create a cache which will boot the pixels out anytime the
44 // bitmap is unlocked.
scroggo@google.coma560d00b2013-03-04 21:32:32 +000045 SkAutoTUnref<SkLruImageCache> cache(SkNEW_ARGS(SkLruImageCache, (1)));
scroggo@google.comf8d7d272013-02-22 21:38:35 +000046 factory.setImageCache(cache);
47 factory.installPixelRef(data, &fBitmap);
scroggo@google.com9f686f32012-11-29 21:05:37 +000048 }
49 }
50
51 virtual SkString onShortName() {
52 return SkString("factory");
53 }
54
55 virtual SkISize onISize() {
56 return make_isize(640, 480);
57 }
58
59 virtual void onDraw(SkCanvas* canvas) {
60 canvas->drawBitmap(fBitmap, 0, 0);
61 }
62
63private:
64 SkBitmap fBitmap;
65
66 typedef GM INHERITED;
67};
68
69//////////////////////////////////////////////////////////////////////////////
70
71static GM* MyFactory(void*) { return new FactoryGM; }
72static GMRegistry reg(MyFactory);
73
74}