aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--tools/bench_pictures_main.cpp2
-rw-r--r--tools/picture_utils.cpp4
-rw-r--r--tools/picture_utils.h2
-rw-r--r--tools/render_pictures_main.cpp48
4 files changed, 33 insertions, 23 deletions
diff --git a/tools/bench_pictures_main.cpp b/tools/bench_pictures_main.cpp
index fca01bce3f..aca98e4300 100644
--- a/tools/bench_pictures_main.cpp
+++ b/tools/bench_pictures_main.cpp
@@ -318,7 +318,7 @@ static void process_input(const SkString& input, Options* options) {
if (iter.next(&inputFilename)) {
do {
SkString inputPath;
- sk_tools::make_filepath(&inputPath, input.c_str(),
+ sk_tools::make_filepath(&inputPath, input,
inputFilename);
run_single_benchmark(inputPath, options);
} while(iter.next(&inputFilename));
diff --git a/tools/picture_utils.cpp b/tools/picture_utils.cpp
index 98351b84b5..28e6293d2f 100644
--- a/tools/picture_utils.cpp
+++ b/tools/picture_utils.cpp
@@ -13,8 +13,8 @@
namespace sk_tools {
- void make_filepath(SkString* path, const char* dir, const SkString& name) {
- size_t len = strlen(dir);
+ void make_filepath(SkString* path, const SkString& dir, const SkString& name) {
+ size_t len = dir.size();
path->set(dir);
if (0 < len && '/' != dir[len - 1]) {
path->append("/");
diff --git a/tools/picture_utils.h b/tools/picture_utils.h
index 18efcb79c2..aeb625f6e5 100644
--- a/tools/picture_utils.h
+++ b/tools/picture_utils.h
@@ -17,7 +17,7 @@ class SkPicture;
namespace sk_tools {
// Creates a posix style filepath by concatenating name onto dir with a
// forward slash into path.
- void make_filepath(SkString* path, const char* dir, const SkString& name);
+ void make_filepath(SkString* path, const SkString&, const SkString& name);
// Returns the last part of the path (file name or leaf directory name)
//
diff --git a/tools/render_pictures_main.cpp b/tools/render_pictures_main.cpp
index da7df634b3..09e1572f17 100644
--- a/tools/render_pictures_main.cpp
+++ b/tools/render_pictures_main.cpp
@@ -16,6 +16,7 @@
#include "SkString.h"
#include "picture_utils.h"
+typedef void (*RenderFunc) (SkPicture*, SkBitmap*);
static void usage(const char* argv0) {
SkDebugf("SkPicture rendering tool\n");
@@ -30,17 +31,17 @@ static void usage(const char* argv0) {
" outputDir: directory to write the rendered images.\n");
}
-static void make_output_filepath(SkString* path, const char* dir,
+static void make_output_filepath(SkString* path, const SkString& dir,
const SkString& name) {
sk_tools::make_filepath(path, dir, name);
path->remove(path->size() - 3, 3);
path->append("png");
}
-static void generate_image_from_picture(SkPicture& pict, SkBitmap* bitmap) {
- sk_tools::setup_bitmap(bitmap, pict.width(), pict.height());
+static void simple_render(SkPicture* pict, SkBitmap* bitmap) {
+ sk_tools::setup_bitmap(bitmap, pict->width(), pict->height());
SkCanvas canvas(*bitmap);
- canvas.drawPicture(pict);
+ canvas.drawPicture(*pict);
}
/* since PNG insists on unpremultiplying our alpha, we take no precision chances
@@ -64,7 +65,7 @@ static bool write_bitmap(const SkString& path, const SkBitmap& bitmap) {
SkImageEncoder::kPNG_Type, 100);
}
-static void write_output(const char* outputDir, const SkString& inputFilename,
+static void write_output(const SkString& outputDir, const SkString& inputFilename,
const SkBitmap& bitmap) {
SkString outputPath;
make_output_filepath(&outputPath, outputDir, inputFilename);
@@ -74,7 +75,8 @@ static void write_output(const char* outputDir, const SkString& inputFilename,
}
}
-static void render_picture(const SkString& inputPath, const char* outputDir) {
+static void render_picture(const SkString& inputPath, const SkString& outputDir,
+ RenderFunc renderFunc) {
SkString inputFilename;
sk_tools::get_basename(&inputFilename, inputPath);
@@ -87,36 +89,44 @@ static void render_picture(const SkString& inputPath, const char* outputDir) {
SkPicture picture(&inputStream);
SkBitmap bitmap;
- generate_image_from_picture(picture, &bitmap);
+ renderFunc(&picture, &bitmap);
write_output(outputDir, inputFilename, bitmap);
}
-static void process_input(const char* input, const char* outputDir) {
- SkOSFile::Iter iter(input, "skp");
+static void process_input(const SkString& input, const SkString& outputDir,
+ RenderFunc renderFunc) {
+ SkOSFile::Iter iter(input.c_str(), "skp");
SkString inputFilename;
if (iter.next(&inputFilename)) {
do {
SkString inputPath;
sk_tools::make_filepath(&inputPath, input, inputFilename);
- render_picture(inputPath, outputDir);
+ render_picture(inputPath, outputDir, renderFunc);
} while(iter.next(&inputFilename));
} else {
SkString inputPath(input);
- render_picture(inputPath, outputDir);
+ render_picture(inputPath, outputDir, renderFunc);
}
}
-int main(int argc, char* const argv[]) {
- const char* outputDir;
- if (argc < 3) {
- usage(argv[0]);
- return -1;
+static void parse_commandline(int argc, char* const argv[], SkTArray<SkString>* inputs,
+ RenderFunc* renderFunc){
+ const char* argv0 = argv[0];
+ char* const* stop = argv + argc;
+
+ for (++argv; argv < stop; ++argv) {
+ inputs->push_back(SkString(*argv));
}
+}
- outputDir = argv[argc - 1];
+int main(int argc, char* const argv[]) {
+ SkTArray<SkString> inputs;
+ RenderFunc renderFunc = simple_render;
+ parse_commandline(argc, argv, &inputs, &renderFunc);
+ SkString outputDir = inputs[inputs.count() - 1];
- for (int i = 1; i < argc - 1; i ++) {
- process_input(argv[i], outputDir);
+ for (int i = 0; i < inputs.count() - 1; i ++) {
+ process_input(inputs[i], outputDir, renderFunc);
}
}