1/*
2 * Copyright 2012 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#include "SkBitmap.h"
9#include "SkCanvas.h"
10#include "SkGraphics.h"
11#include "SkOSFile.h"
12#include "SkPicture.h"
13#include "SkStream.h"
14#include "SkString.h"
15#include "SkDumpCanvas.h"
16
17static sk_sp<SkPicture> inspect(const char path[]) {
18    SkFILEStream stream(path);
19    if (!stream.isValid()) {
20        printf("-- Can't open '%s'\n", path);
21        return nullptr;
22    }
23
24    printf("Opening '%s'...\n", path);
25
26    {
27        int32_t header[3];
28        if (stream.read(header, sizeof(header)) != sizeof(header)) {
29            printf("-- Failed to read header (12 bytes)\n");
30            return nullptr;
31        }
32        printf("version:%d width:%d height:%d\n", header[0], header[1], header[2]);
33    }
34
35    stream.rewind();
36    auto pic = SkPicture::MakeFromStream(&stream);
37    if (nullptr == pic) {
38        SkDebugf("Could not create SkPicture: %s\n", path);
39        return nullptr;
40    }
41    printf("picture cullRect: [%f %f %f %f]\n",
42           pic->cullRect().fLeft, pic->cullRect().fTop,
43           pic->cullRect().fRight, pic->cullRect().fBottom);
44    return pic;
45}
46
47static void dumpOps(SkPicture* pic) {
48#ifdef SK_DEBUG
49    SkDebugfDumper dumper;
50    SkDumpCanvas canvas(&dumper);
51    canvas.drawPicture(pic);
52#else
53    printf("SK_DEBUG mode not enabled\n");
54#endif
55}
56
57int main(int argc, char** argv) {
58    SkAutoGraphics ag;
59    if (argc < 2) {
60        printf("Usage: pinspect [--dump-ops] filename [filename ...]\n");
61        return 1;
62    }
63
64    bool doDumpOps = false;
65
66    int index = 1;
67    if (!strcmp(argv[index], "--dump-ops")) {
68        index += 1;
69        doDumpOps = true;
70    }
71
72    for (; index < argc; ++index) {
73        auto pic(inspect(argv[index]));
74        if (doDumpOps) {
75            dumpOps(pic.get());
76        }
77        if (index < argc - 1) {
78            printf("\n");
79        }
80    }
81    return 0;
82}
83