From 09b84a00f79979142fbcfd691ccaeb5e5600922d Mon Sep 17 00:00:00 2001 From: "reed@android.com" Date: Fri, 26 Jun 2009 20:22:26 +0000 Subject: add shape recording to pictuures (sans serialization) git-svn-id: http://skia.googlecode.com/svn/trunk@240 2bbb7eff-a529-9590-31e7-b0007b416f81 --- src/core/SkPicturePlayback.cpp | 39 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) (limited to 'src/core/SkPicturePlayback.cpp') 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& 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& 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(); -- cgit v1.2.3