1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/*
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc.
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com *
4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file.
6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */
78a21c9fe7f5fef9e87115defef27bd7218419f28reed
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),
2796fcdcc219d2a0d3579719b84b28bede76efba64halcanary                   nullptr, 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:
508a21c9fe7f5fef9e87115defef27bd7218419f28reed    bool onQuery(SkEvent* evt) override {
51c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com        if (SampleCode::TitleQ(*evt)) {
52c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com            SampleCode::TitleR(evt, "TinyBitmap");
53c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com            return true;
54c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com        }
55c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com        return this->INHERITED::onQuery(evt);
56c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com    }
57ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
58c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com    static void setBitmapOpaque(SkBitmap* bm, bool isOpaque) {
59c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com        SkAutoLockPixels alp(*bm);  // needed for ctable
60383a697692cf46951fd451f6f4c3d03634a6a1cbreed@google.com        bm->setAlphaType(isOpaque ? kOpaque_SkAlphaType : kPremul_SkAlphaType);
61c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com    }
62ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
638a21c9fe7f5fef9e87115defef27bd7218419f28reed    void onDrawContent(SkCanvas* canvas) override {
64c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com        SkPaint paint;
658a21c9fe7f5fef9e87115defef27bd7218419f28reed        paint.setShader(SkShader::MakeBitmapShader(fBM, SkShader::kRepeat_TileMode,
668a21c9fe7f5fef9e87115defef27bd7218419f28reed                                                   SkShader::kMirror_TileMode));
67c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com        canvas->drawPaint(paint);
68c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com    }
69ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
70c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.comprivate:
71c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com    typedef SkView INHERITED;
72c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com};
73c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com
74c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com//////////////////////////////////////////////////////////////////////////////
75c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.com
76c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.comstatic SkView* MyFactory() { return new TinyBitmapView; }
77c64599649bab68aedf07959f86fa506fc46fa3c2reed@android.comstatic SkViewRegister reg(MyFactory);
78