diff options
author | reed@android.com <reed@android.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2009-06-26 20:22:26 +0000 |
---|---|---|
committer | reed@android.com <reed@android.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2009-06-26 20:22:26 +0000 |
commit | 09b84a00f79979142fbcfd691ccaeb5e5600922d (patch) | |
tree | 216574508368bdb12ff070d608709aabff856c68 /src/core/SkPicturePlayback.cpp | |
parent | 0baf19375466cfc24c96532df406e7c5b1d1aae8 (diff) |
add shape recording to pictuures (sans serialization)
git-svn-id: http://skia.googlecode.com/svn/trunk@240 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/core/SkPicturePlayback.cpp')
-rw-r--r-- | src/core/SkPicturePlayback.cpp | 39 |
1 files changed, 36 insertions, 3 deletions
diff --git a/src/core/SkPicturePlayback.cpp b/src/core/SkPicturePlayback.cpp index 421d5c21da..24fcd8e57d 100644 --- a/src/core/SkPicturePlayback.cpp +++ b/src/core/SkPicturePlayback.cpp @@ -119,7 +119,17 @@ SkPicturePlayback::SkPicturePlayback(const SkPictureRecord& record) { fPictureRefs[i]->ref(); } } - + + const SkTDArray<SkShape* >& shapes = record.getShapes(); + fShapeCount = shapes.count(); + if (fShapeCount > 0) { + fShapes = SkNEW_ARRAY(SkShape*, fShapeCount); + for (int i = 0; i < fShapeCount; i++) { + fShapes[i] = shapes[i]; + fShapes[i]->ref(); + } + } + const SkTDArray<const SkFlatRegion* >& regions = record.getRegions(); fRegionCount = regions.count(); if (fRegionCount > 0) { @@ -192,6 +202,13 @@ SkPicturePlayback::SkPicturePlayback(const SkPicturePlayback& src) { fPictureRefs[i]->ref(); } + fShapeCount = src.fShapeCount; + fShapes = SkNEW_ARRAY(SkShape*, fShapeCount); + for (int i = 0; i < fShapeCount; i++) { + fShapes[i] = src.fShapes[i]; + fShapes[i]->ref(); + } + fRegionCount = src.fRegionCount; fRegions = SkNEW_ARRAY(SkRegion, fRegionCount); for (i = 0; i < fRegionCount; i++) { @@ -205,6 +222,7 @@ void SkPicturePlayback::init() { fPaints = NULL; fPathHeap = NULL; fPictureRefs = NULL; + fShapes = NULL; fRegions = NULL; fBitmapCount = fMatrixCount = fPaintCount = fPictureCount = fRegionCount = 0; @@ -221,12 +239,17 @@ SkPicturePlayback::~SkPicturePlayback() { SkDELETE_ARRAY(fRegions); fPathHeap->safeUnref(); - + for (int i = 0; i < fPictureCount; i++) { fPictureRefs[i]->unref(); } SkDELETE_ARRAY(fPictureRefs); + for (int i = 0; i < fShapeCount; i++) { + fShapes[i]->unref(); + } + SkDELETE_ARRAY(fShapes); + SkDELETE(fFactoryPlayback); } @@ -362,7 +385,14 @@ void SkPicturePlayback::serialize(SkWStream* stream) const { for (i = 0; i < fPictureCount; i++) { fPictureRefs[i]->serialize(stream); } - + +#if 0 + writeTagSize(stream, PICT_SHAPE_TAG, fShapeCount); + for (i = 0; i < fShapeCount; i++) { + fShapes[i]->serialize(stream); + } +#endif + writeTagSize(stream, PICT_ARRAYS_TAG, buffer.size()); buffer.writeToStream(stream); } @@ -603,6 +633,9 @@ void SkPicturePlayback::draw(SkCanvas& canvas) { const SkPaint& paint = *getPaint(); canvas.drawRect(*fReader.skipRect(), paint); } break; + case DRAW_SHAPE: + canvas.drawShape(getShape()); + break; case DRAW_SPRITE: { const SkPaint* paint = getPaint(); const SkBitmap& bitmap = getBitmap(); |