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