1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/*
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc.
4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com *
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be
6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file.
7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */
8c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com#include "SampleCode.h"
9c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com#include "SkColorPriv.h"
10c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com#include "SkShader.h"
11c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com#include "SkView.h"
12c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com#include "SkCanvas.h"
13c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com#include "SkUtils.h"
14c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com
15c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.comstatic SkBitmap make_bitmap() {
16c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com    const int N = 1;
17c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com
180a6151d66cc32d91eca037c91e557158cf8a2be2reed@google.com    SkPMColor c[N];
19c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com    for (int i = 0; i < N; i++) {
20c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com        c[i] = SkPackARGB32(0x80, 0x80, 0, 0);
21c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com    }
220a6151d66cc32d91eca037c91e557158cf8a2be2reed@google.com    SkColorTable* ctable = new SkColorTable(c, N);
230a6151d66cc32d91eca037c91e557158cf8a2be2reed@google.com
240a6151d66cc32d91eca037c91e557158cf8a2be2reed@google.com    SkBitmap bm;
25a8c183125f2861067daf432cada06d431a795cd0commit-bot@chromium.org    bm.allocPixels(SkImageInfo::Make(1, 1, kIndex_8_SkColorType,
26a8c183125f2861067daf432cada06d431a795cd0commit-bot@chromium.org                                     kPremul_SkAlphaType),
27a8c183125f2861067daf432cada06d431a795cd0commit-bot@chromium.org                   NULL, ctable);
28c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com    ctable->unref();
29c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com
30c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com    bm.lockPixels();
31c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com    for (int y = 0; y < bm.height(); y++) {
32c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com        uint8_t* p = bm.getAddr8(0, y);
33c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com        for (int x = 0; x < bm.width(); x++) {
34c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com            p[x] = 0;
35c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com        }
36c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com    }
37c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com    bm.unlockPixels();
38c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com    return bm;
39c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com}
40c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com
4117fb387a56f8fcfcb9ccf585e2c53ee8e709028dreed@google.comclass TinyBitmapView : public SampleView {
42c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com    SkBitmap    fBM;
43c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.compublic:
44ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com    TinyBitmapView() {
45c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com        fBM = make_bitmap();
4617fb387a56f8fcfcb9ccf585e2c53ee8e709028dreed@google.com        this->setBGColor(0xFFDDDDDD);
47c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com    }
48ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
49c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.comprotected:
50c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com    // overrides from SkEventSink
51c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com    virtual bool onQuery(SkEvent* evt) {
52c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com        if (SampleCode::TitleQ(*evt)) {
53c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com            SampleCode::TitleR(evt, "TinyBitmap");
54c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com            return true;
55c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com        }
56c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com        return this->INHERITED::onQuery(evt);
57c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com    }
58ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
59c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com    static void setBitmapOpaque(SkBitmap* bm, bool isOpaque) {
60c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com        SkAutoLockPixels alp(*bm);  // needed for ctable
61383a697692cf46951fd451f6f4c3d03634a6a1cbreed@google.com        bm->setAlphaType(isOpaque ? kOpaque_SkAlphaType : kPremul_SkAlphaType);
62c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com    }
63ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
6417fb387a56f8fcfcb9ccf585e2c53ee8e709028dreed@google.com    virtual void onDrawContent(SkCanvas* canvas) {
65c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com        SkShader* s = SkShader::CreateBitmapShader(fBM, SkShader::kRepeat_TileMode,
66c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com                                                   SkShader::kMirror_TileMode);
67c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com        SkPaint paint;
68c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com        paint.setShader(s)->unref();
69c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com        canvas->drawPaint(paint);
70c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com    }
71ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
72c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.comprivate:
73c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com    typedef SkView INHERITED;
74c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com};
75c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com
76c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com//////////////////////////////////////////////////////////////////////////////
77c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com
78c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.comstatic SkView* MyFactory() { return new TinyBitmapView; }
79c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.comstatic SkViewRegister reg(MyFactory);
80