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