1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/*
2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2014 Google Inc.
3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot *
4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be
5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file.
6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */
7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#ifndef SkPicturePlayback_DEFINED
9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define SkPicturePlayback_DEFINED
10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkPictureFlat.h"  // for DrawType
12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkBitmap;
14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkCanvas;
15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkPaint;
16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkPictureData;
17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot// The basic picture playback class replays the provided picture into a canvas.
19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkPicturePlayback final : SkNoncopyable {
20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic:
21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkPicturePlayback(const SkPictureData* data)
22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        : fPictureData(data)
23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        , fCurOffset(0) {
24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void draw(SkCanvas* canvas, SkPicture::AbortCallback*, SkReadBuffer* buffer);
27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    // TODO: remove the curOp calls after cleaning up GrGatherDevice
29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    // Return the ID of the operation currently being executed when playing
30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    // back. 0 indicates no call is active.
31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    size_t curOpID() const { return fCurOffset; }
32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void resetOpID() { fCurOffset = 0; }
33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprotected:
35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    const SkPictureData* fPictureData;
36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    // The offset of the current operation when within the draw method
38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    size_t fCurOffset;
39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void handleOp(SkReadBuffer* reader,
41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                  DrawType op,
42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                  uint32_t size,
43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                  SkCanvas* canvas,
44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                  const SkMatrix& initialMatrix);
45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    static DrawType ReadOpAndSize(SkReadBuffer* reader, uint32_t* size);
47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    class AutoResetOpID {
49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    public:
50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        AutoResetOpID(SkPicturePlayback* playback) : fPlayback(playback) { }
51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        ~AutoResetOpID() {
52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            if (fPlayback) {
53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                fPlayback->resetOpID();
54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            }
55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        }
56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    private:
58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkPicturePlayback* fPlayback;
59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    };
60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate:
62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    typedef SkNoncopyable INHERITED;
63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot};
64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif
66