| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 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 <functional> | 8 #include <functional> |
| 9 #include "gm.h" | 9 #include "gm.h" |
| 10 #include "SkAutoPixmapStorage.h" | 10 #include "SkAutoPixmapStorage.h" |
| 11 #include "SkData.h" | 11 #include "SkData.h" |
| 12 #include "SkCanvas.h" | 12 #include "SkCanvas.h" |
| 13 #include "SkRandom.h" | 13 #include "SkRandom.h" |
| 14 #include "SkStream.h" | 14 #include "SkStream.h" |
| 15 #include "SkSurface.h" | 15 #include "SkSurface.h" |
| 16 | 16 |
| 17 #if SK_SUPPORT_GPU | 17 #if SK_SUPPORT_GPU |
| 18 #include "GrContext.h" | 18 #include "GrContext.h" |
| 19 #endif | 19 #endif |
| 20 | 20 |
| 21 static void drawJpeg(SkCanvas* canvas, const SkISize& size) { | 21 static void drawJpeg(SkCanvas* canvas, const SkISize& size) { |
| 22 // TODO: Make this draw a file that is checked in, so it can | 22 // TODO: Make this draw a file that is checked in, so it can |
| 23 // be exercised on machines other than mike's. Will require a | 23 // be exercised on machines other than mike's. Will require a |
| 24 // rebaseline. | 24 // rebaseline. |
| 25 SkAutoDataUnref data(SkData::NewFromFileName("/Users/mike/Downloads/skia.goo
gle.jpeg")); | 25 sk_sp<SkData> data(SkData::MakeFromFileName("/Users/mike/Downloads/skia.goog
le.jpeg")); |
| 26 if (nullptr == data.get()) { | 26 if (nullptr == data) { |
| 27 return; | 27 return; |
| 28 } | 28 } |
| 29 SkImage* image = SkImage::NewFromEncoded(data); | 29 sk_sp<SkImage> image = SkImage::MakeFromEncoded(std::move(data)); |
| 30 if (image) { | 30 if (image) { |
| 31 SkAutoCanvasRestore acr(canvas, true); | 31 SkAutoCanvasRestore acr(canvas, true); |
| 32 canvas->scale(size.width() * 1.0f / image->width(), | 32 canvas->scale(size.width() * 1.0f / image->width(), |
| 33 size.height() * 1.0f / image->height()); | 33 size.height() * 1.0f / image->height()); |
| 34 canvas->drawImage(image, 0, 0, nullptr); | 34 canvas->drawImage(image, 0, 0, nullptr); |
| 35 image->unref(); | |
| 36 } | 35 } |
| 37 } | 36 } |
| 38 | 37 |
| 39 static void drawContents(SkSurface* surface, SkColor fillC) { | 38 static void drawContents(SkSurface* surface, SkColor fillC) { |
| 40 SkSize size = SkSize::Make(SkIntToScalar(surface->width()), | 39 SkSize size = SkSize::Make(SkIntToScalar(surface->width()), |
| 41 SkIntToScalar(surface->height())); | 40 SkIntToScalar(surface->height())); |
| 42 SkCanvas* canvas = surface->getCanvas(); | 41 SkCanvas* canvas = surface->getCanvas(); |
| 43 | 42 |
| 44 SkScalar stroke = size.fWidth / 10; | 43 SkScalar stroke = size.fWidth / 10; |
| 45 SkScalar radius = (size.fWidth - stroke) / 2; | 44 SkScalar radius = (size.fWidth - stroke) / 2; |
| 46 | 45 |
| 47 SkPaint paint; | 46 SkPaint paint; |
| 48 | 47 |
| 49 paint.setAntiAlias(true); | 48 paint.setAntiAlias(true); |
| 50 paint.setColor(fillC); | 49 paint.setColor(fillC); |
| 51 canvas->drawCircle(size.fWidth/2, size.fHeight/2, radius, paint); | 50 canvas->drawCircle(size.fWidth/2, size.fHeight/2, radius, paint); |
| 52 | 51 |
| 53 paint.setStyle(SkPaint::kStroke_Style); | 52 paint.setStyle(SkPaint::kStroke_Style); |
| 54 paint.setStrokeWidth(stroke); | 53 paint.setStrokeWidth(stroke); |
| 55 paint.setColor(SK_ColorBLACK); | 54 paint.setColor(SK_ColorBLACK); |
| 56 canvas->drawCircle(size.fWidth/2, size.fHeight/2, radius, paint); | 55 canvas->drawCircle(size.fWidth/2, size.fHeight/2, radius, paint); |
| 57 } | 56 } |
| 58 | 57 |
| 59 static void test_surface(SkCanvas* canvas, SkSurface* surf, bool usePaint) { | 58 static void test_surface(SkCanvas* canvas, SkSurface* surf, bool usePaint) { |
| 60 drawContents(surf, SK_ColorRED); | 59 drawContents(surf, SK_ColorRED); |
| 61 SkImage* imgR = surf->newImageSnapshot(); | 60 sk_sp<SkImage> imgR = surf->makeImageSnapshot(); |
| 62 | 61 |
| 63 if (true) { | 62 if (true) { |
| 64 SkImage* imgR2 = surf->newImageSnapshot(); | 63 sk_sp<SkImage> imgR2 = surf->makeImageSnapshot(); |
| 65 SkASSERT(imgR == imgR2); | 64 SkASSERT(imgR == imgR2); |
| 66 imgR2->unref(); | |
| 67 } | 65 } |
| 68 | 66 |
| 69 drawContents(surf, SK_ColorGREEN); | 67 drawContents(surf, SK_ColorGREEN); |
| 70 SkImage* imgG = surf->newImageSnapshot(); | 68 sk_sp<SkImage> imgG = surf->makeImageSnapshot(); |
| 71 | 69 |
| 72 // since we've drawn after we snapped imgR, imgG will be a different obj | 70 // since we've drawn after we snapped imgR, imgG will be a different obj |
| 73 SkASSERT(imgR != imgG); | 71 SkASSERT(imgR != imgG); |
| 74 | 72 |
| 75 drawContents(surf, SK_ColorBLUE); | 73 drawContents(surf, SK_ColorBLUE); |
| 76 | 74 |
| 77 SkPaint paint; | 75 SkPaint paint; |
| 78 // paint.setFilterBitmap(true); | 76 // paint.setFilterBitmap(true); |
| 79 // paint.setAlpha(0x80); | 77 // paint.setAlpha(0x80); |
| 80 | 78 |
| 81 canvas->drawImage(imgR, 0, 0, usePaint ? &paint : nullptr); | 79 canvas->drawImage(imgR.get(), 0, 0, usePaint ? &paint : nullptr); |
| 82 canvas->drawImage(imgG, 0, 80, usePaint ? &paint : nullptr); | 80 canvas->drawImage(imgG.get(), 0, 80, usePaint ? &paint : nullptr); |
| 83 surf->draw(canvas, 0, 160, usePaint ? &paint : nullptr); | 81 surf->draw(canvas, 0, 160, usePaint ? &paint : nullptr); |
| 84 | 82 |
| 85 SkRect src1, src2, src3; | 83 SkRect src1, src2, src3; |
| 86 src1.iset(0, 0, surf->width(), surf->height()); | 84 src1.iset(0, 0, surf->width(), surf->height()); |
| 87 src2.iset(-surf->width() / 2, -surf->height() / 2, | 85 src2.iset(-surf->width() / 2, -surf->height() / 2, |
| 88 surf->width(), surf->height()); | 86 surf->width(), surf->height()); |
| 89 src3.iset(0, 0, surf->width() / 2, surf->height() / 2); | 87 src3.iset(0, 0, surf->width() / 2, surf->height() / 2); |
| 90 | 88 |
| 91 SkRect dst1, dst2, dst3, dst4; | 89 SkRect dst1, dst2, dst3, dst4; |
| 92 dst1.set(0, 240, 65, 305); | 90 dst1.set(0, 240, 65, 305); |
| 93 dst2.set(0, 320, 65, 385); | 91 dst2.set(0, 320, 65, 385); |
| 94 dst3.set(0, 400, 65, 465); | 92 dst3.set(0, 400, 65, 465); |
| 95 dst4.set(0, 480, 65, 545); | 93 dst4.set(0, 480, 65, 545); |
| 96 | 94 |
| 97 canvas->drawImageRect(imgR, src1, dst1, usePaint ? &paint : nullptr); | 95 canvas->drawImageRect(imgR.get(), src1, dst1, usePaint ? &paint : nullptr); |
| 98 canvas->drawImageRect(imgG, src2, dst2, usePaint ? &paint : nullptr); | 96 canvas->drawImageRect(imgG.get(), src2, dst2, usePaint ? &paint : nullptr); |
| 99 canvas->drawImageRect(imgR, src3, dst3, usePaint ? &paint : nullptr); | 97 canvas->drawImageRect(imgR.get(), src3, dst3, usePaint ? &paint : nullptr); |
| 100 canvas->drawImageRect(imgG, dst4, usePaint ? &paint : nullptr); | 98 canvas->drawImageRect(imgG.get(), dst4, usePaint ? &paint : nullptr); |
| 101 | |
| 102 imgG->unref(); | |
| 103 imgR->unref(); | |
| 104 } | 99 } |
| 105 | 100 |
| 106 class ImageGM : public skiagm::GM { | 101 class ImageGM : public skiagm::GM { |
| 107 void* fBuffer; | 102 void* fBuffer; |
| 108 size_t fBufferSize; | 103 size_t fBufferSize; |
| 109 SkSize fSize; | 104 SkSize fSize; |
| 110 enum { | 105 enum { |
| 111 W = 64, | 106 W = 64, |
| 112 H = 64, | 107 H = 64, |
| 113 RB = W * 4 + 8, | 108 RB = W * 4 + 8, |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 235 } | 230 } |
| 236 } | 231 } |
| 237 | 232 |
| 238 static void draw_contents(SkCanvas* canvas) { | 233 static void draw_contents(SkCanvas* canvas) { |
| 239 SkPaint paint; | 234 SkPaint paint; |
| 240 paint.setStyle(SkPaint::kStroke_Style); | 235 paint.setStyle(SkPaint::kStroke_Style); |
| 241 paint.setStrokeWidth(20); | 236 paint.setStrokeWidth(20); |
| 242 canvas->drawCircle(50, 50, 35, paint); | 237 canvas->drawCircle(50, 50, 35, paint); |
| 243 } | 238 } |
| 244 | 239 |
| 245 static SkImage* make_raster(const SkImageInfo& info, GrContext*, void (*draw)(Sk
Canvas*)) { | 240 static sk_sp<SkImage> make_raster(const SkImageInfo& info, GrContext*, void (*dr
aw)(SkCanvas*)) { |
| 246 SkAutoTUnref<SkSurface> surface(SkSurface::NewRaster(info)); | 241 SkAutoTUnref<SkSurface> surface(SkSurface::NewRaster(info)); |
| 247 draw(surface->getCanvas()); | 242 draw(surface->getCanvas()); |
| 248 return surface->newImageSnapshot(); | 243 return surface->makeImageSnapshot(); |
| 249 } | 244 } |
| 250 | 245 |
| 251 static SkImage* make_picture(const SkImageInfo& info, GrContext*, void (*draw)(S
kCanvas*)) { | 246 static sk_sp<SkImage> make_picture(const SkImageInfo& info, GrContext*, void (*d
raw)(SkCanvas*)) { |
| 252 SkPictureRecorder recorder; | 247 SkPictureRecorder recorder; |
| 253 draw(recorder.beginRecording(SkRect::MakeIWH(info.width(), info.height()))); | 248 draw(recorder.beginRecording(SkRect::MakeIWH(info.width(), info.height()))); |
| 254 SkAutoTUnref<SkPicture> pict(recorder.endRecording()); | 249 SkAutoTUnref<SkPicture> pict(recorder.endRecording()); |
| 255 return SkImage::NewFromPicture(pict, info.dimensions(), nullptr, nullptr); | 250 return SkImage::MakeFromPicture(sk_ref_sp(pict.get()), info.dimensions(), nu
llptr, nullptr); |
| 256 } | 251 } |
| 257 | 252 |
| 258 static SkImage* make_codec(const SkImageInfo& info, GrContext*, void (*draw)(SkC
anvas*)) { | 253 static sk_sp<SkImage> make_codec(const SkImageInfo& info, GrContext*, void (*dra
w)(SkCanvas*)) { |
| 259 SkAutoTUnref<SkImage> image(make_raster(info, nullptr, draw)); | 254 sk_sp<SkImage> image(make_raster(info, nullptr, draw)); |
| 260 SkAutoTUnref<SkData> data(image->encode()); | 255 sk_sp<SkData> data(image->encode()); |
| 261 return SkImage::NewFromEncoded(data); | 256 return SkImage::MakeFromEncoded(data); |
| 262 } | 257 } |
| 263 | 258 |
| 264 static SkImage* make_gpu(const SkImageInfo& info, GrContext* ctx, void (*draw)(S
kCanvas*)) { | 259 static sk_sp<SkImage> make_gpu(const SkImageInfo& info, GrContext* ctx, void (*d
raw)(SkCanvas*)) { |
| 265 if (!ctx) { return nullptr; } | 260 if (!ctx) { return nullptr; } |
| 266 SkAutoTUnref<SkSurface> surface(SkSurface::NewRenderTarget(ctx, SkBudgeted::
kNo, info)); | 261 SkAutoTUnref<SkSurface> surface(SkSurface::NewRenderTarget(ctx, SkBudgeted::
kNo, info)); |
| 267 draw(surface->getCanvas()); | 262 draw(surface->getCanvas()); |
| 268 return surface->newImageSnapshot(); | 263 return surface->makeImageSnapshot(); |
| 269 } | 264 } |
| 270 | 265 |
| 271 typedef SkImage* (*ImageMakerProc)(const SkImageInfo&, GrContext*, void (*)(SkCa
nvas*)); | 266 typedef sk_sp<SkImage> (*ImageMakerProc)(const SkImageInfo&, GrContext*, void (*
)(SkCanvas*)); |
| 272 | 267 |
| 273 class ScalePixelsGM : public skiagm::GM { | 268 class ScalePixelsGM : public skiagm::GM { |
| 274 public: | 269 public: |
| 275 ScalePixelsGM() {} | 270 ScalePixelsGM() {} |
| 276 | 271 |
| 277 protected: | 272 protected: |
| 278 SkString onShortName() override { | 273 SkString onShortName() override { |
| 279 return SkString("scale-pixels"); | 274 return SkString("scale-pixels"); |
| 280 } | 275 } |
| 281 | 276 |
| 282 SkISize onISize() override { | 277 SkISize onISize() override { |
| 283 return SkISize::Make(960, 1200); | 278 return SkISize::Make(960, 1200); |
| 284 } | 279 } |
| 285 | 280 |
| 286 void onDraw(SkCanvas* canvas) override { | 281 void onDraw(SkCanvas* canvas) override { |
| 287 const SkImageInfo info = SkImageInfo::MakeN32Premul(100, 100); | 282 const SkImageInfo info = SkImageInfo::MakeN32Premul(100, 100); |
| 288 | 283 |
| 289 const ImageMakerProc procs[] = { | 284 const ImageMakerProc procs[] = { |
| 290 make_codec, make_raster, make_picture, make_codec, make_gpu, | 285 make_codec, make_raster, make_picture, make_codec, make_gpu, |
| 291 }; | 286 }; |
| 292 for (auto& proc : procs) { | 287 for (auto& proc : procs) { |
| 293 SkAutoTUnref<SkImage> image(proc(info, canvas->getGrContext(), draw_
contents)); | 288 sk_sp<SkImage> image(proc(info, canvas->getGrContext(), draw_content
s)); |
| 294 if (image) { | 289 if (image) { |
| 295 show_scaled_pixels(canvas, image); | 290 show_scaled_pixels(canvas, image.get()); |
| 296 } | 291 } |
| 297 canvas->translate(0, 120); | 292 canvas->translate(0, 120); |
| 298 } | 293 } |
| 299 } | 294 } |
| 300 | 295 |
| 301 private: | 296 private: |
| 302 typedef skiagm::GM INHERITED; | 297 typedef skiagm::GM INHERITED; |
| 303 }; | 298 }; |
| 304 DEF_GM( return new ScalePixelsGM; ) | 299 DEF_GM( return new ScalePixelsGM; ) |
| 305 | 300 |
| (...skipping 29 matching lines...) Expand all Loading... |
| 335 | 330 |
| 336 SkPaint paint; | 331 SkPaint paint; |
| 337 paint.setStyle(SkPaint::kStroke_Style); | 332 paint.setStyle(SkPaint::kStroke_Style); |
| 338 paint.setStrokeWidth(20); | 333 paint.setStrokeWidth(20); |
| 339 canvas->drawCircle(50, 50, 35, paint); | 334 canvas->drawCircle(50, 50, 35, paint); |
| 340 } | 335 } |
| 341 | 336 |
| 342 static SkImageGenerator* gen_raster(const SkImageInfo& info) { | 337 static SkImageGenerator* gen_raster(const SkImageInfo& info) { |
| 343 SkAutoTUnref<SkSurface> surface(SkSurface::NewRaster(info)); | 338 SkAutoTUnref<SkSurface> surface(SkSurface::NewRaster(info)); |
| 344 draw_opaque_contents(surface->getCanvas()); | 339 draw_opaque_contents(surface->getCanvas()); |
| 345 SkAutoTUnref<SkImage> img(surface->newImageSnapshot()); | 340 return new ImageGeneratorFromImage(surface->makeImageSnapshot().get()); |
| 346 return new ImageGeneratorFromImage(img); | |
| 347 } | 341 } |
| 348 | 342 |
| 349 static SkImageGenerator* gen_picture(const SkImageInfo& info) { | 343 static SkImageGenerator* gen_picture(const SkImageInfo& info) { |
| 350 SkPictureRecorder recorder; | 344 SkPictureRecorder recorder; |
| 351 draw_opaque_contents(recorder.beginRecording(SkRect::MakeIWH(info.width(), i
nfo.height()))); | 345 draw_opaque_contents(recorder.beginRecording(SkRect::MakeIWH(info.width(), i
nfo.height()))); |
| 352 SkAutoTUnref<SkPicture> pict(recorder.endRecording()); | 346 SkAutoTUnref<SkPicture> pict(recorder.endRecording()); |
| 353 return SkImageGenerator::NewFromPicture(info.dimensions(), pict, nullptr, nu
llptr); | 347 return SkImageGenerator::NewFromPicture(info.dimensions(), pict, nullptr, nu
llptr); |
| 354 } | 348 } |
| 355 | 349 |
| 356 static SkImageGenerator* gen_png(const SkImageInfo& info) { | 350 static SkImageGenerator* gen_png(const SkImageInfo& info) { |
| 357 SkAutoTUnref<SkImage> image(make_raster(info, nullptr, draw_opaque_contents)
); | 351 sk_sp<SkImage> image(make_raster(info, nullptr, draw_opaque_contents)); |
| 358 SkAutoTUnref<SkData> data(image->encode(SkImageEncoder::kPNG_Type, 100)); | 352 SkAutoTUnref<SkData> data(image->encode(SkImageEncoder::kPNG_Type, 100)); |
| 359 return SkImageGenerator::NewFromEncoded(data); | 353 return SkImageGenerator::NewFromEncoded(data); |
| 360 } | 354 } |
| 361 | 355 |
| 362 static SkImageGenerator* gen_jpg(const SkImageInfo& info) { | 356 static SkImageGenerator* gen_jpg(const SkImageInfo& info) { |
| 363 SkAutoTUnref<SkImage> image(make_raster(info, nullptr, draw_opaque_contents)
); | 357 sk_sp<SkImage> image(make_raster(info, nullptr, draw_opaque_contents)); |
| 364 SkAutoTUnref<SkData> data(image->encode(SkImageEncoder::kJPEG_Type, 100)); | 358 SkAutoTUnref<SkData> data(image->encode(SkImageEncoder::kJPEG_Type, 100)); |
| 365 return SkImageGenerator::NewFromEncoded(data); | 359 return SkImageGenerator::NewFromEncoded(data); |
| 366 } | 360 } |
| 367 | 361 |
| 368 typedef SkImageGenerator* (*GeneratorMakerProc)(const SkImageInfo&); | 362 typedef SkImageGenerator* (*GeneratorMakerProc)(const SkImageInfo&); |
| 369 | 363 |
| 370 static void show_scaled_generator(SkCanvas* canvas, SkImageGenerator* gen) { | 364 static void show_scaled_generator(SkCanvas* canvas, SkImageGenerator* gen) { |
| 371 const SkImageInfo genInfo = gen->getInfo(); | 365 const SkImageInfo genInfo = gen->getInfo(); |
| 372 | 366 |
| 373 SkAutoCanvasRestore acr(canvas, true); | 367 SkAutoCanvasRestore acr(canvas, true); |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 459 paint.setColor(SK_ColorCYAN); | 453 paint.setColor(SK_ColorCYAN); |
| 460 canvas->drawRect(SkRect::MakeXYWH(30.f,30.f,10.f,10.f), paint); | 454 canvas->drawRect(SkRect::MakeXYWH(30.f,30.f,10.f,10.f), paint); |
| 461 }; | 455 }; |
| 462 | 456 |
| 463 static const int kSize = 50; | 457 static const int kSize = 50; |
| 464 SkBitmap bmp; | 458 SkBitmap bmp; |
| 465 bmp.allocN32Pixels(kSize, kSize); | 459 bmp.allocN32Pixels(kSize, kSize); |
| 466 SkCanvas bmpCanvas(bmp); | 460 SkCanvas bmpCanvas(bmp); |
| 467 render_image(&bmpCanvas); | 461 render_image(&bmpCanvas); |
| 468 | 462 |
| 469 std::function<SkImage*()> imageFactories[] = { | 463 std::function<sk_sp<SkImage>()> imageFactories[] = { |
| 470 // Create sw raster image. | 464 // Create sw raster image. |
| 471 [bmp] { | 465 [bmp] { |
| 472 return SkImage::NewFromBitmap(bmp); | 466 return SkImage::MakeFromBitmap(bmp); |
| 473 }, | 467 }, |
| 474 // Create encoded image. | 468 // Create encoded image. |
| 475 [bmp] { | 469 [bmp] { |
| 476 SkAutoTUnref<SkData> src( | 470 sk_sp<SkData> src( |
| 477 SkImageEncoder::EncodeData(bmp, SkImageEncoder::kPNG_Type, 100))
; | 471 SkImageEncoder::EncodeData(bmp, SkImageEncoder::kPNG_Type, 100))
; |
| 478 return SkImage::NewFromEncoded(src); | 472 return SkImage::MakeFromEncoded(std::move(src)); |
| 479 }, | 473 }, |
| 480 // Create a picture image. | 474 // Create a picture image. |
| 481 [render_image] { | 475 [render_image] { |
| 482 SkPictureRecorder recorder; | 476 SkPictureRecorder recorder; |
| 483 SkCanvas* canvas = recorder.beginRecording(SkIntToScalar(kSize), SkI
ntToScalar(kSize)); | 477 SkCanvas* canvas = recorder.beginRecording(SkIntToScalar(kSize), SkI
ntToScalar(kSize)); |
| 484 render_image(canvas); | 478 render_image(canvas); |
| 485 SkAutoTUnref<SkPicture> picture(recorder.endRecording()); | 479 SkAutoTUnref<SkPicture> picture(recorder.endRecording()); |
| 486 return SkImage::NewFromPicture(picture, SkISize::Make(kSize, kSize),
nullptr, nullptr); | 480 return SkImage::MakeFromPicture(sk_ref_sp(picture.get()), SkISize::M
ake(kSize, kSize), |
| 481 nullptr, nullptr); |
| 487 }, | 482 }, |
| 488 // Create a texture image | 483 // Create a texture image |
| 489 [context, render_image]() -> SkImage* { | 484 [context, render_image]() -> sk_sp<SkImage> { |
| 490 SkAutoTUnref<SkSurface> surface( | 485 SkAutoTUnref<SkSurface> surface( |
| 491 SkSurface::NewRenderTarget(context, SkBudgeted::kYes, | 486 SkSurface::NewRenderTarget(context, SkBudgeted::kYes, |
| 492 SkImageInfo::MakeN32Premul(kSize, kSi
ze))); | 487 SkImageInfo::MakeN32Premul(kSize, kSi
ze))); |
| 493 if (!surface) { | 488 if (!surface) { |
| 494 return nullptr; | 489 return nullptr; |
| 495 } | 490 } |
| 496 render_image(surface->getCanvas()); | 491 render_image(surface->getCanvas()); |
| 497 return surface->newImageSnapshot(); | 492 return surface->makeImageSnapshot(); |
| 498 } | 493 } |
| 499 }; | 494 }; |
| 500 | 495 |
| 501 static const SkScalar kPad = 5.f; | 496 static const SkScalar kPad = 5.f; |
| 502 canvas->translate(kPad, kPad); | 497 canvas->translate(kPad, kPad); |
| 503 for (auto factory : imageFactories) { | 498 for (auto factory : imageFactories) { |
| 504 SkAutoTUnref<SkImage> image(factory()); | 499 auto image(factory()); |
| 505 if (!image) { | 500 if (!image) { |
| 506 continue; | 501 continue; |
| 507 } | 502 } |
| 508 if (context) { | 503 if (context) { |
| 509 SkAutoTUnref<SkImage> texImage(image->newTextureImage(context)); | 504 sk_sp<SkImage> texImage(image->makeTextureImage(context)); |
| 510 if (texImage) { | 505 if (texImage) { |
| 511 canvas->drawImage(texImage, 0, 0); | 506 canvas->drawImage(texImage, 0, 0); |
| 512 } | 507 } |
| 513 } | 508 } |
| 514 canvas->translate(image->width() + kPad, 0); | 509 canvas->translate(image->width() + kPad, 0); |
| 515 } | 510 } |
| 516 } | 511 } |
| OLD | NEW |