1 #include "SampleCode.h" 2 #include "SkColorPriv.h" 3 #include "SkShader.h" 4 #include "SkView.h" 5 #include "SkCanvas.h" 6 #include "SkUtils.h" 7 8 static SkBitmap make_bitmap() { 9 SkBitmap bm; 10 const int N = 1; 11 SkColorTable* ctable = new SkColorTable(N); 12 13 SkPMColor* c = ctable->lockColors(); 14 for (int i = 0; i < N; i++) { 15 c[i] = SkPackARGB32(0x80, 0x80, 0, 0); 16 } 17 ctable->unlockColors(true); 18 bm.setConfig(SkBitmap::kIndex8_Config, 1, 1); 19 bm.allocPixels(ctable); 20 ctable->unref(); 21 22 bm.lockPixels(); 23 for (int y = 0; y < bm.height(); y++) { 24 uint8_t* p = bm.getAddr8(0, y); 25 for (int x = 0; x < bm.width(); x++) { 26 p[x] = 0; 27 } 28 } 29 bm.unlockPixels(); 30 return bm; 31 } 32 33 class TinyBitmapView : public SampleView { 34 SkBitmap fBM; 35 public: 36 TinyBitmapView() { 37 fBM = make_bitmap(); 38 this->setBGColor(0xFFDDDDDD); 39 } 40 41 protected: 42 // overrides from SkEventSink 43 virtual bool onQuery(SkEvent* evt) { 44 if (SampleCode::TitleQ(*evt)) { 45 SampleCode::TitleR(evt, "TinyBitmap"); 46 return true; 47 } 48 return this->INHERITED::onQuery(evt); 49 } 50 51 static void setBitmapOpaque(SkBitmap* bm, bool isOpaque) { 52 SkAutoLockPixels alp(*bm); // needed for ctable 53 bm->setIsOpaque(isOpaque); 54 SkColorTable* ctable = bm->getColorTable(); 55 if (ctable) { 56 ctable->setIsOpaque(isOpaque); 57 } 58 } 59 60 virtual void onDrawContent(SkCanvas* canvas) { 61 SkShader* s = SkShader::CreateBitmapShader(fBM, SkShader::kRepeat_TileMode, 62 SkShader::kMirror_TileMode); 63 SkPaint paint; 64 paint.setShader(s)->unref(); 65 canvas->drawPaint(paint); 66 } 67 68 private: 69 typedef SkView INHERITED; 70 }; 71 72 ////////////////////////////////////////////////////////////////////////////// 73 74 static SkView* MyFactory() { return new TinyBitmapView; } 75 static SkViewRegister reg(MyFactory); 76 77