Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(45)

Unified Diff: gm/ninepatchstretch.cpp

Issue 1211583003: add drawImageNine (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: address comments from #9 Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | gyp/core.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gm/ninepatchstretch.cpp
diff --git a/gm/ninepatchstretch.cpp b/gm/ninepatchstretch.cpp
index 5031480aa5be21734becef5bc0b9d29850923573..267c41587b3aeb6b11ea9811618bce0a03c1fba5 100644
--- a/gm/ninepatchstretch.cpp
+++ b/gm/ninepatchstretch.cpp
@@ -6,15 +6,24 @@
*/
#include "gm.h"
+#include "SkSurface.h"
-static void make_bitmap(SkBitmap* bitmap, SkIRect* center) {
+static SkSurface* make_surface(SkCanvas* root, int N) {
+ SkImageInfo info = SkImageInfo::MakeN32Premul(N, N);
+ SkSurface* surface = root->newSurface(info);
+ if (!surface) {
+ surface = SkSurface::NewRaster(info);
+ }
+ return surface;
+}
+
+static SkImage* make_image(SkCanvas* root, SkIRect* center) {
const int kFixed = 28;
const int kStretchy = 8;
const int kSize = 2*kFixed + kStretchy;
- bitmap->allocN32Pixels(kSize, kSize);
- SkCanvas canvas(*bitmap);
- canvas.clear(SK_ColorTRANSPARENT);
+ SkAutoTUnref<SkSurface> surface(make_surface(root, kSize));
+ SkCanvas* canvas = surface->getCanvas();
SkRect r = SkRect::MakeWH(SkIntToScalar(kSize), SkIntToScalar(kSize));
const SkScalar strokeWidth = SkIntToScalar(6);
@@ -26,39 +35,48 @@ static void make_bitmap(SkBitmap* bitmap, SkIRect* center) {
paint.setAntiAlias(true);
paint.setColor(0xFFFF0000);
- canvas.drawRoundRect(r, radius, radius, paint);
+ canvas->drawRoundRect(r, radius, radius, paint);
r.setXYWH(SkIntToScalar(kFixed), 0, SkIntToScalar(kStretchy), SkIntToScalar(kSize));
paint.setColor(0x8800FF00);
- canvas.drawRect(r, paint);
+ canvas->drawRect(r, paint);
r.setXYWH(0, SkIntToScalar(kFixed), SkIntToScalar(kSize), SkIntToScalar(kStretchy));
paint.setColor(0x880000FF);
- canvas.drawRect(r, paint);
+ canvas->drawRect(r, paint);
+
+ return surface->newImageSnapshot();
}
-namespace skiagm {
+static void image_to_bitmap(const SkImage* image, SkBitmap* bm) {
+ SkImageInfo info = SkImageInfo::MakeN32Premul(image->width(), image->height());
+ bm->allocPixels(info);
+ image->readPixels(info, bm->getPixels(), bm->rowBytes(), 0, 0);
+}
-class NinePatchStretchGM : public GM {
+class NinePatchStretchGM : public skiagm::GM {
public:
- SkBitmap fBM;
+ SkAutoTUnref<SkImage> fImage;
+ SkBitmap fBitmap;
+ SkIRect fCenter;
NinePatchStretchGM() {}
protected:
- virtual SkString onShortName() {
+ SkString onShortName() override {
return SkString("ninepatch-stretch");
}
- virtual SkISize onISize() {
- return SkISize::Make(400, 400);
+ SkISize onISize() override {
+ return SkISize::Make(760, 400);
}
- virtual void onDraw(SkCanvas* canvas) {
- SkBitmap bm;
- SkIRect center;
- make_bitmap(&bm, &center);
+ void onDraw(SkCanvas* canvas) override {
+ if (NULL == fBitmap.pixelRef()) {
+ fImage.reset(make_image(canvas, &fCenter));
+ image_to_bitmap(fImage, &fBitmap);
+ }
// amount of bm that should not be stretched (unless we have to)
- const SkScalar fixed = SkIntToScalar(bm.width() - center.width());
+ const SkScalar fixed = SkIntToScalar(fBitmap.width() - fCenter.width());
const SkTSize<SkScalar> size[] = {
{ fixed * 4 / 5, fixed * 4 / 5 }, // shrink in both axes
@@ -67,7 +85,7 @@ protected:
{ fixed * 4, fixed * 4 }
};
- canvas->drawBitmap(bm, SkIntToScalar(10), SkIntToScalar(10), NULL);
+ canvas->drawBitmap(fBitmap, 10, 10, NULL);
SkScalar x = SkIntToScalar(100);
SkScalar y = SkIntToScalar(100);
@@ -80,18 +98,15 @@ protected:
int i = ix * 2 + iy;
SkRect r = SkRect::MakeXYWH(x + ix * fixed, y + iy * fixed,
size[i].width(), size[i].height());
- canvas->drawBitmapNine(bm, center, r, &paint);
+ canvas->drawBitmapNine(fBitmap, fCenter, r, &paint);
+ canvas->drawImageNine(fImage, fCenter, r.makeOffset(360, 0), &paint);
+
}
}
}
private:
- typedef GM INHERITED;
+ typedef skiagm::GM INHERITED;
};
+DEF_GM( return new NinePatchStretchGM; )
-//////////////////////////////////////////////////////////////////////////////
-
-static GM* MyFactory(void*) { return new NinePatchStretchGM; }
-static GMRegistry reg(MyFactory);
-
-}
« no previous file with comments | « no previous file | gyp/core.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698