| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 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 "DMSrcSink.h" | 8 #include "DMSrcSink.h" |
| 9 #include "SamplePipeControllers.h" | 9 #include "SamplePipeControllers.h" |
| 10 #include "SkCommonFlags.h" | 10 #include "SkCommonFlags.h" |
| (...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 443 // We turn our arguments into a Src, then draw that Src into our Sink to fil
l bitmap or stream. | 443 // We turn our arguments into a Src, then draw that Src into our Sink to fil
l bitmap or stream. |
| 444 struct ProxySrc : public Src { | 444 struct ProxySrc : public Src { |
| 445 const Src& fSrc; | 445 const Src& fSrc; |
| 446 SkMatrix fMatrix; | 446 SkMatrix fMatrix; |
| 447 SkISize fSize; | 447 SkISize fSize; |
| 448 | 448 |
| 449 ProxySrc(const Src& src, SkMatrix matrix) : fSrc(src), fMatrix(matrix) { | 449 ProxySrc(const Src& src, SkMatrix matrix) : fSrc(src), fMatrix(matrix) { |
| 450 fSize = auto_compute_translate(&fMatrix, src.size().width(), src.siz
e().height()); | 450 fSize = auto_compute_translate(&fMatrix, src.size().width(), src.siz
e().height()); |
| 451 } | 451 } |
| 452 | 452 |
| 453 Error draw(SkCanvas* canvas) const SK_OVERRIDE { | 453 Error draw(SkCanvas* canvas) const override { |
| 454 canvas->concat(fMatrix); | 454 canvas->concat(fMatrix); |
| 455 return fSrc.draw(canvas); | 455 return fSrc.draw(canvas); |
| 456 } | 456 } |
| 457 SkISize size() const SK_OVERRIDE { return fSize; } | 457 SkISize size() const override { return fSize; } |
| 458 Name name() const SK_OVERRIDE { sk_throw(); return ""; } // No one shou
ld be calling this. | 458 Name name() const override { sk_throw(); return ""; } // No one should
be calling this. |
| 459 } proxy(src, fMatrix); | 459 } proxy(src, fMatrix); |
| 460 return fSink->draw(proxy, bitmap, stream, log); | 460 return fSink->draw(proxy, bitmap, stream, log); |
| 461 } | 461 } |
| 462 | 462 |
| 463 // Undoes any flip or 90 degree rotate without changing the scale of the bitmap. | 463 // Undoes any flip or 90 degree rotate without changing the scale of the bitmap. |
| 464 // This should be pixel-preserving. | 464 // This should be pixel-preserving. |
| 465 ViaUpright::ViaUpright(SkMatrix matrix, Sink* sink) : fMatrix(matrix), fSink(sin
k) {} | 465 ViaUpright::ViaUpright(SkMatrix matrix, Sink* sink) : fMatrix(matrix), fSink(sin
k) {} |
| 466 | 466 |
| 467 Error ViaUpright::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkSt
ring* log) const { | 467 Error ViaUpright::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkSt
ring* log) const { |
| 468 Error err = fSink->draw(src, bitmap, stream, log); | 468 Error err = fSink->draw(src, bitmap, stream, log); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 498 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ | 498 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ |
| 499 | 499 |
| 500 ViaPipe::ViaPipe(Sink* sink) : fSink(sink) {} | 500 ViaPipe::ViaPipe(Sink* sink) : fSink(sink) {} |
| 501 | 501 |
| 502 Error ViaPipe::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkStrin
g* log) const { | 502 Error ViaPipe::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkStrin
g* log) const { |
| 503 // We turn ourselves into another Src that draws our argument into bitmap/st
ream via pipe. | 503 // We turn ourselves into another Src that draws our argument into bitmap/st
ream via pipe. |
| 504 struct ProxySrc : public Src { | 504 struct ProxySrc : public Src { |
| 505 const Src& fSrc; | 505 const Src& fSrc; |
| 506 ProxySrc(const Src& src) : fSrc(src) {} | 506 ProxySrc(const Src& src) : fSrc(src) {} |
| 507 | 507 |
| 508 Error draw(SkCanvas* canvas) const SK_OVERRIDE { | 508 Error draw(SkCanvas* canvas) const override { |
| 509 SkISize size = this->size(); | 509 SkISize size = this->size(); |
| 510 PipeController controller(canvas, &SkImageDecoder::DecodeMemory); | 510 PipeController controller(canvas, &SkImageDecoder::DecodeMemory); |
| 511 SkGPipeWriter pipe; | 511 SkGPipeWriter pipe; |
| 512 const uint32_t kFlags = 0; // We mirror SkDeferredCanvas, which does
n't use any flags. | 512 const uint32_t kFlags = 0; // We mirror SkDeferredCanvas, which does
n't use any flags. |
| 513 return fSrc.draw(pipe.startRecording(&controller, kFlags, size.width
(), size.height())); | 513 return fSrc.draw(pipe.startRecording(&controller, kFlags, size.width
(), size.height())); |
| 514 } | 514 } |
| 515 SkISize size() const SK_OVERRIDE { return fSrc.size(); } | 515 SkISize size() const override { return fSrc.size(); } |
| 516 Name name() const SK_OVERRIDE { sk_throw(); return ""; } // No one shou
ld be calling this. | 516 Name name() const override { sk_throw(); return ""; } // No one should
be calling this. |
| 517 } proxy(src); | 517 } proxy(src); |
| 518 return fSink->draw(proxy, bitmap, stream, log); | 518 return fSink->draw(proxy, bitmap, stream, log); |
| 519 } | 519 } |
| 520 | 520 |
| 521 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ | 521 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ |
| 522 | 522 |
| 523 ViaSerialization::ViaSerialization(Sink* sink) : fSink(sink) {} | 523 ViaSerialization::ViaSerialization(Sink* sink) : fSink(sink) {} |
| 524 | 524 |
| 525 Error ViaSerialization::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream
, SkString* log) | 525 Error ViaSerialization::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream
, SkString* log) |
| 526 const { | 526 const { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 539 pic->serialize(&wStream); | 539 pic->serialize(&wStream); |
| 540 SkAutoTDelete<SkStream> rStream(wStream.detachAsStream()); | 540 SkAutoTDelete<SkStream> rStream(wStream.detachAsStream()); |
| 541 SkAutoTUnref<SkPicture> deserialized(SkPicture::CreateFromStream(rStream, &l
azy_decode_bitmap)); | 541 SkAutoTUnref<SkPicture> deserialized(SkPicture::CreateFromStream(rStream, &l
azy_decode_bitmap)); |
| 542 | 542 |
| 543 // Turn that deserialized picture into a Src, draw it into our Sink to fill
bitmap or stream. | 543 // Turn that deserialized picture into a Src, draw it into our Sink to fill
bitmap or stream. |
| 544 struct ProxySrc : public Src { | 544 struct ProxySrc : public Src { |
| 545 const SkPicture* fPic; | 545 const SkPicture* fPic; |
| 546 const SkISize fSize; | 546 const SkISize fSize; |
| 547 ProxySrc(const SkPicture* pic, SkISize size) : fPic(pic), fSize(size) {} | 547 ProxySrc(const SkPicture* pic, SkISize size) : fPic(pic), fSize(size) {} |
| 548 | 548 |
| 549 Error draw(SkCanvas* canvas) const SK_OVERRIDE { | 549 Error draw(SkCanvas* canvas) const override { |
| 550 canvas->drawPicture(fPic); | 550 canvas->drawPicture(fPic); |
| 551 return ""; | 551 return ""; |
| 552 } | 552 } |
| 553 SkISize size() const SK_OVERRIDE { return fSize; } | 553 SkISize size() const override { return fSize; } |
| 554 Name name() const SK_OVERRIDE { sk_throw(); return ""; } // No one shou
ld be calling this. | 554 Name name() const override { sk_throw(); return ""; } // No one should
be calling this. |
| 555 } proxy(deserialized, src.size()); | 555 } proxy(deserialized, src.size()); |
| 556 return fSink->draw(proxy, bitmap, stream, log); | 556 return fSink->draw(proxy, bitmap, stream, log); |
| 557 } | 557 } |
| 558 | 558 |
| 559 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ | 559 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ |
| 560 | 560 |
| 561 ViaTiles::ViaTiles(int w, int h, SkBBHFactory* factory, Sink* sink) | 561 ViaTiles::ViaTiles(int w, int h, SkBBHFactory* factory, Sink* sink) |
| 562 : fW(w) | 562 : fW(w) |
| 563 , fH(h) | 563 , fH(h) |
| 564 , fFactory(factory) | 564 , fFactory(factory) |
| (...skipping 11 matching lines...) Expand all Loading... |
| 576 SkAutoTUnref<SkPicture> pic(recorder.endRecording()); | 576 SkAutoTUnref<SkPicture> pic(recorder.endRecording()); |
| 577 | 577 |
| 578 // Turn that picture into a Src that draws into our Sink via tiles + MPD. | 578 // Turn that picture into a Src that draws into our Sink via tiles + MPD. |
| 579 struct ProxySrc : public Src { | 579 struct ProxySrc : public Src { |
| 580 const int fW, fH; | 580 const int fW, fH; |
| 581 const SkPicture* fPic; | 581 const SkPicture* fPic; |
| 582 const SkISize fSize; | 582 const SkISize fSize; |
| 583 ProxySrc(int w, int h, const SkPicture* pic, SkISize size) | 583 ProxySrc(int w, int h, const SkPicture* pic, SkISize size) |
| 584 : fW(w), fH(h), fPic(pic), fSize(size) {} | 584 : fW(w), fH(h), fPic(pic), fSize(size) {} |
| 585 | 585 |
| 586 Error draw(SkCanvas* canvas) const SK_OVERRIDE { | 586 Error draw(SkCanvas* canvas) const override { |
| 587 const int xTiles = (fSize.width() + fW - 1) / fW, | 587 const int xTiles = (fSize.width() + fW - 1) / fW, |
| 588 yTiles = (fSize.height() + fH - 1) / fH; | 588 yTiles = (fSize.height() + fH - 1) / fH; |
| 589 SkMultiPictureDraw mpd(xTiles*yTiles); | 589 SkMultiPictureDraw mpd(xTiles*yTiles); |
| 590 SkTDArray<SkSurface*> surfaces; | 590 SkTDArray<SkSurface*> surfaces; |
| 591 surfaces.setReserve(xTiles*yTiles); | 591 surfaces.setReserve(xTiles*yTiles); |
| 592 | 592 |
| 593 SkImageInfo info = canvas->imageInfo().makeWH(fW, fH); | 593 SkImageInfo info = canvas->imageInfo().makeWH(fW, fH); |
| 594 for (int j = 0; j < yTiles; j++) { | 594 for (int j = 0; j < yTiles; j++) { |
| 595 for (int i = 0; i < xTiles; i++) { | 595 for (int i = 0; i < xTiles; i++) { |
| 596 // This lets our ultimate Sink determine the best kind of su
rface. | 596 // This lets our ultimate Sink determine the best kind of su
rface. |
| (...skipping 12 matching lines...) Expand all Loading... |
| 609 mpd.draw(); | 609 mpd.draw(); |
| 610 for (int j = 0; j < yTiles; j++) { | 610 for (int j = 0; j < yTiles; j++) { |
| 611 for (int i = 0; i < xTiles; i++) { | 611 for (int i = 0; i < xTiles; i++) { |
| 612 SkAutoTUnref<SkImage> image(surfaces[i+xTiles*j]->newImageSn
apshot()); | 612 SkAutoTUnref<SkImage> image(surfaces[i+xTiles*j]->newImageSn
apshot()); |
| 613 canvas->drawImage(image, SkIntToScalar(i*fW), SkIntToScalar(
j*fH)); | 613 canvas->drawImage(image, SkIntToScalar(i*fW), SkIntToScalar(
j*fH)); |
| 614 } | 614 } |
| 615 } | 615 } |
| 616 surfaces.unrefAll(); | 616 surfaces.unrefAll(); |
| 617 return ""; | 617 return ""; |
| 618 } | 618 } |
| 619 SkISize size() const SK_OVERRIDE { return fSize; } | 619 SkISize size() const override { return fSize; } |
| 620 Name name() const SK_OVERRIDE { sk_throw(); return ""; } // No one shou
ld be calling this. | 620 Name name() const override { sk_throw(); return ""; } // No one should
be calling this. |
| 621 } proxy(fW, fH, pic, src.size()); | 621 } proxy(fW, fH, pic, src.size()); |
| 622 return fSink->draw(proxy, bitmap, stream, log); | 622 return fSink->draw(proxy, bitmap, stream, log); |
| 623 } | 623 } |
| 624 | 624 |
| 625 } // namespace DM | 625 } // namespace DM |
| OLD | NEW |