blob: a14af00a4e99b7ccf93c71b2ca5d7503ee8f5c99 [file] [log] [blame]
reed@google.comb6705252011-09-06 19:23:41 +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
8#include "gm.h"
9
commit-bot@chromium.org78733332014-01-22 14:43:47 +000010static void make_bitmap(SkBitmap* bitmap, SkIRect* center) {
reed@google.comb6705252011-09-06 19:23:41 +000011 const int kFixed = 28;
12 const int kStretchy = 8;
13 const int kSize = 2*kFixed + kStretchy;
bsalomon@google.comcf8fb1f2012-08-02 14:03:32 +000014
reed@google.comeb9a46c2014-01-25 16:46:20 +000015 bitmap->allocN32Pixels(kSize, kSize);
commit-bot@chromium.orgbda591c2014-02-13 15:29:03 +000016 SkBaseDevice* dev = new SkBitmapDevice(*bitmap);
17
18 SkCanvas canvas(dev);
19 dev->unref();
junov@google.comdbfac8a2012-12-06 21:47:40 +000020 canvas.clear(SK_ColorTRANSPARENT);
rmistry@google.comd6176b02012-08-23 18:14:13 +000021
reed@google.comb6705252011-09-06 19:23:41 +000022 SkRect r = SkRect::MakeWH(SkIntToScalar(kSize), SkIntToScalar(kSize));
23 const SkScalar strokeWidth = SkIntToScalar(6);
24 const SkScalar radius = SkIntToScalar(kFixed) - strokeWidth/2;
rmistry@google.comd6176b02012-08-23 18:14:13 +000025
reed@google.comb6705252011-09-06 19:23:41 +000026 center->setXYWH(kFixed, kFixed, kStretchy, kStretchy);
rmistry@google.comd6176b02012-08-23 18:14:13 +000027
reed@google.comb6705252011-09-06 19:23:41 +000028 SkPaint paint;
29 paint.setAntiAlias(true);
rmistry@google.comd6176b02012-08-23 18:14:13 +000030
reed@google.comb6705252011-09-06 19:23:41 +000031 paint.setColor(0xFFFF0000);
32 canvas.drawRoundRect(r, radius, radius, paint);
33 r.setXYWH(SkIntToScalar(kFixed), 0, SkIntToScalar(kStretchy), SkIntToScalar(kSize));
34 paint.setColor(0x8800FF00);
35 canvas.drawRect(r, paint);
36 r.setXYWH(0, SkIntToScalar(kFixed), SkIntToScalar(kSize), SkIntToScalar(kStretchy));
37 paint.setColor(0x880000FF);
38 canvas.drawRect(r, paint);
39}
40
41namespace skiagm {
rmistry@google.comd6176b02012-08-23 18:14:13 +000042
reed@google.comb6705252011-09-06 19:23:41 +000043class NinePatchStretchGM : public GM {
44public:
45 SkBitmap fBM;
46
rmistry@google.comd6176b02012-08-23 18:14:13 +000047 NinePatchStretchGM() {}
reed@google.comb6705252011-09-06 19:23:41 +000048
49protected:
50 virtual SkString onShortName() {
51 return SkString("ninepatch-stretch");
52 }
53
rmistry@google.comd6176b02012-08-23 18:14:13 +000054 virtual SkISize onISize() {
reed@google.comb6705252011-09-06 19:23:41 +000055 return make_isize(400, 400);
56 }
57
reed@google.comb6705252011-09-06 19:23:41 +000058 virtual void onDraw(SkCanvas* canvas) {
reed@google.comb6705252011-09-06 19:23:41 +000059 SkBitmap bm;
60 SkIRect center;
commit-bot@chromium.org78733332014-01-22 14:43:47 +000061 make_bitmap(&bm, &center);
rmistry@google.comd6176b02012-08-23 18:14:13 +000062
reed@google.comb6705252011-09-06 19:23:41 +000063 // amount of bm that should not be stretched (unless we have to)
64 const SkScalar fixed = SkIntToScalar(bm.width() - center.width());
rmistry@google.comd6176b02012-08-23 18:14:13 +000065
reed@google.comb6705252011-09-06 19:23:41 +000066 const SkTSize<SkScalar> size[] = {
67 { fixed * 4 / 5, fixed * 4 / 5 }, // shrink in both axes
68 { fixed * 4 / 5, fixed * 4 }, // shrink in X
69 { fixed * 4, fixed * 4 / 5 }, // shrink in Y
70 { fixed * 4, fixed * 4 }
71 };
rmistry@google.comd6176b02012-08-23 18:14:13 +000072
reed@google.comb6705252011-09-06 19:23:41 +000073 canvas->drawBitmap(bm, SkIntToScalar(10), SkIntToScalar(10), NULL);
rmistry@google.comd6176b02012-08-23 18:14:13 +000074
reed@google.comb6705252011-09-06 19:23:41 +000075 SkScalar x = SkIntToScalar(100);
76 SkScalar y = SkIntToScalar(100);
rmistry@google.comd6176b02012-08-23 18:14:13 +000077
reed@google.comb6705252011-09-06 19:23:41 +000078 SkPaint paint;
reed@google.com44699382013-10-31 17:28:30 +000079 paint.setFilterLevel(SkPaint::kLow_FilterLevel);
rmistry@google.comd6176b02012-08-23 18:14:13 +000080
reed@google.comb6705252011-09-06 19:23:41 +000081 for (int iy = 0; iy < 2; ++iy) {
82 for (int ix = 0; ix < 2; ++ix) {
83 int i = ix * 2 + iy;
84 SkRect r = SkRect::MakeXYWH(x + ix * fixed, y + iy * fixed,
85 size[i].width(), size[i].height());
reed@google.com9c9b8d92011-09-07 12:27:43 +000086 canvas->drawBitmapNine(bm, center, r, &paint);
reed@google.comb6705252011-09-06 19:23:41 +000087 }
88 }
89 }
rmistry@google.comd6176b02012-08-23 18:14:13 +000090
reed@google.comb6705252011-09-06 19:23:41 +000091private:
92 typedef GM INHERITED;
93};
94
95//////////////////////////////////////////////////////////////////////////////
96
97static GM* MyFactory(void*) { return new NinePatchStretchGM; }
98static GMRegistry reg(MyFactory);
99
100}