OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2012 Google Inc. | 2 * Copyright 2012 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "SkCanvas.h" | 8 #include "SkCanvas.h" |
9 #include "SkDevice.h" | 9 #include "SkDevice.h" |
10 #include "SkForceLinking.h" | 10 #include "SkForceLinking.h" |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
124 return replace_filename_extension(path, | 124 return replace_filename_extension(path, |
125 SKP_FILE_EXTENSION, | 125 SKP_FILE_EXTENSION, |
126 PDF_FILE_EXTENSION); | 126 PDF_FILE_EXTENSION); |
127 } | 127 } |
128 | 128 |
129 /** Write the output of pdf renderer to a file. | 129 /** Write the output of pdf renderer to a file. |
130 * @param outputDir Output dir. | 130 * @param outputDir Output dir. |
131 * @param inputFilename The skp file that was read. | 131 * @param inputFilename The skp file that was read. |
132 * @param renderer The object responsible to write the pdf file. | 132 * @param renderer The object responsible to write the pdf file. |
133 */ | 133 */ |
134 static bool write_output(const SkString& outputDir, | 134 static SkWStream* open_stream(const SkString& outputDir, |
135 const SkString& inputFilename, | 135 const SkString& inputFilename) { |
136 const sk_tools::PdfRenderer& renderer) { | |
137 if (outputDir.isEmpty()) { | 136 if (outputDir.isEmpty()) { |
138 SkDynamicMemoryWStream stream; | 137 return SkNEW(SkDynamicMemoryWStream); |
139 renderer.write(&stream); | |
140 return true; | |
141 } | 138 } |
142 | 139 |
143 SkString outputPath; | 140 SkString outputPath; |
144 if (!make_output_filepath(&outputPath, outputDir, inputFilename)) { | 141 if (!make_output_filepath(&outputPath, outputDir, inputFilename)) { |
145 return false; | 142 return NULL; |
146 } | 143 } |
147 | 144 |
148 SkFILEWStream stream(outputPath.c_str()); | 145 SkFILEWStream* stream = SkNEW_ARGS(SkFILEWStream, (outputPath.c_str())); |
149 if (!stream.isValid()) { | 146 if (!stream->isValid()) { |
150 SkDebugf("Could not write to file %s\n", outputPath.c_str()); | 147 SkDebugf("Could not write to file %s\n", outputPath.c_str()); |
151 return false; | 148 return NULL; |
152 } | 149 } |
153 renderer.write(&stream); | |
154 | 150 |
155 return true; | 151 return stream; |
156 } | 152 } |
157 | 153 |
158 /** Reads an skp file, renders it to pdf and writes the output to a pdf file | 154 /** Reads an skp file, renders it to pdf and writes the output to a pdf file |
159 * @param inputPath The skp file to be read. | 155 * @param inputPath The skp file to be read. |
160 * @param outputDir Output dir. | 156 * @param outputDir Output dir. |
161 * @param renderer The object responsible to render the skp object into pdf. | 157 * @param renderer The object responsible to render the skp object into pdf. |
162 */ | 158 */ |
163 static bool render_pdf(const SkString& inputPath, const SkString& outputDir, | 159 static bool render_pdf(const SkString& inputPath, const SkString& outputDir, |
164 sk_tools::PdfRenderer& renderer) { | 160 sk_tools::PdfRenderer& renderer) { |
165 SkString inputFilename; | 161 SkString inputFilename; |
166 sk_tools::get_basename(&inputFilename, inputPath); | 162 sk_tools::get_basename(&inputFilename, inputPath); |
167 | 163 |
168 SkFILEStream inputStream; | 164 SkFILEStream inputStream; |
169 inputStream.setPath(inputPath.c_str()); | 165 inputStream.setPath(inputPath.c_str()); |
170 if (!inputStream.isValid()) { | 166 if (!inputStream.isValid()) { |
171 SkDebugf("Could not open file %s\n", inputPath.c_str()); | 167 SkDebugf("Could not open file %s\n", inputPath.c_str()); |
172 return false; | 168 return false; |
173 } | 169 } |
174 | 170 |
175 SkAutoTUnref<SkPicture> picture(SkPicture::CreateFromStream(&inputStream)); | 171 SkAutoTUnref<SkPicture> picture(SkPicture::CreateFromStream(&inputStream)); |
176 | 172 |
177 if (NULL == picture.get()) { | 173 if (NULL == picture.get()) { |
178 SkDebugf("Could not read an SkPicture from %s\n", inputPath.c_str()); | 174 SkDebugf("Could not read an SkPicture from %s\n", inputPath.c_str()); |
179 return false; | 175 return false; |
180 } | 176 } |
181 | 177 |
182 SkDebugf("exporting... [%i %i] %s\n", picture->width(), picture->height(), | 178 SkDebugf("exporting... [%i %i] %s\n", picture->width(), picture->height(), |
183 inputPath.c_str()); | 179 inputPath.c_str()); |
184 | 180 |
185 renderer.init(picture); | 181 SkWStream* stream(open_stream(outputDir, inputFilename)); |
186 | 182 |
187 renderer.render(); | 183 if (!stream) { |
| 184 return false; |
| 185 } |
188 | 186 |
189 bool success = write_output(outputDir, inputFilename, renderer); | 187 renderer.init(picture, stream); |
| 188 |
| 189 bool success = renderer.render(); |
| 190 SkDELETE(stream); |
190 | 191 |
191 renderer.end(); | 192 renderer.end(); |
| 193 |
192 return success; | 194 return success; |
193 } | 195 } |
194 | 196 |
195 /** For each file in the directory or for the file passed in input, call | 197 /** For each file in the directory or for the file passed in input, call |
196 * render_pdf. | 198 * render_pdf. |
197 * @param input A directory or an skp file. | 199 * @param input A directory or an skp file. |
198 * @param outputDir Output dir. | 200 * @param outputDir Output dir. |
199 * @param renderer The object responsible to render the skp object into pdf. | 201 * @param renderer The object responsible to render the skp object into pdf. |
200 */ | 202 */ |
201 static int process_input(const SkString& input, const SkString& outputDir, | 203 static int process_input(const SkString& input, const SkString& outputDir, |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
302 } | 304 } |
303 #endif | 305 #endif |
304 return 0; | 306 return 0; |
305 } | 307 } |
306 | 308 |
307 #if !defined SK_BUILD_FOR_IOS | 309 #if !defined SK_BUILD_FOR_IOS |
308 int main(int argc, char * const argv[]) { | 310 int main(int argc, char * const argv[]) { |
309 return tool_main(argc, (char**) argv); | 311 return tool_main(argc, (char**) argv); |
310 } | 312 } |
311 #endif | 313 #endif |
OLD | NEW |