Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(10)

Side by Side Diff: tools/render_pdfs_main.cpp

Issue 24811002: Update the SkDocument interface to allow for 1) abort won't emit pdf, 2) close can report success/f… (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
120 return replace_filename_extension(path, 120 return replace_filename_extension(path,
121 SKP_FILE_EXTENSION, 121 SKP_FILE_EXTENSION,
122 PDF_FILE_EXTENSION); 122 PDF_FILE_EXTENSION);
123 } 123 }
124 124
125 /** Write the output of pdf renderer to a file. 125 /** Write the output of pdf renderer to a file.
126 * @param outputDir Output dir. 126 * @param outputDir Output dir.
127 * @param inputFilename The skp file that was read. 127 * @param inputFilename The skp file that was read.
128 * @param renderer The object responsible to write the pdf file. 128 * @param renderer The object responsible to write the pdf file.
129 */ 129 */
130 static bool write_output(const SkString& outputDir, 130 static SkWStream* open_stream(const SkString& outputDir,
131 const SkString& inputFilename, 131 const SkString& inputFilename) {
132 const sk_tools::PdfRenderer& renderer) {
133 if (outputDir.isEmpty()) { 132 if (outputDir.isEmpty()) {
134 SkDynamicMemoryWStream stream; 133 return SkNEW(SkDynamicMemoryWStream);
135 renderer.write(&stream);
136 return true;
137 } 134 }
138 135
139 SkString outputPath; 136 SkString outputPath;
140 if (!make_output_filepath(&outputPath, outputDir, inputFilename)) { 137 if (!make_output_filepath(&outputPath, outputDir, inputFilename)) {
141 return false; 138 return NULL;
142 } 139 }
143 140
144 SkFILEWStream stream(outputPath.c_str()); 141 SkFILEWStream* stream = SkNEW_ARGS(SkFILEWStream, (outputPath.c_str()));
145 if (!stream.isValid()) { 142 if (!stream->isValid()) {
146 SkDebugf("Could not write to file %s\n", outputPath.c_str()); 143 SkDebugf("Could not write to file %s\n", outputPath.c_str());
147 return false; 144 return NULL;
148 } 145 }
149 renderer.write(&stream);
150 146
151 return true; 147 return stream;
152 } 148 }
153 149
154 /** Reads an skp file, renders it to pdf and writes the output to a pdf file 150 /** Reads an skp file, renders it to pdf and writes the output to a pdf file
155 * @param inputPath The skp file to be read. 151 * @param inputPath The skp file to be read.
156 * @param outputDir Output dir. 152 * @param outputDir Output dir.
157 * @param renderer The object responsible to render the skp object into pdf. 153 * @param renderer The object responsible to render the skp object into pdf.
158 */ 154 */
159 static bool render_pdf(const SkString& inputPath, const SkString& outputDir, 155 static bool render_pdf(const SkString& inputPath, const SkString& outputDir,
160 sk_tools::PdfRenderer& renderer) { 156 sk_tools::PdfRenderer& renderer) {
161 SkString inputFilename; 157 SkString inputFilename;
162 sk_tools::get_basename(&inputFilename, inputPath); 158 sk_tools::get_basename(&inputFilename, inputPath);
163 159
164 SkFILEStream inputStream; 160 SkFILEStream inputStream;
165 inputStream.setPath(inputPath.c_str()); 161 inputStream.setPath(inputPath.c_str());
166 if (!inputStream.isValid()) { 162 if (!inputStream.isValid()) {
167 SkDebugf("Could not open file %s\n", inputPath.c_str()); 163 SkDebugf("Could not open file %s\n", inputPath.c_str());
168 return false; 164 return false;
169 } 165 }
170 166
171 SkAutoTUnref<SkPicture> picture(SkPicture::CreateFromStream(&inputStream)); 167 SkAutoTUnref<SkPicture> picture(SkPicture::CreateFromStream(&inputStream));
172 168
173 if (NULL == picture.get()) { 169 if (NULL == picture.get()) {
174 SkDebugf("Could not read an SkPicture from %s\n", inputPath.c_str()); 170 SkDebugf("Could not read an SkPicture from %s\n", inputPath.c_str());
175 return false; 171 return false;
176 } 172 }
177 173
178 SkDebugf("exporting... [%i %i] %s\n", picture->width(), picture->height(), 174 SkDebugf("exporting... [%i %i] %s\n", picture->width(), picture->height(),
179 inputPath.c_str()); 175 inputPath.c_str());
180 176
181 renderer.init(picture); 177 SkWStream* stream(open_stream(outputDir, inputFilename));
182 178
183 renderer.render(); 179 if (!stream) {
180 return false;
181 }
184 182
185 bool success = write_output(outputDir, inputFilename, renderer); 183 renderer.init(picture, stream);
184
185 bool success = renderer.render();
186 SkDELETE(stream);
186 187
187 renderer.end(); 188 renderer.end();
189
188 return success; 190 return success;
189 } 191 }
190 192
191 /** For each file in the directory or for the file passed in input, call 193 /** For each file in the directory or for the file passed in input, call
192 * render_pdf. 194 * render_pdf.
193 * @param input A directory or an skp file. 195 * @param input A directory or an skp file.
194 * @param outputDir Output dir. 196 * @param outputDir Output dir.
195 * @param renderer The object responsible to render the skp object into pdf. 197 * @param renderer The object responsible to render the skp object into pdf.
196 */ 198 */
197 static int process_input(const SkString& input, const SkString& outputDir, 199 static int process_input(const SkString& input, const SkString& outputDir,
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
298 } 300 }
299 #endif 301 #endif
300 return 0; 302 return 0;
301 } 303 }
302 304
303 #if !defined SK_BUILD_FOR_IOS 305 #if !defined SK_BUILD_FOR_IOS
304 int main(int argc, char * const argv[]) { 306 int main(int argc, char * const argv[]) {
305 return tool_main(argc, (char**) argv); 307 return tool_main(argc, (char**) argv);
306 } 308 }
307 #endif 309 #endif
OLDNEW
« tools/PdfRenderer.cpp ('K') | « tools/PdfRenderer.cpp ('k') | tools/skhello.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698