diff options
author | Matt Sarett <msarett@google.com> | 2017-05-12 11:41:27 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-05-12 16:48:17 +0000 |
commit | ebb1b5c297e394ab19f99d807095672b7f5d8aef (patch) | |
tree | 5f2fcd7f15da445df1efd5861b708df8f35c5ba0 /src/core/SkPictureImageGenerator.cpp | |
parent | 7c8460e10135c05a42d0744b84838bbc24398ac2 (diff) |
Add new SkImageGenerator::getPixels() API, deprecate the old
This is fairly aggressive in that it will break any client
that is currently using SkImageGenerator with kIndex8.
I'm guessing that we don't have any clients doing that.
Bug: skia:6620
Change-Id: Ifd16f5232bb3a9f759c225315c57492d917ed9ca
Reviewed-on: https://skia-review.googlesource.com/16601
Commit-Queue: Matt Sarett <msarett@google.com>
Reviewed-by: Mike Reed <reed@google.com>
Diffstat (limited to 'src/core/SkPictureImageGenerator.cpp')
-rw-r--r-- | src/core/SkPictureImageGenerator.cpp | 32 |
1 files changed, 12 insertions, 20 deletions
diff --git a/src/core/SkPictureImageGenerator.cpp b/src/core/SkPictureImageGenerator.cpp index 34046e9ae4..86e98d828b 100644 --- a/src/core/SkPictureImageGenerator.cpp +++ b/src/core/SkPictureImageGenerator.cpp @@ -59,33 +59,25 @@ SkPictureImageGenerator::SkPictureImageGenerator(const SkImageInfo& info, sk_sp< } bool SkPictureImageGenerator::onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, - SkPMColor ctable[], int* ctableCount) { - // Rely on SkCanvas factory to know what configs can and cannot be drawn into. - auto canvas = SkCanvas::MakeRasterDirect(info, pixels, rowBytes); - if (!canvas) { - return false; - } - canvas->clear(0); - canvas->drawPicture(fPicture, &fMatrix, fPaint.getMaybeNull()); - return true; -} - -bool SkPictureImageGenerator::onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, const Options& opts) { - // No need to use the xform canvas if we want fully color correct behavior or if we do not - // have a destination color space. - if (SkTransferFunctionBehavior::kRespect == opts.fBehavior || !info.colorSpace()) { - return this->onGetPixels(info, pixels, rowBytes, opts.fColorTable, opts.fColorTableCount); - } + bool useXformCanvas = + SkTransferFunctionBehavior::kIgnore == opts.fBehavior && info.colorSpace(); - auto canvas = SkCanvas::MakeRasterDirect(info.makeColorSpace(nullptr), pixels, rowBytes); + SkImageInfo canvasInfo = useXformCanvas ? info.makeColorSpace(nullptr) : info; + std::unique_ptr<SkCanvas> canvas = SkCanvas::MakeRasterDirect(canvasInfo, pixels, rowBytes); if (!canvas) { return false; } canvas->clear(0); - auto xformCanvas = SkCreateColorSpaceXformCanvas(canvas.get(), info.refColorSpace()); - xformCanvas->drawPicture(fPicture, &fMatrix, fPaint.getMaybeNull()); + SkCanvas* canvasPtr = canvas.get(); + std::unique_ptr<SkCanvas> xformCanvas; + if (useXformCanvas) { + xformCanvas = SkCreateColorSpaceXformCanvas(canvas.get(), info.refColorSpace()); + canvasPtr = xformCanvas.get(); + } + + canvasPtr->drawPicture(fPicture, &fMatrix, fPaint.getMaybeNull()); return true; } |