aboutsummaryrefslogtreecommitdiffhomepage
path: root/dm
diff options
context:
space:
mode:
authorGravatar Mike Klein <mtklein@chromium.org>2017-03-10 09:55:51 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-03-13 16:11:38 +0000
commit841101d348bbfae2ca44e0a0f267c974d38c9891 (patch)
tree2d003be1fd9b33a4cd6b75e9443d237b8d7c67c7 /dm
parentf880b683048b5098e1e62b534902376626ffabac (diff)
SkColorSpaceXformCanvas
TODO: images shaders color filters image filters a couple stray color arrays Change-Id: Ib91639bb0a6a00af737dd5186180011fe5120860 Reviewed-on: https://skia-review.googlesource.com/9529 Reviewed-by: Brian Osman <brianosman@google.com> Reviewed-by: Matt Sarett <msarett@google.com> Commit-Queue: Mike Klein <mtklein@chromium.org>
Diffstat (limited to 'dm')
-rw-r--r--dm/DM.cpp6
-rw-r--r--dm/DMSrcSink.cpp13
-rw-r--r--dm/DMSrcSink.h10
3 files changed, 28 insertions, 1 deletions
diff --git a/dm/DM.cpp b/dm/DM.cpp
index bec5dd3ddc..cc662bc44f 100644
--- a/dm/DM.cpp
+++ b/dm/DM.cpp
@@ -890,8 +890,14 @@ static Sink* create_sink(const GrContextOptions& grCtxOptions, const SkCommandLi
return nullptr;
}
+static sk_sp<SkColorSpace> adobe_rgb() {
+ return SkColorSpace::MakeRGB(SkColorSpace::kSRGB_RenderTargetGamma,
+ SkColorSpace::kAdobeRGB_Gamut);
+}
+
static Sink* create_via(const SkString& tag, Sink* wrapped) {
#define VIA(t, via, ...) if (tag.equals(t)) { return new via(__VA_ARGS__); }
+ VIA("adobe", ViaCSXform, wrapped, adobe_rgb());
VIA("lite", ViaLite, wrapped);
VIA("pipe", ViaPipe, wrapped);
VIA("twice", ViaTwice, wrapped);
diff --git a/dm/DMSrcSink.cpp b/dm/DMSrcSink.cpp
index 6561ad9da3..4f5cd43af8 100644
--- a/dm/DMSrcSink.cpp
+++ b/dm/DMSrcSink.cpp
@@ -13,6 +13,7 @@
#include "SkCodecImageGenerator.h"
#include "SkColorSpace.h"
#include "SkColorSpaceXform.h"
+#include "SkColorSpaceXformCanvas.h"
#include "SkColorSpace_XYZ.h"
#include "SkCommonFlags.h"
#include "SkData.h"
@@ -1839,4 +1840,16 @@ Error ViaLite::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkStrin
});
}
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+ViaCSXform::ViaCSXform(Sink* sink, sk_sp<SkColorSpace> cs) : Via(sink), fCS(std::move(cs)) {}
+
+Error ViaCSXform::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkString* log) const {
+ return draw_to_canvas(fSink.get(), bitmap, stream, log, src.size(),
+ [&](SkCanvas* canvas) -> Error {
+ auto proxy = SkCreateColorSpaceXformCanvas(canvas, fCS);
+ return src.draw(proxy.get());
+ });
+}
+
} // namespace DM
diff --git a/dm/DMSrcSink.h b/dm/DMSrcSink.h
index d4fe29de4e..c973e3b393 100644
--- a/dm/DMSrcSink.h
+++ b/dm/DMSrcSink.h
@@ -349,7 +349,7 @@ public:
class PipeSink : public Sink {
public:
PipeSink();
-
+
Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override;
const char* fileExtension() const override { return "skpipe"; }
SinkFlags flags() const override { return SinkFlags{ SinkFlags::kVector, SinkFlags::kDirect }; }
@@ -494,6 +494,14 @@ public:
Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override;
};
+class ViaCSXform : public Via {
+public:
+ explicit ViaCSXform(Sink*, sk_sp<SkColorSpace>);
+ Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override;
+private:
+ sk_sp<SkColorSpace> fCS;
+};
+
} // namespace DM
#endif//DMSrcSink_DEFINED