• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include "gm.h"
2 
3 namespace skiagm {
4 
make_bm(SkBitmap * bm)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 
draw_bm(SkCanvas * canvas,const SkBitmap & bm,SkScalar x,SkScalar y,SkPaint * paint)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 
draw_set(SkCanvas * c,const SkBitmap & bm,SkScalar x,SkPaint * p)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 
draw_row(SkCanvas * canvas,const SkBitmap & bm)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 
FilterGM()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:
onShortName()85     virtual SkString onShortName() {
86         return SkString("bitmapfilters");
87     }
88 
onISize()89 	virtual SkISize onISize() {
90         return make_isize(540, 330);
91     }
92 
onDraw(SkCanvas * canvas)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 
MyFactory(void *)115 static GM* MyFactory(void*) { return new FilterGM; }
116 static GMRegistry reg(MyFactory);
117 
118 }
119 
120 
121 
122