|  | /* | 
|  | * Copyright 2014 Google Inc. | 
|  | * | 
|  | * Use of this source code is governed by a BSD-style license that can be | 
|  | * found in the LICENSE file. | 
|  | */ | 
|  |  | 
|  | #ifndef SkPicturePlayback_DEFINED | 
|  | #define SkPicturePlayback_DEFINED | 
|  |  | 
|  | #include "include/core/SkM44.h" | 
|  | #include "include/core/SkPicture.h" | 
|  | #include "include/private/base/SkNoncopyable.h" | 
|  | #include "src/core/SkPictureFlat.h" | 
|  |  | 
|  | #include <cstddef> | 
|  | #include <cstdint> | 
|  |  | 
|  | class SkCanvas; | 
|  | class SkPictureData; | 
|  | class SkReadBuffer; | 
|  |  | 
|  | // The basic picture playback class replays the provided picture into a canvas. | 
|  | class SkPicturePlayback final : SkNoncopyable { | 
|  | public: | 
|  | SkPicturePlayback(const SkPictureData* data) | 
|  | : fPictureData(data) | 
|  | , fCurOffset(0) { | 
|  | } | 
|  |  | 
|  | void draw(SkCanvas* canvas, SkPicture::AbortCallback*, SkReadBuffer* buffer); | 
|  |  | 
|  | // TODO: remove the curOp calls after cleaning up GrGatherDevice | 
|  | // Return the ID of the operation currently being executed when playing | 
|  | // back. 0 indicates no call is active. | 
|  | size_t curOpID() const { return fCurOffset; } | 
|  | void resetOpID() { fCurOffset = 0; } | 
|  |  | 
|  | private: | 
|  | const SkPictureData* fPictureData; | 
|  |  | 
|  | // The offset of the current operation when within the draw method | 
|  | size_t fCurOffset; | 
|  |  | 
|  | void handleOp(SkReadBuffer* reader, | 
|  | DrawType op, | 
|  | uint32_t size, | 
|  | SkCanvas* canvas, | 
|  | const SkM44& initialMatrix); | 
|  |  | 
|  | class AutoResetOpID { | 
|  | public: | 
|  | AutoResetOpID(SkPicturePlayback* playback) : fPlayback(playback) { } | 
|  | ~AutoResetOpID() { | 
|  | if (fPlayback) { | 
|  | fPlayback->resetOpID(); | 
|  | } | 
|  | } | 
|  |  | 
|  | private: | 
|  | SkPicturePlayback* fPlayback; | 
|  | }; | 
|  |  | 
|  | using INHERITED = SkNoncopyable; | 
|  | }; | 
|  |  | 
|  | #endif |