blob: 94d6fe6e2ce1db6a5146bf15cb38a605f1aacfc9 [file] [log] [blame]
senorblanco@chromium.orgef843cd2011-12-02 19:11:17 +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 */
7#include "gm.h"
Mike Klein33d20552017-03-22 13:47:51 -04008#include "sk_tool_utils.h"
senorblanco@chromium.orgef843cd2011-12-02 19:11:17 +00009
10namespace skiagm {
11
Brian Salomone41e1762018-01-25 14:07:47 -050012static const char* color_type_name(SkColorType colorType) {
13 switch (colorType) {
14 case kUnknown_SkColorType: return "unknown";
15 case kAlpha_8_SkColorType: return "A8";
16 case kRGB_565_SkColorType: return "565";
17 case kARGB_4444_SkColorType: return "4444";
18 case kRGBA_8888_SkColorType: return "8888";
19 case kRGB_888x_SkColorType: return "888x";
20 case kBGRA_8888_SkColorType: return "8888";
21 case kRGBA_1010102_SkColorType: return "1010102";
22 case kRGB_101010x_SkColorType: return "101010x";
23 case kGray_8_SkColorType: return "G8";
24 case kRGBA_F16_SkColorType: return "F16";
25 }
26 return "";
27}
senorblanco@chromium.orgef843cd2011-12-02 19:11:17 +000028
mtkleindbfd7ab2016-09-01 11:24:54 -070029constexpr SkColorType gColorTypes[] = {
commit-bot@chromium.org8a2ad3c2014-02-23 03:59:35 +000030 kRGB_565_SkColorType,
31 kARGB_4444_SkColorType,
commit-bot@chromium.org28fcae22014-04-11 17:15:40 +000032 kN32_SkColorType,
senorblanco@chromium.orgef843cd2011-12-02 19:11:17 +000033};
34
commit-bot@chromium.org8a2ad3c2014-02-23 03:59:35 +000035#define NUM_CONFIGS SK_ARRAY_COUNT(gColorTypes)
senorblanco@chromium.orgef843cd2011-12-02 19:11:17 +000036
37static void draw_checks(SkCanvas* canvas, int width, int height) {
38 SkPaint paint;
39 paint.setColor(SK_ColorRED);
Mike Reed3661bc92017-02-22 13:21:42 -050040 canvas->drawRect(SkRect::MakeIWH(width/2, height/2), paint);
senorblanco@chromium.orgef843cd2011-12-02 19:11:17 +000041 paint.setColor(SK_ColorGREEN);
Mike Reed3661bc92017-02-22 13:21:42 -050042 canvas->drawRect({ SkIntToScalar(width/2), 0, SkIntToScalar(width), SkIntToScalar(height/2) },
43 paint);
senorblanco@chromium.orgef843cd2011-12-02 19:11:17 +000044 paint.setColor(SK_ColorBLUE);
Mike Reed3661bc92017-02-22 13:21:42 -050045 canvas->drawRect({ 0, SkIntToScalar(height/2), SkIntToScalar(width/2), SkIntToScalar(height) },
46 paint);
senorblanco@chromium.orgef843cd2011-12-02 19:11:17 +000047 paint.setColor(SK_ColorYELLOW);
Mike Reed3661bc92017-02-22 13:21:42 -050048 canvas->drawRect({ SkIntToScalar(width/2), SkIntToScalar(height/2), SkIntToScalar(width),
49 SkIntToScalar(height) }, paint);
senorblanco@chromium.orgef843cd2011-12-02 19:11:17 +000050}
51
52class BitmapCopyGM : public GM {
53public:
54 SkBitmap fDst[NUM_CONFIGS];
55
56 BitmapCopyGM() {
caryclark65cdba62015-06-15 06:51:08 -070057 this->setBGColor(sk_tool_utils::color_to_565(0xFFDDDDDD));
senorblanco@chromium.orgef843cd2011-12-02 19:11:17 +000058 }
59
60protected:
61 virtual SkString onShortName() {
62 return SkString("bitmapcopy");
63 }
64
65 virtual SkISize onISize() {
tfarinaf5393182014-06-09 23:59:03 -070066 return SkISize::Make(540, 330);
senorblanco@chromium.orgef843cd2011-12-02 19:11:17 +000067 }
68
69 virtual void onDraw(SkCanvas* canvas) {
70 SkPaint paint;
commit-bot@chromium.orgc3bd8af2014-02-13 17:14:46 +000071 SkScalar horizMargin = 10;
72 SkScalar vertMargin = 10;
senorblanco@chromium.orgef843cd2011-12-02 19:11:17 +000073
commit-bot@chromium.orgc3bd8af2014-02-13 17:14:46 +000074 SkBitmap src;
Matt Sarettec138b42017-04-28 16:06:34 -040075 src.allocN32Pixels(40, 40, kOpaque_SkAlphaType);
commit-bot@chromium.orgc3bd8af2014-02-13 17:14:46 +000076 SkCanvas canvasTmp(src);
skia.committer@gmail.comd55e3572013-08-08 07:01:20 +000077
commit-bot@chromium.org488a3372013-08-07 17:03:09 +000078 draw_checks(&canvasTmp, 40, 40);
senorblanco@chromium.orgef843cd2011-12-02 19:11:17 +000079
80 for (unsigned i = 0; i < NUM_CONFIGS; ++i) {
Matt Sarett68b8e3d2017-04-28 11:15:22 -040081 sk_tool_utils::copy_to(&fDst[i], gColorTypes[i], src);
senorblanco@chromium.orgef843cd2011-12-02 19:11:17 +000082 }
83
caryclark65cdba62015-06-15 06:51:08 -070084 canvas->clear(sk_tool_utils::color_to_565(0xFFDDDDDD));
senorblanco@chromium.orgef843cd2011-12-02 19:11:17 +000085 paint.setAntiAlias(true);
caryclark1818acb2015-07-24 12:09:25 -070086 sk_tool_utils::set_portable_typeface(&paint);
halcanary9d524f22016-03-29 09:03:52 -070087
senorblanco@chromium.orgef843cd2011-12-02 19:11:17 +000088 SkScalar width = SkIntToScalar(40);
89 SkScalar height = SkIntToScalar(40);
90 if (paint.getFontSpacing() > height) {
91 height = paint.getFontSpacing();
92 }
93 for (unsigned i = 0; i < NUM_CONFIGS; i++) {
Brian Salomone41e1762018-01-25 14:07:47 -050094 const char* name = color_type_name(src.colorType());
senorblanco@chromium.orgef843cd2011-12-02 19:11:17 +000095 SkScalar textWidth = paint.measureText(name, strlen(name));
96 if (textWidth > width) {
97 width = textWidth;
98 }
99 }
100 SkScalar horizOffset = width + horizMargin;
101 SkScalar vertOffset = height + vertMargin;
102 canvas->translate(SkIntToScalar(20), SkIntToScalar(20));
103
104 for (unsigned i = 0; i < NUM_CONFIGS; i++) {
105 canvas->save();
106 // Draw destination config name
Brian Salomone41e1762018-01-25 14:07:47 -0500107 const char* name = color_type_name(fDst[i].colorType());
senorblanco@chromium.orgef843cd2011-12-02 19:11:17 +0000108 SkScalar textWidth = paint.measureText(name, strlen(name));
109 SkScalar x = (width - textWidth) / SkScalar(2);
110 SkScalar y = paint.getFontSpacing() / SkScalar(2);
Cary Clark2a475ea2017-04-28 15:35:12 -0400111 canvas->drawString(name, x, y, paint);
senorblanco@chromium.orgef843cd2011-12-02 19:11:17 +0000112
113 // Draw destination bitmap
114 canvas->translate(0, vertOffset);
115 x = (width - 40) / SkScalar(2);
116 canvas->drawBitmap(fDst[i], x, 0, &paint);
117 canvas->restore();
118
119 canvas->translate(horizOffset, 0);
120 }
121 }
122
senorblanco@chromium.orgef843cd2011-12-02 19:11:17 +0000123private:
124 typedef GM INHERITED;
125};
126
127//////////////////////////////////////////////////////////////////////////////
128
129static GM* MyFactory(void*) { return new BitmapCopyGM; }
130static GMRegistry reg(MyFactory);
senorblanco@chromium.orgef843cd2011-12-02 19:11:17 +0000131}