blob: 98e55539efc7ed985e25c271eae22073b03009e8 [file] [log] [blame]
skia.committer@gmail.com2b34fe02013-05-08 07:01:40 +00001#include "SkBitmap.h"
2#include "SkDevice.h"
3#include "SkCanvas.h"
caryclark@google.comcffbcc32013-06-04 17:59:42 +00004#include "SkImageDecoder.h"
skia.committer@gmail.com2b34fe02013-05-08 07:01:40 +00005#include "SkImageEncoder.h"
6#include "SkStream.h"
7#include "SkOSFile.h"
8#include "SkPicture.h"
9#include "SkString.h"
10#include "Test.h"
11
12static void make_filepath(SkString* path, const char* dir, const SkString& name) {
13 size_t len = strlen(dir);
14 path->set(dir);
15 if (len > 0 && dir[len - 1] != '/') {
16 path->append("\\");
17 }
18 path->append(name);
19}
20
21static void PathOpsSkpClipTest(skiatest::Reporter* reporter) {
caryclark@google.comcffbcc32013-06-04 17:59:42 +000022 const char pictDir[] = "D:\\skp";
23 const char outSkpClipDir[] = "D:\\skpClip";
24 const char outOldClipDir[] = "D:\\oldClip";
skia.committer@gmail.com2b34fe02013-05-08 07:01:40 +000025 SkOSFile::Iter iter(pictDir, "skp");
26 SkString filename;
27 while (iter.next(&filename)) {
caryclark@google.comcffbcc32013-06-04 17:59:42 +000028#if 01
29 if (strcmp(filename.c_str(), "desk_15min-lt.skp")) {
skia.committer@gmail.com2b34fe02013-05-08 07:01:40 +000030 continue;
31 }
32#endif
33 SkString path;
34 make_filepath(&path, pictDir, filename);
35 SkFILEStream stream(path.c_str());
36 if (!stream.isValid()) {
37 continue;
38 }
caryclark@google.comcffbcc32013-06-04 17:59:42 +000039 bool success;
40 SkPicture* pic = SkNEW_ARGS(SkPicture, (&stream, &success, &SkImageDecoder::DecodeMemory));
41 if (!success) {
42 continue;
43 }
skia.committer@gmail.com2b34fe02013-05-08 07:01:40 +000044 int width = pic->width();
45 int height = pic->height();
46 SkBitmap bitmap;
47 bitmap.setConfig(SkBitmap::kARGB_8888_Config, width, height);
48 bitmap.allocPixels();
49 SkCanvas canvas(bitmap);
50 filename.remove(filename.size() - 3, 3);
51 filename.append("png");
52 for (int i = 0; i < 2; ++i) {
53 bool useOp = i ? true : false;
54 canvas.setAllowSimplifyClip(useOp);
55 pic->draw(&canvas);
56 SkString outFile;
57 make_filepath(&outFile, useOp ? outSkpClipDir : outOldClipDir, filename);
58 SkImageEncoder::EncodeFile(outFile.c_str(), bitmap, SkImageEncoder::kPNG_Type, 100);
59 }
60 SkDELETE(pic);
61 reporter->bumpTestCount();
62 }
63}
64
65#include "TestClassDef.h"
66DEFINE_TESTCLASS_SHORT(PathOpsSkpClipTest)