| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 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 "SkCommandLineFlags.h" | 9 #include "SkCommandLineFlags.h" |
| 10 #include "SkDevice.h" | 10 #include "SkDevice.h" |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 79 } | 79 } |
| 80 if (page >= 0) { | 80 if (page >= 0) { |
| 81 path->appendf("%i.", page); | 81 path->appendf("%i.", page); |
| 82 } | 82 } |
| 83 path->append(new_extension); | 83 path->append(new_extension); |
| 84 return true; | 84 return true; |
| 85 } | 85 } |
| 86 return false; | 86 return false; |
| 87 } | 87 } |
| 88 | 88 |
| 89 static void make_filepath(SkString* path, const SkString& dir, const SkString& n
ame) { | |
| 90 size_t len = dir.size(); | |
| 91 path->set(dir); | |
| 92 if (0 < len && '/' != dir[len - 1]) { | |
| 93 path->append("/"); | |
| 94 } | |
| 95 path->append(name); | |
| 96 } | |
| 97 | |
| 98 static bool is_path_seperator(const char chr) { | |
| 99 #if defined(SK_BUILD_FOR_WIN) | |
| 100 return chr == '\\' || chr == '/'; | |
| 101 #else | |
| 102 return chr == '/'; | |
| 103 #endif | |
| 104 } | |
| 105 | |
| 106 static void get_basename(SkString* basename, const SkString& path) { | |
| 107 if (path.size() == 0) { | |
| 108 basename->reset(); | |
| 109 return; | |
| 110 } | |
| 111 | |
| 112 size_t end = path.size() - 1; | |
| 113 | |
| 114 // Paths pointing to directories often have a trailing slash, | |
| 115 // we remove it so the name is not empty | |
| 116 if (is_path_seperator(path[end])) { | |
| 117 if (end == 0) { | |
| 118 basename->reset(); | |
| 119 return; | |
| 120 } | |
| 121 | |
| 122 end -= 1; | |
| 123 } | |
| 124 | |
| 125 size_t i = end; | |
| 126 do { | |
| 127 --i; | |
| 128 if (is_path_seperator(path[i])) { | |
| 129 const char* basenameStart = path.c_str() + i + 1; | |
| 130 size_t basenameLength = end - i; | |
| 131 basename->set(basenameStart, basenameLength); | |
| 132 return; | |
| 133 } | |
| 134 } while (i > 0); | |
| 135 | |
| 136 basename->set(path.c_str(), end + 1); | |
| 137 } | |
| 138 | |
| 139 /** Builds the output filename. path = dir/name, and it replaces expected | 89 /** Builds the output filename. path = dir/name, and it replaces expected |
| 140 * .skp extension with .pdf extention. | 90 * .skp extension with .pdf extention. |
| 141 * @param path Output filename. | 91 * @param path Output filename. |
| 142 * @param name The name of the file. | 92 * @param name The name of the file. |
| 143 * @returns false if the file did not has the expected extension. | 93 * @returns false if the file did not has the expected extension. |
| 144 * if false is returned, contents of path are undefined. | 94 * if false is returned, contents of path are undefined. |
| 145 */ | 95 */ |
| 146 static bool make_output_filepath(SkString* path, const SkString& dir, | 96 static bool make_output_filepath(SkString* path, const SkString& dir, |
| 147 const SkString& name, | 97 const SkString& name, |
| 148 int page) { | 98 int page) { |
| 149 make_filepath(path, dir, name); | 99 *path = SkOSPath::SkPathJoin(dir.c_str(), name.c_str()); |
| 150 return add_page_and_replace_filename_extension(path, page, | 100 return add_page_and_replace_filename_extension(path, page, |
| 151 PDF_FILE_EXTENSION, | 101 PDF_FILE_EXTENSION, |
| 152 PNG_FILE_EXTENSION); | 102 PNG_FILE_EXTENSION); |
| 153 } | 103 } |
| 154 | 104 |
| 155 static void setup_bitmap(SkBitmap* bitmap, int width, int height, SkColor color)
{ | 105 static void setup_bitmap(SkBitmap* bitmap, int width, int height, SkColor color)
{ |
| 156 bitmap->setConfig(SkBitmap::kARGB_8888_Config, width, height); | 106 bitmap->setConfig(SkBitmap::kARGB_8888_Config, width, height); |
| 157 | 107 |
| 158 bitmap->allocPixels(); | 108 bitmap->allocPixels(); |
| 159 bitmap->eraseColor(color); | 109 bitmap->eraseColor(color); |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 257 | 207 |
| 258 /** Reads an skp file, renders it to pdf and writes the output to a pdf file | 208 /** Reads an skp file, renders it to pdf and writes the output to a pdf file |
| 259 * @param inputPath The skp file to be read. | 209 * @param inputPath The skp file to be read. |
| 260 * @param outputDir Output dir. | 210 * @param outputDir Output dir. |
| 261 * @param renderer The object responsible to render the skp object into pdf. | 211 * @param renderer The object responsible to render the skp object into pdf. |
| 262 */ | 212 */ |
| 263 static bool process_pdf(const SkString& inputPath, const SkString& outputDir, | 213 static bool process_pdf(const SkString& inputPath, const SkString& outputDir, |
| 264 SkPdfRenderer& renderer) { | 214 SkPdfRenderer& renderer) { |
| 265 SkDebugf("Loading PDF: %s\n", inputPath.c_str()); | 215 SkDebugf("Loading PDF: %s\n", inputPath.c_str()); |
| 266 | 216 |
| 267 SkString inputFilename; | 217 SkString inputFilename = SkOSPath::SkBasename(inputPath.c_str()); |
| 268 get_basename(&inputFilename, inputPath); | |
| 269 | 218 |
| 270 bool success = true; | 219 bool success = true; |
| 271 | 220 |
| 272 success = renderer.load(inputPath); | 221 success = renderer.load(inputPath); |
| 273 if (FLAGS_showMemoryUsage) { | 222 if (FLAGS_showMemoryUsage) { |
| 274 SkDebugf("Memory usage after load: %u\n", (unsigned int)renderer.bytesUs
ed()); | 223 SkDebugf("Memory usage after load: %u\n", (unsigned int)renderer.bytesUs
ed()); |
| 275 } | 224 } |
| 276 | 225 |
| 277 // TODO(edisonn): bench timers | 226 // TODO(edisonn): bench timers |
| 278 if (FLAGS_benchLoad > 0) { | 227 if (FLAGS_benchLoad > 0) { |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 350 * @param outputDir Output dir. | 299 * @param outputDir Output dir. |
| 351 * @param renderer The object responsible to render the skp object into pdf. | 300 * @param renderer The object responsible to render the skp object into pdf. |
| 352 */ | 301 */ |
| 353 static int process_input(const char* input, const SkString& outputDir, | 302 static int process_input(const char* input, const SkString& outputDir, |
| 354 SkPdfRenderer& renderer) { | 303 SkPdfRenderer& renderer) { |
| 355 int failures = 0; | 304 int failures = 0; |
| 356 if (sk_isdir(input)) { | 305 if (sk_isdir(input)) { |
| 357 SkOSFile::Iter iter(input, PDF_FILE_EXTENSION); | 306 SkOSFile::Iter iter(input, PDF_FILE_EXTENSION); |
| 358 SkString inputFilename; | 307 SkString inputFilename; |
| 359 while (iter.next(&inputFilename)) { | 308 while (iter.next(&inputFilename)) { |
| 360 SkString inputPath; | 309 SkString inputPath = SkOSPath::SkPathJoin(input, inputFilename.c_str
()); |
| 361 SkString _input; | |
| 362 _input.append(input); | |
| 363 make_filepath(&inputPath, _input, inputFilename); | |
| 364 if (!process_pdf(inputPath, outputDir, renderer)) { | 310 if (!process_pdf(inputPath, outputDir, renderer)) { |
| 365 ++failures; | 311 ++failures; |
| 366 } | 312 } |
| 367 } | 313 } |
| 368 } else { | 314 } else { |
| 369 SkString inputPath(input); | 315 SkString inputPath(input); |
| 370 if (!process_pdf(inputPath, outputDir, renderer)) { | 316 if (!process_pdf(inputPath, outputDir, renderer)) { |
| 371 ++failures; | 317 ++failures; |
| 372 } | 318 } |
| 373 } | 319 } |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 405 } | 351 } |
| 406 | 352 |
| 407 return 0; | 353 return 0; |
| 408 } | 354 } |
| 409 | 355 |
| 410 #if !defined SK_BUILD_FOR_IOS | 356 #if !defined SK_BUILD_FOR_IOS |
| 411 int main(int argc, char * const argv[]) { | 357 int main(int argc, char * const argv[]) { |
| 412 return tool_main(argc, (char**) argv); | 358 return tool_main(argc, (char**) argv); |
| 413 } | 359 } |
| 414 #endif | 360 #endif |
| OLD | NEW |