diff options
author | 2017-04-06 22:16:49 +0000 | |
---|---|---|
committer | 2017-04-06 22:16:49 +0000 | |
commit | 7c9fb6076e8d64dbca19cfe0628b02040c5750e2 (patch) | |
tree | 9ff4dc8de426cf5872e269ef24fe7062f5ea966a /libs/hwui/SkiaCanvas.cpp | |
parent | cdbfc0e5f2d412c7728cca829dd9f1e72501bf77 (diff) | |
parent | fd5d5425ee5f934e8713ded0013ab32e900c8009 (diff) |
Merge "Xform bitmaps to sRGB on SW and PDF canvases" into oc-dev am: c29dffed16
am: fd5d5425ee
Change-Id: If960ccd900ebc2b841c2f13ca4f25820a48a950f
Diffstat (limited to 'libs/hwui/SkiaCanvas.cpp')
-rw-r--r-- | libs/hwui/SkiaCanvas.cpp | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/libs/hwui/SkiaCanvas.cpp b/libs/hwui/SkiaCanvas.cpp index 434e01dc5445..6f366891ca03 100644 --- a/libs/hwui/SkiaCanvas.cpp +++ b/libs/hwui/SkiaCanvas.cpp @@ -23,6 +23,7 @@ #include "hwui/MinikinUtils.h" #include "pipeline/skia/AnimatedDrawables.h" +#include <SkColorSpaceXformCanvas.h> #include <SkDrawable.h> #include <SkDeque.h> #include <SkDrawFilter.h> @@ -44,18 +45,22 @@ Canvas* Canvas::create_canvas(const SkBitmap& bitmap) { return new SkiaCanvas(bitmap); } -Canvas* Canvas::create_canvas(SkCanvas* skiaCanvas) { - return new SkiaCanvas(skiaCanvas); +Canvas* Canvas::create_canvas(SkCanvas* skiaCanvas, XformToSRGB xformToSRGB) { + return new SkiaCanvas(skiaCanvas, xformToSRGB); } SkiaCanvas::SkiaCanvas() {} -SkiaCanvas::SkiaCanvas(SkCanvas* canvas) - : mCanvas(canvas) {} +SkiaCanvas::SkiaCanvas(SkCanvas* canvas, XformToSRGB xformToSRGB) + : mCanvas(canvas) +{ + LOG_ALWAYS_FATAL_IF(XformToSRGB::kImmediate == xformToSRGB); +} SkiaCanvas::SkiaCanvas(const SkBitmap& bitmap) { mCanvasOwned = std::unique_ptr<SkCanvas>(new SkCanvas(bitmap)); - mCanvas = mCanvasOwned.get(); + mCanvasWrapper = SkCreateColorSpaceXformCanvas(mCanvasOwned.get(), SkColorSpace::MakeSRGB()); + mCanvas = mCanvasWrapper.get(); } SkiaCanvas::~SkiaCanvas() {} @@ -92,19 +97,22 @@ private: }; void SkiaCanvas::setBitmap(const SkBitmap& bitmap) { - SkCanvas* newCanvas = new SkCanvas(bitmap); + std::unique_ptr<SkCanvas> newCanvas = std::unique_ptr<SkCanvas>(new SkCanvas(bitmap)); + std::unique_ptr<SkCanvas> newCanvasWrapper = + SkCreateColorSpaceXformCanvas(newCanvas.get(), SkColorSpace::MakeSRGB()); if (!bitmap.isNull()) { // Copy the canvas matrix & clip state. - newCanvas->setMatrix(mCanvas->getTotalMatrix()); + newCanvasWrapper->setMatrix(mCanvas->getTotalMatrix()); - ClipCopier copier(newCanvas); + ClipCopier copier(newCanvasWrapper.get()); mCanvas->replayClips(&copier); } // deletes the previously owned canvas (if any) - mCanvasOwned = std::unique_ptr<SkCanvas>(newCanvas); - mCanvas = newCanvas; + mCanvasOwned = std::move(newCanvas); + mCanvasWrapper = std::move(newCanvasWrapper); + mCanvas = mCanvasWrapper.get(); // clean up the old save stack mSaveStack.reset(nullptr); |