summaryrefslogtreecommitdiff
path: root/libs/hwui/SkiaCanvas.cpp
diff options
context:
space:
mode:
author Matt Sarett <msarett@google.com> 2017-04-06 22:16:49 +0000
committer android-build-merger <android-build-merger@google.com> 2017-04-06 22:16:49 +0000
commit7c9fb6076e8d64dbca19cfe0628b02040c5750e2 (patch)
tree9ff4dc8de426cf5872e269ef24fe7062f5ea966a /libs/hwui/SkiaCanvas.cpp
parentcdbfc0e5f2d412c7728cca829dd9f1e72501bf77 (diff)
parentfd5d5425ee5f934e8713ded0013ab32e900c8009 (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.cpp28
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);