tinybitmap.cpp revision 7775d66aa0e5958c9ea55ddb8317af4d9b019220
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    SkBitmap bm;
18
19    SkColorTable* ctable = new SkColorTable(1);
20    SkPMColor* c = ctable->lockColors();
21    c[0] = SkPackARGB32(0x80, 0x80, 0, 0);
22    ctable->unlockColors(true);
23
24    bm.setConfig(SkBitmap::kIndex8_Config, 1, 1);
25    bm.allocPixels(ctable);
26    ctable->unref();
27
28    bm.lockPixels();
29    *bm.getAddr8(0, 0) = 0;
30    bm.unlockPixels();
31    return bm;
32}
33
34class TinyBitmapGM : public GM {
35public:
36    TinyBitmapGM() {
37        this->setBGColor(0xFFDDDDDD);
38    }
39
40protected:
41    SkString onShortName() {
42        return SkString("tinybitmap");
43    }
44
45    virtual SkISize onISize() { return make_isize(100, 100); }
46
47    virtual void onDraw(SkCanvas* canvas) {
48        SkBitmap bm = make_bitmap();
49        SkShader* s =
50            SkShader::CreateBitmapShader(bm, SkShader::kRepeat_TileMode,
51                                         SkShader::kMirror_TileMode);
52        SkPaint paint;
53        paint.setAlpha(0x80);
54        paint.setShader(s)->unref();
55        canvas->drawPaint(paint);
56    }
57
58private:
59    typedef GM INHERITED;
60};
61
62//////////////////////////////////////////////////////////////////////////////
63
64static GM* MyFactory(void*) { return new TinyBitmapGM; }
65static GMRegistry reg(MyFactory);
66
67}
68