SVG backend in DM
Not enabled by default, but this should get you SKPs, GMs etc for free to play with.
$ out/Debug/dm -w svgs --src gm skp --config svg
BUG=skia:
Review URL: https://codereview.chromium.org/892693002
diff --git a/dm/DM.cpp b/dm/DM.cpp
index f087a32..c8d1ec7 100644
--- a/dm/DM.cpp
+++ b/dm/DM.cpp
@@ -221,7 +221,8 @@
SINK("8888", RasterSink, kN32_SkColorType);
SINK("pdf", PDFSink);
SINK("skp", SKPSink);
- SINK("null", NullSink);
+ SINK("svg", SVGSink);
+ SINK("null", NullSink);
}
#undef SINK
return NULL;
diff --git a/dm/DMSrcSink.cpp b/dm/DMSrcSink.cpp
index f3ed574..baf1871 100644
--- a/dm/DMSrcSink.cpp
+++ b/dm/DMSrcSink.cpp
@@ -6,6 +6,7 @@
#include "SkOSFile.h"
#include "SkPictureRecorder.h"
#include "SkRandom.h"
+#include "SkSVGDevice.h"
#include "SkStream.h"
namespace DM {
@@ -227,6 +228,16 @@
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+SVGSink::SVGSink() {}
+
+Error SVGSink::draw(const Src& src, SkBitmap*, SkWStream* dst) const {
+ SkAutoTUnref<SkBaseDevice> device(SkSVGDevice::Create(src.size(), dst));
+ SkCanvas canvas(device);
+ return src.draw(&canvas);
+}
+
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
RasterSink::RasterSink(SkColorType colorType) : fColorType(colorType) {}
Error RasterSink::draw(const Src& src, SkBitmap* dst, SkWStream*) const {
diff --git a/dm/DMSrcSink.h b/dm/DMSrcSink.h
index bf8e7d6..1fdc9ed 100644
--- a/dm/DMSrcSink.h
+++ b/dm/DMSrcSink.h
@@ -130,6 +130,16 @@
const char* fileExtension() const SK_OVERRIDE { return "skp"; }
};
+class SVGSink : public Sink {
+public:
+ SVGSink();
+
+ Error draw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE;
+ int enclave() const SK_OVERRIDE { return kAnyThread_Enclave; }
+ const char* fileExtension() const SK_OVERRIDE { return "svg"; }
+};
+
+
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
class ViaMatrix : public Sink {
diff --git a/gyp/dm.gypi b/gyp/dm.gypi
index 4bfda6f..9ace2ac 100644
--- a/gyp/dm.gypi
+++ b/gyp/dm.gypi
@@ -2,15 +2,16 @@
{
'include_dirs': [
'../dm',
+ '../experimental/svg',
'../gm',
- '../tests',
- '../src/images',
- '../src/lazy',
'../src/core',
'../src/effects',
+ '../src/images',
+ '../src/lazy',
'../src/pipe/utils/',
'../src/utils',
'../src/utils/debugger',
+ '../tests',
'../tools',
],
'dependencies': [
@@ -22,6 +23,7 @@
'tools.gyp:proc_stats',
'tools.gyp:sk_tool_utils',
'tools.gyp:timer',
+ 'xml.gyp:xml',
],
'includes': [
'gmslides.gypi',
@@ -34,6 +36,7 @@
'../dm/DMJsonWriter.cpp',
'../gm/gm.cpp',
+ '../experimental/svg/SkSVGDevice.cpp',
'../src/pipe/utils/SamplePipeControllers.cpp',
'../src/utils/debugger/SkDebugCanvas.cpp',
'../src/utils/debugger/SkDrawCommand.cpp',