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