Home | History | Annotate | Download | only in gm
      1 #include "gm.h"
      2 
      3 namespace skiagm {
      4 
      5 static void make_bm(SkBitmap* bm) {
      6     const SkColor colors[4] = {
      7         SK_ColorRED, SK_ColorGREEN,
      8         SK_ColorBLUE, SK_ColorWHITE
      9     };
     10     SkPMColor colorsPM[4];
     11     for (size_t i = 0; i < SK_ARRAY_COUNT(colors); ++i) {
     12         colorsPM[i] = SkPreMultiplyColor(colors[i]);
     13     }
     14     SkColorTable* ctable = new SkColorTable(colorsPM, 4);
     15 
     16     bm->setConfig(SkBitmap::kIndex8_Config, 2, 2);
     17     bm->allocPixels(ctable);
     18     ctable->unref();
     19 
     20     *bm->getAddr8(0, 0) = 0;
     21     *bm->getAddr8(1, 0) = 1;
     22     *bm->getAddr8(0, 1) = 2;
     23     *bm->getAddr8(1, 1) = 3;
     24 }
     25 
     26 static SkScalar draw_bm(SkCanvas* canvas, const SkBitmap& bm,
     27                         SkScalar x, SkScalar y, SkPaint* paint) {
     28     canvas->drawBitmap(bm, x, y, paint);
     29     return SkIntToScalar(bm.width()) * 5/4;
     30 }
     31 
     32 static SkScalar draw_set(SkCanvas* c, const SkBitmap& bm, SkScalar x,
     33                          SkPaint* p) {
     34     x += draw_bm(c, bm, x, 0, p);
     35     p->setFilterBitmap(true);
     36     x += draw_bm(c, bm, x, 0, p);
     37     p->setDither(true);
     38     return x + draw_bm(c, bm, x, 0, p);
     39 }
     40 
     41 static const char* gConfigNames[] = {
     42     "unknown config",
     43     "A1",
     44     "A8",
     45     "Index8",
     46     "565",
     47     "4444",
     48     "8888"
     49 };
     50 
     51 static SkScalar draw_row(SkCanvas* canvas, const SkBitmap& bm) {
     52     SkAutoCanvasRestore acr(canvas, true);
     53 
     54     SkPaint paint;
     55     SkScalar x = 0;
     56     const int scale = 32;
     57 
     58     paint.setAntiAlias(true);
     59     const char* name = gConfigNames[bm.config()];
     60     canvas->drawText(name, strlen(name), x, SkIntToScalar(bm.height())*scale*5/8,
     61                      paint);
     62     canvas->translate(SkIntToScalar(48), 0);
     63 
     64     canvas->scale(SkIntToScalar(scale), SkIntToScalar(scale));
     65 
     66     x += draw_set(canvas, bm, 0, &paint);
     67     paint.reset();
     68     paint.setAlpha(0x80);
     69     draw_set(canvas, bm, x, &paint);
     70     return x * scale / 3;
     71 }
     72 
     73 class FilterGM : public GM {
     74 public:
     75     SkBitmap    fBM8, fBM4444, fBM16, fBM32;
     76 
     77 	FilterGM() {
     78         make_bm(&fBM8);
     79         fBM8.copyTo(&fBM4444, SkBitmap::kARGB_4444_Config);
     80         fBM8.copyTo(&fBM16, SkBitmap::kRGB_565_Config);
     81         fBM8.copyTo(&fBM32, SkBitmap::kARGB_8888_Config);
     82     }
     83 
     84 protected:
     85     virtual SkString onShortName() {
     86         return SkString("bitmapfilters");
     87     }
     88 
     89 	virtual SkISize onISize() {
     90         return make_isize(540, 330);
     91     }
     92 
     93     virtual void onDraw(SkCanvas* canvas) {
     94         canvas->drawColor(0xFFDDDDDD);
     95 
     96         SkScalar x = SkIntToScalar(10);
     97         SkScalar y = SkIntToScalar(10);
     98 
     99         canvas->translate(x, y);
    100         y = draw_row(canvas, fBM8);
    101         canvas->translate(0, y);
    102         y = draw_row(canvas, fBM4444);
    103         canvas->translate(0, y);
    104         y = draw_row(canvas, fBM16);
    105         canvas->translate(0, y);
    106         draw_row(canvas, fBM32);
    107     }
    108 
    109 private:
    110     typedef GM INHERITED;
    111 };
    112 
    113 //////////////////////////////////////////////////////////////////////////////
    114 
    115 static GM* MyFactory(void*) { return new FilterGM; }
    116 static GMRegistry reg(MyFactory);
    117 
    118 }
    119 
    120 
    121 
    122