OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2016 Google Inc. | 2 * Copyright 2016 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "gm.h" | 8 #include "gm.h" |
9 #include "SkSurface.h" | 9 #include "SkSurface.h" |
10 | 10 |
11 static sk_sp<SkSurface> make_surface(SkCanvas* root, int N) { | 11 static sk_sp<SkSurface> make_surface(SkCanvas* root, int N, int padLeft, int pad
Top, |
12 SkImageInfo info = SkImageInfo::MakeN32Premul(N, N); | 12 int padRight, int padBottom) { |
| 13 SkImageInfo info = SkImageInfo::MakeN32Premul(N + padLeft + padRight, N + pa
dTop + padBottom); |
13 auto surface = root->makeSurface(info); | 14 auto surface = root->makeSurface(info); |
14 if (!surface) { | 15 if (!surface) { |
15 surface = SkSurface::MakeRaster(info); | 16 surface = SkSurface::MakeRaster(info); |
16 } | 17 } |
| 18 |
17 return surface; | 19 return surface; |
18 } | 20 } |
19 | 21 |
20 static sk_sp<SkImage> make_image(SkCanvas* root, int* xDivs, int* yDivs) { | 22 static sk_sp<SkImage> make_image(SkCanvas* root, int* xDivs, int* yDivs, int pad
Left, int padTop, |
| 23 int padRight, int padBottom) { |
21 const int kCap = 28; | 24 const int kCap = 28; |
22 const int kMid = 8; | 25 const int kMid = 8; |
23 const int kSize = 2*kCap + 3*kMid; | 26 const int kSize = 2*kCap + 3*kMid; |
24 | 27 |
25 auto surface(make_surface(root, kSize)); | 28 auto surface(make_surface(root, kSize, padLeft, padTop, padRight, padBottom)
); |
26 SkCanvas* canvas = surface->getCanvas(); | 29 SkCanvas* canvas = surface->getCanvas(); |
| 30 canvas->translate((float) padLeft, (float) padTop); |
27 | 31 |
28 SkRect r = SkRect::MakeWH(SkIntToScalar(kSize), SkIntToScalar(kSize)); | 32 SkRect r = SkRect::MakeWH(SkIntToScalar(kSize), SkIntToScalar(kSize)); |
29 const SkScalar strokeWidth = SkIntToScalar(6); | 33 const SkScalar strokeWidth = SkIntToScalar(6); |
30 const SkScalar radius = SkIntToScalar(kCap) - strokeWidth/2; | 34 const SkScalar radius = SkIntToScalar(kCap) - strokeWidth/2; |
31 | 35 |
32 xDivs[0] = yDivs[0] = kCap; | 36 xDivs[0] = kCap + padLeft; |
33 xDivs[1] = yDivs[1] = kCap + kMid; | 37 yDivs[0] = kCap + padTop; |
34 xDivs[2] = yDivs[2] = kCap + 2 * kMid; | 38 xDivs[1] = kCap + kMid + padLeft; |
35 xDivs[3] = yDivs[3] = kCap + 3 * kMid; | 39 yDivs[1] = kCap + kMid + padTop; |
| 40 xDivs[2] = kCap + 2 * kMid + padLeft; |
| 41 yDivs[2] = kCap + 2 * kMid + padTop; |
| 42 xDivs[3] = kCap + 3 * kMid + padLeft; |
| 43 yDivs[3] = kCap + 3 * kMid + padTop; |
36 | 44 |
37 SkPaint paint; | 45 SkPaint paint; |
38 paint.setAntiAlias(true); | 46 paint.setAntiAlias(true); |
39 | 47 |
40 paint.setColor(0xFFFFFF00); | 48 paint.setColor(0xFFFFFF00); |
41 canvas->drawRoundRect(r, radius, radius, paint); | 49 canvas->drawRoundRect(r, radius, radius, paint); |
42 | 50 |
43 r.setXYWH(SkIntToScalar(kCap), 0, SkIntToScalar(kMid), SkIntToScalar(kSize))
; | 51 r.setXYWH(SkIntToScalar(kCap), 0, SkIntToScalar(kMid), SkIntToScalar(kSize))
; |
44 paint.setColor(0x8800FF00); | 52 paint.setColor(0x8800FF00); |
45 canvas->drawRect(r, paint); | 53 canvas->drawRect(r, paint); |
(...skipping 30 matching lines...) Expand all Loading... |
76 class LatticeGM : public skiagm::GM { | 84 class LatticeGM : public skiagm::GM { |
77 public: | 85 public: |
78 LatticeGM() {} | 86 LatticeGM() {} |
79 | 87 |
80 protected: | 88 protected: |
81 SkString onShortName() override { | 89 SkString onShortName() override { |
82 return SkString("lattice"); | 90 return SkString("lattice"); |
83 } | 91 } |
84 | 92 |
85 SkISize onISize() override { | 93 SkISize onISize() override { |
86 return SkISize::Make(800, 400); | 94 return SkISize::Make(800, 800); |
87 } | 95 } |
88 | 96 |
89 void onDraw(SkCanvas* canvas) override { | 97 void onDrawHelper(SkCanvas* canvas, int padLeft, int padTop, int padRight, i
nt padBottom) { |
| 98 canvas->save(); |
| 99 |
90 int xDivs[5]; | 100 int xDivs[5]; |
91 int yDivs[5]; | 101 int yDivs[5]; |
92 xDivs[0] = 0; | 102 xDivs[0] = padLeft; |
93 yDivs[0] = 0; | 103 yDivs[0] = padTop; |
94 | 104 |
95 SkBitmap bitmap; | 105 SkBitmap bitmap; |
96 sk_sp<SkImage> image = make_image(canvas, xDivs + 1, yDivs + 1); | 106 sk_sp<SkImage> image = make_image(canvas, xDivs + 1, yDivs + 1, padLeft,
padTop, |
| 107 padRight, padBottom); |
97 image_to_bitmap(image.get(), &bitmap); | 108 image_to_bitmap(image.get(), &bitmap); |
98 | 109 |
99 const SkTSize<SkScalar> size[] = { | 110 const SkTSize<SkScalar> size[] = { |
100 { 50, 50, }, // shrink in both axes | 111 { 50, 50, }, // shrink in both axes |
101 { 50, 200, }, // shrink in X | 112 { 50, 200, }, // shrink in X |
102 { 200, 50, }, // shrink in Y | 113 { 200, 50, }, // shrink in Y |
103 { 200, 200, }, | 114 { 200, 200, }, |
104 }; | 115 }; |
105 | 116 |
106 canvas->drawImage(image, 10, 10, nullptr); | 117 canvas->drawImage(image, 10, 10, nullptr); |
107 | 118 |
108 SkScalar x = SkIntToScalar(100); | 119 SkScalar x = SkIntToScalar(100); |
109 SkScalar y = SkIntToScalar(100); | 120 SkScalar y = SkIntToScalar(100); |
110 | 121 |
111 SkCanvas::Lattice lattice; | 122 SkCanvas::Lattice lattice; |
112 lattice.fXCount = 4; | 123 lattice.fXCount = 4; |
113 lattice.fXDivs = xDivs + 1; | 124 lattice.fXDivs = xDivs + 1; |
114 lattice.fYCount = 4; | 125 lattice.fYCount = 4; |
115 lattice.fYDivs = yDivs + 1; | 126 lattice.fYDivs = yDivs + 1; |
116 lattice.fFlags = nullptr; | 127 lattice.fFlags = nullptr; |
| 128 lattice.fBounds = SkIRect::MakeLTRB(padLeft, padTop, |
| 129 image->width() - padRight, image->he
ight() - padBottom); |
117 | 130 |
118 for (int iy = 0; iy < 2; ++iy) { | 131 for (int iy = 0; iy < 2; ++iy) { |
119 for (int ix = 0; ix < 2; ++ix) { | 132 for (int ix = 0; ix < 2; ++ix) { |
120 int i = ix * 2 + iy; | 133 int i = ix * 2 + iy; |
121 SkRect r = SkRect::MakeXYWH(x + ix * 60, y + iy * 60, | 134 SkRect r = SkRect::MakeXYWH(x + ix * 60, y + iy * 60, |
122 size[i].width(), size[i].height()); | 135 size[i].width(), size[i].height()); |
123 canvas->drawBitmapLattice(bitmap, lattice, r); | 136 canvas->drawBitmapLattice(bitmap, lattice, r); |
124 } | 137 } |
125 } | 138 } |
126 | 139 |
(...skipping 15 matching lines...) Expand all Loading... |
142 | 155 |
143 canvas->translate(400, 0); | 156 canvas->translate(400, 0); |
144 for (int iy = 0; iy < 2; ++iy) { | 157 for (int iy = 0; iy < 2; ++iy) { |
145 for (int ix = 0; ix < 2; ++ix) { | 158 for (int ix = 0; ix < 2; ++ix) { |
146 int i = ix * 2 + iy; | 159 int i = ix * 2 + iy; |
147 SkRect r = SkRect::MakeXYWH(x + ix * 60, y + iy * 60, | 160 SkRect r = SkRect::MakeXYWH(x + ix * 60, y + iy * 60, |
148 size[i].width(), size[i].height()); | 161 size[i].width(), size[i].height()); |
149 canvas->drawImageLattice(image.get(), lattice, r); | 162 canvas->drawImageLattice(image.get(), lattice, r); |
150 } | 163 } |
151 } | 164 } |
| 165 |
| 166 canvas->restore(); |
| 167 } |
| 168 |
| 169 void onDraw(SkCanvas* canvas) override { |
| 170 this->onDrawHelper(canvas, 0, 0, 0, 0); |
| 171 canvas->translate(0.0f, 400.0f); |
| 172 this->onDrawHelper(canvas, 3, 7, 4, 11); |
152 } | 173 } |
153 | 174 |
154 private: | 175 private: |
155 typedef skiagm::GM INHERITED; | 176 typedef skiagm::GM INHERITED; |
156 }; | 177 }; |
157 DEF_GM( return new LatticeGM; ) | 178 DEF_GM( return new LatticeGM; ) |
OLD | NEW |