/* * Copyright 2015 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "LazyDecodeBitmap.h" #include "SkCommandLineFlags.h" #include "SkPicture.h" #include "SkStream.h" #include "SkSVGCanvas.h" #include "SkXMLWriter.h" DEFINE_string2(input, i, "", "input skp file"); DEFINE_string2(output, o, "", "output svg file (optional)"); // return codes: static const int kSuccess = 0; static const int kInvalidArgs = 1; static const int kIOError = 2; static const int kNotAnSKP = 3; int tool_main(int argc, char** argv); int tool_main(int argc, char** argv) { SkCommandLineFlags::SetUsage("Converts an SKP file to SVG."); SkCommandLineFlags::Parse(argc, argv); if (FLAGS_input.count() != 1) { SkDebugf("Missing input file\n"); return kInvalidArgs; } SkFILEStream stream(FLAGS_input[0]); if (!stream.isValid()) { SkDebugf("Couldn't open file: %s\n", FLAGS_input[0]); return kIOError; } SkAutoTUnref<SkPicture> pic(SkPicture::CreateFromStream(&stream, &sk_tools::LazyDecodeBitmap)); if (!SkToBool(pic.get())) { SkDebugf("Could not load SKP: %s\n", FLAGS_input[0]); return kNotAnSKP; } SkAutoTDelete<SkWStream> outStream; if (FLAGS_output.count() > 0) { SkFILEWStream* fileStream = SkNEW_ARGS(SkFILEWStream, (FLAGS_output[0])); if (!fileStream->isValid()) { SkDebugf("Couldn't open output file for writing: %s\n", FLAGS_output[0]); return kIOError; } outStream.reset(fileStream); } else { outStream.reset(SkNEW(SkDebugWStream)); } SkAutoTDelete<SkXMLWriter> xmlWriter(SkNEW_ARGS(SkXMLStreamWriter, (outStream.get()))); SkAutoTUnref<SkCanvas> svgCanvas(SkSVGCanvas::Create(pic->cullRect(), xmlWriter.get())); pic->playback(svgCanvas); return kSuccess; } #if !defined SK_BUILD_FOR_IOS int main(int argc, char * const argv[]) { return tool_main(argc, (char**) argv); } #endif