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