Home | History | Annotate | Download | only in samplecode
      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