blob: edd706d45fd77cc67603c104fc32acfeffb50f14 [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"
8
9namespace skiagm {
10
commit-bot@chromium.org8a2ad3c2014-02-23 03:59:35 +000011static const char* gColorTypeNames[] = {
12 "unknown",
senorblanco@chromium.orgef843cd2011-12-02 19:11:17 +000013 "A8",
senorblanco@chromium.orgef843cd2011-12-02 19:11:17 +000014 "565",
15 "4444",
commit-bot@chromium.org8a2ad3c2014-02-23 03:59:35 +000016 "8888",
17 "8888",
18 "Index8",
senorblanco@chromium.orgef843cd2011-12-02 19:11:17 +000019};
20
mtkleindbfd7ab2016-09-01 11:24:54 -070021constexpr SkColorType gColorTypes[] = {
commit-bot@chromium.org8a2ad3c2014-02-23 03:59:35 +000022 kRGB_565_SkColorType,
23 kARGB_4444_SkColorType,
commit-bot@chromium.org28fcae22014-04-11 17:15:40 +000024 kN32_SkColorType,
senorblanco@chromium.orgef843cd2011-12-02 19:11:17 +000025};
26
commit-bot@chromium.org8a2ad3c2014-02-23 03:59:35 +000027#define NUM_CONFIGS SK_ARRAY_COUNT(gColorTypes)
senorblanco@chromium.orgef843cd2011-12-02 19:11:17 +000028
29static void draw_checks(SkCanvas* canvas, int width, int height) {
30 SkPaint paint;
31 paint.setColor(SK_ColorRED);
Mike Reed3661bc92017-02-22 13:21:42 -050032 canvas->drawRect(SkRect::MakeIWH(width/2, height/2), paint);
senorblanco@chromium.orgef843cd2011-12-02 19:11:17 +000033 paint.setColor(SK_ColorGREEN);
Mike Reed3661bc92017-02-22 13:21:42 -050034 canvas->drawRect({ SkIntToScalar(width/2), 0, SkIntToScalar(width), SkIntToScalar(height/2) },
35 paint);
senorblanco@chromium.orgef843cd2011-12-02 19:11:17 +000036 paint.setColor(SK_ColorBLUE);
Mike Reed3661bc92017-02-22 13:21:42 -050037 canvas->drawRect({ 0, SkIntToScalar(height/2), SkIntToScalar(width/2), SkIntToScalar(height) },
38 paint);
senorblanco@chromium.orgef843cd2011-12-02 19:11:17 +000039 paint.setColor(SK_ColorYELLOW);
Mike Reed3661bc92017-02-22 13:21:42 -050040 canvas->drawRect({ SkIntToScalar(width/2), SkIntToScalar(height/2), SkIntToScalar(width),
41 SkIntToScalar(height) }, paint);
senorblanco@chromium.orgef843cd2011-12-02 19:11:17 +000042}
43
44class BitmapCopyGM : public GM {
45public:
46 SkBitmap fDst[NUM_CONFIGS];
47
48 BitmapCopyGM() {
caryclark65cdba62015-06-15 06:51:08 -070049 this->setBGColor(sk_tool_utils::color_to_565(0xFFDDDDDD));
senorblanco@chromium.orgef843cd2011-12-02 19:11:17 +000050 }
51
52protected:
53 virtual SkString onShortName() {
54 return SkString("bitmapcopy");
55 }
56
57 virtual SkISize onISize() {
tfarinaf5393182014-06-09 23:59:03 -070058 return SkISize::Make(540, 330);
senorblanco@chromium.orgef843cd2011-12-02 19:11:17 +000059 }
60
61 virtual void onDraw(SkCanvas* canvas) {
62 SkPaint paint;
commit-bot@chromium.orgc3bd8af2014-02-13 17:14:46 +000063 SkScalar horizMargin = 10;
64 SkScalar vertMargin = 10;
senorblanco@chromium.orgef843cd2011-12-02 19:11:17 +000065
commit-bot@chromium.orgc3bd8af2014-02-13 17:14:46 +000066 SkBitmap src;
67 src.allocN32Pixels(40, 40);
68 SkCanvas canvasTmp(src);
skia.committer@gmail.comd55e3572013-08-08 07:01:20 +000069
commit-bot@chromium.org488a3372013-08-07 17:03:09 +000070 draw_checks(&canvasTmp, 40, 40);
senorblanco@chromium.orgef843cd2011-12-02 19:11:17 +000071
72 for (unsigned i = 0; i < NUM_CONFIGS; ++i) {
commit-bot@chromium.org8a2ad3c2014-02-23 03:59:35 +000073 src.copyTo(&fDst[i], gColorTypes[i]);
senorblanco@chromium.orgef843cd2011-12-02 19:11:17 +000074 }
75
caryclark65cdba62015-06-15 06:51:08 -070076 canvas->clear(sk_tool_utils::color_to_565(0xFFDDDDDD));
senorblanco@chromium.orgef843cd2011-12-02 19:11:17 +000077 paint.setAntiAlias(true);
caryclark1818acb2015-07-24 12:09:25 -070078 sk_tool_utils::set_portable_typeface(&paint);
halcanary9d524f22016-03-29 09:03:52 -070079
senorblanco@chromium.orgef843cd2011-12-02 19:11:17 +000080 SkScalar width = SkIntToScalar(40);
81 SkScalar height = SkIntToScalar(40);
82 if (paint.getFontSpacing() > height) {
83 height = paint.getFontSpacing();
84 }
85 for (unsigned i = 0; i < NUM_CONFIGS; i++) {
commit-bot@chromium.org8a2ad3c2014-02-23 03:59:35 +000086 const char* name = gColorTypeNames[src.colorType()];
senorblanco@chromium.orgef843cd2011-12-02 19:11:17 +000087 SkScalar textWidth = paint.measureText(name, strlen(name));
88 if (textWidth > width) {
89 width = textWidth;
90 }
91 }
92 SkScalar horizOffset = width + horizMargin;
93 SkScalar vertOffset = height + vertMargin;
94 canvas->translate(SkIntToScalar(20), SkIntToScalar(20));
95
96 for (unsigned i = 0; i < NUM_CONFIGS; i++) {
97 canvas->save();
98 // Draw destination config name
commit-bot@chromium.org8a2ad3c2014-02-23 03:59:35 +000099 const char* name = gColorTypeNames[fDst[i].colorType()];
senorblanco@chromium.orgef843cd2011-12-02 19:11:17 +0000100 SkScalar textWidth = paint.measureText(name, strlen(name));
101 SkScalar x = (width - textWidth) / SkScalar(2);
102 SkScalar y = paint.getFontSpacing() / SkScalar(2);
103 canvas->drawText(name, strlen(name), x, y, paint);
104
105 // Draw destination bitmap
106 canvas->translate(0, vertOffset);
107 x = (width - 40) / SkScalar(2);
108 canvas->drawBitmap(fDst[i], x, 0, &paint);
109 canvas->restore();
110
111 canvas->translate(horizOffset, 0);
112 }
113 }
114
senorblanco@chromium.orgef843cd2011-12-02 19:11:17 +0000115private:
116 typedef GM INHERITED;
117};
118
119//////////////////////////////////////////////////////////////////////////////
120
121static GM* MyFactory(void*) { return new BitmapCopyGM; }
122static GMRegistry reg(MyFactory);
senorblanco@chromium.orgef843cd2011-12-02 19:11:17 +0000123}