1
2/*
3 * Copyright 2011 Google Inc.
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 */
8#include "gm.h"
9#include "SkColorPriv.h"
10#include "SkShader.h"
11#include "SkCanvas.h"
12#include "SkUtils.h"
13
14namespace skiagm {
15
16static SkBitmap make_bitmap() {
17    const SkPMColor c[] = { SkPackARGB32(0x80, 0x80, 0, 0) };
18    SkColorTable* ctable = new SkColorTable(c, SK_ARRAY_COUNT(c));
19
20    SkBitmap bm;
21    bm.allocPixels(SkImageInfo::Make(1, 1, kIndex_8_SkColorType,
22                                     kPremul_SkAlphaType),
23                   NULL, ctable);
24    ctable->unref();
25
26    bm.lockPixels();
27    *bm.getAddr8(0, 0) = 0;
28    bm.unlockPixels();
29    return bm;
30}
31
32class TinyBitmapGM : public GM {
33public:
34    TinyBitmapGM() {
35        this->setBGColor(0xFFDDDDDD);
36    }
37
38protected:
39    SkString onShortName() {
40        return SkString("tinybitmap");
41    }
42
43    virtual SkISize onISize() { return SkISize::Make(100, 100); }
44
45    virtual void onDraw(SkCanvas* canvas) {
46        SkBitmap bm = make_bitmap();
47        SkShader* s =
48            SkShader::CreateBitmapShader(bm, SkShader::kRepeat_TileMode,
49                                         SkShader::kMirror_TileMode);
50        SkPaint paint;
51        paint.setAlpha(0x80);
52        paint.setShader(s)->unref();
53        canvas->drawPaint(paint);
54    }
55
56private:
57    typedef GM INHERITED;
58};
59
60//////////////////////////////////////////////////////////////////////////////
61
62static GM* MyFactory(void*) { return new TinyBitmapGM; }
63static GMRegistry reg(MyFactory);
64
65}
66