| Index: gm/lattice.cpp
|
| diff --git a/gm/lattice.cpp b/gm/lattice.cpp
|
| index 919fb3588e7dde16ec073b487ec0a5e66abcc8ee..46c5a9498966a9dcf62545ec312958adad4d2f33 100644
|
| --- a/gm/lattice.cpp
|
| +++ b/gm/lattice.cpp
|
| @@ -8,31 +8,39 @@
|
| #include "gm.h"
|
| #include "SkSurface.h"
|
|
|
| -static sk_sp<SkSurface> make_surface(SkCanvas* root, int N) {
|
| - SkImageInfo info = SkImageInfo::MakeN32Premul(N, N);
|
| +static sk_sp<SkSurface> make_surface(SkCanvas* root, int N, int padLeft, int padTop,
|
| + int padRight, int padBottom) {
|
| + SkImageInfo info = SkImageInfo::MakeN32Premul(N + padLeft + padRight, N + padTop + padBottom);
|
| auto surface = root->makeSurface(info);
|
| if (!surface) {
|
| surface = SkSurface::MakeRaster(info);
|
| }
|
| +
|
| return surface;
|
| }
|
|
|
| -static sk_sp<SkImage> make_image(SkCanvas* root, int* xDivs, int* yDivs) {
|
| +static sk_sp<SkImage> make_image(SkCanvas* root, int* xDivs, int* yDivs, int padLeft, int padTop,
|
| + int padRight, int padBottom) {
|
| const int kCap = 28;
|
| const int kMid = 8;
|
| const int kSize = 2*kCap + 3*kMid;
|
|
|
| - auto surface(make_surface(root, kSize));
|
| + auto surface(make_surface(root, kSize, padLeft, padTop, padRight, padBottom));
|
| SkCanvas* canvas = surface->getCanvas();
|
| + canvas->translate((float) padLeft, (float) padTop);
|
|
|
| SkRect r = SkRect::MakeWH(SkIntToScalar(kSize), SkIntToScalar(kSize));
|
| const SkScalar strokeWidth = SkIntToScalar(6);
|
| const SkScalar radius = SkIntToScalar(kCap) - strokeWidth/2;
|
|
|
| - xDivs[0] = yDivs[0] = kCap;
|
| - xDivs[1] = yDivs[1] = kCap + kMid;
|
| - xDivs[2] = yDivs[2] = kCap + 2 * kMid;
|
| - xDivs[3] = yDivs[3] = kCap + 3 * kMid;
|
| + xDivs[0] = kCap + padLeft;
|
| + yDivs[0] = kCap + padTop;
|
| + xDivs[1] = kCap + kMid + padLeft;
|
| + yDivs[1] = kCap + kMid + padTop;
|
| + xDivs[2] = kCap + 2 * kMid + padLeft;
|
| + yDivs[2] = kCap + 2 * kMid + padTop;
|
| + xDivs[3] = kCap + 3 * kMid + padLeft;
|
| + yDivs[3] = kCap + 3 * kMid + padTop;
|
|
|
| SkPaint paint;
|
| paint.setAntiAlias(true);
|
| @@ -83,17 +91,20 @@ protected:
|
| }
|
|
|
| SkISize onISize() override {
|
| - return SkISize::Make(800, 400);
|
| + return SkISize::Make(800, 800);
|
| }
|
|
|
| - void onDraw(SkCanvas* canvas) override {
|
| + void onDrawHelper(SkCanvas* canvas, int padLeft, int padTop, int padRight, int padBottom) {
|
| + canvas->save();
|
| +
|
| int xDivs[5];
|
| int yDivs[5];
|
| - xDivs[0] = 0;
|
| - yDivs[0] = 0;
|
| + xDivs[0] = padLeft;
|
| + yDivs[0] = padTop;
|
|
|
| SkBitmap bitmap;
|
| - sk_sp<SkImage> image = make_image(canvas, xDivs + 1, yDivs + 1);
|
| + sk_sp<SkImage> image = make_image(canvas, xDivs + 1, yDivs + 1, padLeft, padTop,
|
| + padRight, padBottom);
|
| image_to_bitmap(image.get(), &bitmap);
|
|
|
| const SkTSize<SkScalar> size[] = {
|
| @@ -115,6 +126,11 @@ protected:
|
| lattice.fYDivs = yDivs + 1;
|
| lattice.fFlags = nullptr;
|
|
|
| + SkIRect bounds = SkIRect::MakeLTRB(padLeft, padTop,
|
| + image->width() - padRight, image->height() - padBottom);
|
| + lattice.fBounds = (bounds == SkIRect::MakeWH(image->width(), image->height())) ?
|
| + nullptr : &bounds;
|
| +
|
| for (int iy = 0; iy < 2; ++iy) {
|
| for (int ix = 0; ix < 2; ++ix) {
|
| int i = ix * 2 + iy;
|
| @@ -149,6 +165,14 @@ protected:
|
| canvas->drawImageLattice(image.get(), lattice, r);
|
| }
|
| }
|
| +
|
| + canvas->restore();
|
| + }
|
| +
|
| + void onDraw(SkCanvas* canvas) override {
|
| + this->onDrawHelper(canvas, 0, 0, 0, 0);
|
| + canvas->translate(0.0f, 400.0f);
|
| + this->onDrawHelper(canvas, 3, 7, 4, 11);
|
| }
|
|
|
| private:
|
|
|