blob: eaaa11a2c60e9a0560dff73d0b8946d71e73a89d [file] [log] [blame]
epoger@google.comec3ed6a2011-07-28 14:26:00 +00001/*
2 * Copyright 2011 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
reedc3b32662014-06-17 08:38:31 -07007
reed@android.com048522d2009-06-23 12:19:41 +00008#include "gm.h"
reedc3b32662014-06-17 08:38:31 -07009#include "sk_tool_utils.h"
reed@android.com048522d2009-06-23 12:19:41 +000010
11namespace skiagm {
12
13static void make_bm(SkBitmap* bm) {
bungeman@google.com2ed67e82011-05-18 18:54:23 +000014 const SkColor colors[4] = {
reed@android.com048522d2009-06-23 12:19:41 +000015 SK_ColorRED, SK_ColorGREEN,
16 SK_ColorBLUE, SK_ColorWHITE
17 };
bungeman@google.com2ed67e82011-05-18 18:54:23 +000018 SkPMColor colorsPM[4];
19 for (size_t i = 0; i < SK_ARRAY_COUNT(colors); ++i) {
20 colorsPM[i] = SkPreMultiplyColor(colors[i]);
21 }
22 SkColorTable* ctable = new SkColorTable(colorsPM, 4);
23
commit-bot@chromium.orgdac52252014-02-17 21:21:46 +000024 bm->allocPixels(SkImageInfo::Make(2, 2, kIndex_8_SkColorType,
25 kPremul_SkAlphaType),
26 NULL, ctable);
reed@android.com048522d2009-06-23 12:19:41 +000027 ctable->unref();
bungeman@google.com2ed67e82011-05-18 18:54:23 +000028
reed@android.com048522d2009-06-23 12:19:41 +000029 *bm->getAddr8(0, 0) = 0;
30 *bm->getAddr8(1, 0) = 1;
31 *bm->getAddr8(0, 1) = 2;
32 *bm->getAddr8(1, 1) = 3;
33}
34
35static SkScalar draw_bm(SkCanvas* canvas, const SkBitmap& bm,
36 SkScalar x, SkScalar y, SkPaint* paint) {
37 canvas->drawBitmap(bm, x, y, paint);
38 return SkIntToScalar(bm.width()) * 5/4;
39}
40
41static SkScalar draw_set(SkCanvas* c, const SkBitmap& bm, SkScalar x,
42 SkPaint* p) {
43 x += draw_bm(c, bm, x, 0, p);
reed@google.com44699382013-10-31 17:28:30 +000044 p->setFilterLevel(SkPaint::kLow_FilterLevel);
reed@android.com048522d2009-06-23 12:19:41 +000045 x += draw_bm(c, bm, x, 0, p);
46 p->setDither(true);
47 return x + draw_bm(c, bm, x, 0, p);
48}
49
reed@android.com048522d2009-06-23 12:19:41 +000050static SkScalar draw_row(SkCanvas* canvas, const SkBitmap& bm) {
51 SkAutoCanvasRestore acr(canvas, true);
52
53 SkPaint paint;
54 SkScalar x = 0;
55 const int scale = 32;
56
57 paint.setAntiAlias(true);
reedc3b32662014-06-17 08:38:31 -070058 const char* name = sk_tool_utils::colortype_name(bm.colorType());
reed@android.com048522d2009-06-23 12:19:41 +000059 canvas->drawText(name, strlen(name), x, SkIntToScalar(bm.height())*scale*5/8,
60 paint);
61 canvas->translate(SkIntToScalar(48), 0);
62
63 canvas->scale(SkIntToScalar(scale), SkIntToScalar(scale));
bungeman@google.com2ed67e82011-05-18 18:54:23 +000064
reed@android.com048522d2009-06-23 12:19:41 +000065 x += draw_set(canvas, bm, 0, &paint);
66 paint.reset();
67 paint.setAlpha(0x80);
68 draw_set(canvas, bm, x, &paint);
69 return x * scale / 3;
70}
71
72class FilterGM : public GM {
reed@google.com26b73d32012-03-08 22:13:04 +000073 bool fOnce;
74 void init() {
75 if (fOnce) {
76 return;
77 }
78 fOnce = true;
reed@android.com048522d2009-06-23 12:19:41 +000079 make_bm(&fBM8);
commit-bot@chromium.org8a2ad3c2014-02-23 03:59:35 +000080 fBM8.copyTo(&fBM4444, kARGB_4444_SkColorType);
81 fBM8.copyTo(&fBM16, kRGB_565_SkColorType);
commit-bot@chromium.org28fcae22014-04-11 17:15:40 +000082 fBM8.copyTo(&fBM32, kN32_SkColorType);
reed@google.com26b73d32012-03-08 22:13:04 +000083 }
84public:
85 SkBitmap fBM8, fBM4444, fBM16, fBM32;
86
rmistry@google.comd6176b02012-08-23 18:14:13 +000087 FilterGM() : fOnce(false) {
bsalomon@google.com48dd1a22011-10-31 14:18:20 +000088 this->setBGColor(0xFFDDDDDD);
reed@android.com048522d2009-06-23 12:19:41 +000089 }
90
91protected:
92 virtual SkString onShortName() {
93 return SkString("bitmapfilters");
94 }
95
rmistry@google.comd6176b02012-08-23 18:14:13 +000096 virtual SkISize onISize() {
tfarinaf5393182014-06-09 23:59:03 -070097 return SkISize::Make(540, 330);
reed@android.com048522d2009-06-23 12:19:41 +000098 }
99
100 virtual void onDraw(SkCanvas* canvas) {
reed@google.com26b73d32012-03-08 22:13:04 +0000101 this->init();
reed@android.com048522d2009-06-23 12:19:41 +0000102
103 SkScalar x = SkIntToScalar(10);
104 SkScalar y = SkIntToScalar(10);
bungeman@google.com2ed67e82011-05-18 18:54:23 +0000105
reed@android.com048522d2009-06-23 12:19:41 +0000106 canvas->translate(x, y);
107 y = draw_row(canvas, fBM8);
108 canvas->translate(0, y);
109 y = draw_row(canvas, fBM4444);
110 canvas->translate(0, y);
111 y = draw_row(canvas, fBM16);
112 canvas->translate(0, y);
113 draw_row(canvas, fBM32);
114 }
bungeman@google.com2ed67e82011-05-18 18:54:23 +0000115
reed@android.com048522d2009-06-23 12:19:41 +0000116private:
117 typedef GM INHERITED;
118};
119
120//////////////////////////////////////////////////////////////////////////////
121
122static GM* MyFactory(void*) { return new FilterGM; }
123static GMRegistry reg(MyFactory);
124
125}