1/*
2 * Copyright 2014 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#ifndef SkPicturePlayback_DEFINED
9#define SkPicturePlayback_DEFINED
10
11#include "src/core/SkPictureFlat.h"
12
13class SkBitmap;
14class SkCanvas;
15class SkPaint;
16class SkPictureData;
17
18// The basic picture playback class replays the provided picture into a canvas.
19class SkPicturePlayback final : SkNoncopyable {
20public:
21 SkPicturePlayback(const SkPictureData* data)
22 : fPictureData(data)
23 , fCurOffset(0) {
24 }
25
26 void draw(SkCanvas* canvas, SkPicture::AbortCallback*, SkReadBuffer* buffer);
27
28 // TODO: remove the curOp calls after cleaning up GrGatherDevice
29 // Return the ID of the operation currently being executed when playing
30 // back. 0 indicates no call is active.
31 size_t curOpID() const { return fCurOffset; }
32 void resetOpID() { fCurOffset = 0; }
33
34protected:
35 const SkPictureData* fPictureData;
36
37 // The offset of the current operation when within the draw method
38 size_t fCurOffset;
39
40 void handleOp(SkReadBuffer* reader,
41 DrawType op,
42 uint32_t size,
43 SkCanvas* canvas,
44 const SkMatrix& initialMatrix);
45
46 class AutoResetOpID {
47 public:
48 AutoResetOpID(SkPicturePlayback* playback) : fPlayback(playback) { }
49 ~AutoResetOpID() {
50 if (fPlayback) {
51 fPlayback->resetOpID();
52 }
53 }
54
55 private:
56 SkPicturePlayback* fPlayback;
57 };
58
59private:
60 typedef SkNoncopyable INHERITED;
61};
62
63#endif
64