Index: src/core/SkPicturePlayback.h |
diff --git a/src/core/SkPicturePlayback.h b/src/core/SkPicturePlayback.h |
index 9751e3a5e704b968442c0a965a68442a81ad5270..23c49cfe7177e697d1e8ba4bbd12e5a9373c7edf 100644 |
--- a/src/core/SkPicturePlayback.h |
+++ b/src/core/SkPicturePlayback.h |
@@ -9,29 +9,27 @@ |
#ifndef SkPicturePlayback_DEFINED |
#define SkPicturePlayback_DEFINED |
-#include "SkPicture.h" |
-#include "SkReader32.h" |
- |
#include "SkBitmap.h" |
-#include "SkData.h" |
-#include "SkMatrix.h" |
-#include "SkReadBuffer.h" |
-#include "SkPaint.h" |
-#include "SkPath.h" |
#include "SkPathHeap.h" |
-#include "SkRegion.h" |
-#include "SkRRect.h" |
+#include "SkPicture.h" |
#include "SkPictureFlat.h" |
#ifdef SK_BUILD_FOR_ANDROID |
#include "SkThread.h" |
#endif |
+class SkData; |
class SkPictureRecord; |
+class SkReader32; |
class SkStream; |
class SkWStream; |
class SkBBoxHierarchy; |
+class SkMatrix; |
+class SkPaint; |
+class SkPath; |
class SkPictureStateTree; |
+class SkReadBuffer; |
+class SkRegion; |
struct SkPictInfo { |
enum Flags { |
@@ -126,16 +124,13 @@ struct SkPictCopyInfo { |
class SkPicturePlayback { |
public: |
- SkPicturePlayback(const SkPicture* picture, const SkPicturePlayback& src, |
+ SkPicturePlayback(const SkPicturePlayback& src, |
SkPictCopyInfo* deepCopyInfo = NULL); |
- SkPicturePlayback(const SkPicture* picture, const SkPictureRecord& record, |
- const SkPictInfo&, bool deepCopyOps); |
- static SkPicturePlayback* CreateFromStream(SkPicture* picture, |
- SkStream*, |
+ SkPicturePlayback(const SkPictureRecord& record, const SkPictInfo&, bool deepCopyOps); |
+ static SkPicturePlayback* CreateFromStream(SkStream*, |
const SkPictInfo&, |
SkPicture::InstallPixelRefProc); |
- static SkPicturePlayback* CreateFromBuffer(SkPicture* picture, |
- SkReadBuffer&, |
+ static SkPicturePlayback* CreateFromBuffer(SkReadBuffer&, |
const SkPictInfo&); |
virtual ~SkPicturePlayback(); |
@@ -163,10 +158,10 @@ public: |
void resetOpID() { fCurOffset = 0; } |
protected: |
- explicit SkPicturePlayback(const SkPicture* picture, const SkPictInfo& info); |
+ explicit SkPicturePlayback(const SkPictInfo& info); |
- bool parseStream(SkPicture* picture, SkStream*, SkPicture::InstallPixelRefProc); |
- bool parseBuffer(SkPicture* picture, SkReadBuffer& buffer); |
+ bool parseStream(SkStream*, SkPicture::InstallPixelRefProc); |
+ bool parseBuffer(SkReadBuffer& buffer); |
#ifdef SK_DEVELOPER |
virtual bool preDraw(int opIndex, int type); |
virtual void postDraw(int opIndex); |
@@ -197,7 +192,8 @@ private: |
} |
const SkPath& getPath(SkReader32& reader) { |
- return fPicture->getPath(reader.readInt() - 1); |
+ int index = reader.readInt() - 1; |
+ return (*fPathHeap.get())[index]; |
} |
const SkPicture* getPicture(SkReader32& reader) { |
@@ -277,18 +273,14 @@ public: |
#endif |
private: // these help us with reading/writing |
- bool parseStreamTag(SkPicture* picture, SkStream*, uint32_t tag, uint32_t size, |
- SkPicture::InstallPixelRefProc); |
- bool parseBufferTag(SkPicture* picture, SkReadBuffer&, uint32_t tag, uint32_t size); |
+ bool parseStreamTag(SkStream*, uint32_t tag, uint32_t size, SkPicture::InstallPixelRefProc); |
+ bool parseBufferTag(SkReadBuffer&, uint32_t tag, uint32_t size); |
void flattenToBuffer(SkWriteBuffer&) const; |
private: |
friend class SkPicture; |
friend class SkGpuDevice; // for access to setDrawLimits & setReplacements |
- // The picture that owns this SkPicturePlayback object |
- const SkPicture* fPicture; |
- |
// Only used by getBitmap() if the passed in index is SkBitmapHeap::INVALID_SLOT. This empty |
// bitmap allows playback to draw nothing and move on. |
SkBitmap fBadBitmap; |
@@ -300,6 +292,8 @@ private: |
SkData* fOpData; // opcodes and parameters |
+ SkAutoTUnref<const SkPathHeap> fPathHeap; // reference counted |
+ |
const SkPicture** fPictureRefs; |
int fPictureCount; |
@@ -403,6 +397,8 @@ private: |
static void WriteFactories(SkWStream* stream, const SkFactorySet& rec); |
static void WriteTypefaces(SkWStream* stream, const SkRefCntSet& rec); |
+ void initForPlayback() const; |
+ |
#ifdef SK_BUILD_FOR_ANDROID |
SkMutex fDrawMutex; |
bool fAbortCurrentPlayback; |