Chromium Code Reviews| Index: src/effects/SkLayerRasterizer.cpp |
| diff --git a/src/effects/SkLayerRasterizer.cpp b/src/effects/SkLayerRasterizer.cpp |
| index a10d758ede45a54938802689c8b2ccb8a41640a2..4284e1897ab370ffa1ed00d276e3668944c0b704 100644 |
| --- a/src/effects/SkLayerRasterizer.cpp |
| +++ b/src/effects/SkLayerRasterizer.cpp |
| @@ -25,21 +25,29 @@ struct SkLayerRasterizer_Rec { |
| SkVector fOffset; |
| }; |
| -SkLayerRasterizer::SkLayerRasterizer() : fLayers(sizeof(SkLayerRasterizer_Rec)) |
| +SkLayerRasterizer::SkLayerRasterizer() : fLayers(SkNEW_ARGS(SkDeque, (sizeof(SkLayerRasterizer_Rec)))) |
|
scroggo
2014/02/24 13:57:51
nit: line too long.
Typically we would write this
|
| +{ |
| +} |
| + |
| +SkLayerRasterizer::SkLayerRasterizer(SkDeque* layers) : fLayers(layers) |
| { |
| } |
| SkLayerRasterizer::~SkLayerRasterizer() { |
| - SkDeque::F2BIter iter(fLayers); |
| + SkASSERT(fLayers); |
| + SkDeque::F2BIter iter(*fLayers); |
| SkLayerRasterizer_Rec* rec; |
| while ((rec = (SkLayerRasterizer_Rec*)iter.next()) != NULL) |
| rec->fPaint.~SkPaint(); |
| + |
| + SkDELETE(fLayers); |
| } |
| void SkLayerRasterizer::addLayer(const SkPaint& paint, SkScalar dx, |
| SkScalar dy) { |
| - SkLayerRasterizer_Rec* rec = (SkLayerRasterizer_Rec*)fLayers.push_back(); |
| + SkASSERT(fLayers); |
| + SkLayerRasterizer_Rec* rec = (SkLayerRasterizer_Rec*)fLayers->push_back(); |
| SkNEW_PLACEMENT_ARGS(&rec->fPaint, SkPaint, (paint)); |
| rec->fOffset.set(dx, dy); |
| @@ -89,12 +97,13 @@ static bool compute_bounds(const SkDeque& layers, const SkPath& path, |
| bool SkLayerRasterizer::onRasterize(const SkPath& path, const SkMatrix& matrix, |
| const SkIRect* clipBounds, |
| SkMask* mask, SkMask::CreateMode mode) const { |
| - if (fLayers.empty()) { |
| + SkASSERT(fLayers); |
| + if (fLayers->empty()) { |
| return false; |
| } |
| if (SkMask::kJustRenderImage_CreateMode != mode) { |
| - if (!compute_bounds(fLayers, path, matrix, clipBounds, &mask->fBounds)) |
| + if (!compute_bounds(*fLayers, path, matrix, clipBounds, &mask->fBounds)) |
| return false; |
| } |
| @@ -131,7 +140,7 @@ bool SkLayerRasterizer::onRasterize(const SkPath& path, const SkMatrix& matrix, |
| // we set the matrixproc in the loop, as the matrix changes each time (potentially) |
| draw.fBounder = NULL; |
| - SkDeque::F2BIter iter(fLayers); |
| + SkDeque::F2BIter iter(*fLayers); |
| SkLayerRasterizer_Rec* rec; |
| while ((rec = (SkLayerRasterizer_Rec*)iter.next()) != NULL) { |
| @@ -144,11 +153,11 @@ bool SkLayerRasterizer::onRasterize(const SkPath& path, const SkMatrix& matrix, |
| } |
| SkLayerRasterizer::SkLayerRasterizer(SkReadBuffer& buffer) |
| - : SkRasterizer(buffer), fLayers(sizeof(SkLayerRasterizer_Rec)) { |
| + : SkRasterizer(buffer), fLayers(SkNEW_ARGS(SkDeque, (sizeof(SkLayerRasterizer_Rec)))) { |
| int count = buffer.readInt(); |
| for (int i = 0; i < count; i++) { |
| - SkLayerRasterizer_Rec* rec = (SkLayerRasterizer_Rec*)fLayers.push_back(); |
| + SkLayerRasterizer_Rec* rec = (SkLayerRasterizer_Rec*)fLayers->push_back(); |
| SkNEW_PLACEMENT(&rec->fPaint, SkPaint); |
| buffer.readPaint(&rec->fPaint); |
| @@ -159,9 +168,10 @@ SkLayerRasterizer::SkLayerRasterizer(SkReadBuffer& buffer) |
| void SkLayerRasterizer::flatten(SkWriteBuffer& buffer) const { |
| this->INHERITED::flatten(buffer); |
| - buffer.writeInt(fLayers.count()); |
| + SkASSERT(fLayers); |
| + buffer.writeInt(fLayers->count()); |
| - SkDeque::F2BIter iter(fLayers); |
| + SkDeque::F2BIter iter(*fLayers); |
| const SkLayerRasterizer_Rec* rec; |
| while ((rec = (const SkLayerRasterizer_Rec*)iter.next()) != NULL) { |
| @@ -169,3 +179,28 @@ void SkLayerRasterizer::flatten(SkWriteBuffer& buffer) const { |
| buffer.writePoint(rec->fOffset); |
| } |
| } |
| + |
| +SkLayerRasterizer::Builder::Builder() |
| + : fLayers(SkNEW_ARGS(SkDeque, (sizeof(SkLayerRasterizer_Rec)))) |
| +{ |
| +} |
| + |
| +SkLayerRasterizer::Builder::~Builder() |
| +{ |
| + SkDELETE(fLayers); |
| +} |
| + |
| +void SkLayerRasterizer::Builder::addLayer(const SkPaint& paint, SkScalar dx, |
| + SkScalar dy) { |
| + SkASSERT(fLayers); |
| + SkLayerRasterizer_Rec* rec = (SkLayerRasterizer_Rec*)fLayers->push_back(); |
| + |
| + SkNEW_PLACEMENT_ARGS(&rec->fPaint, SkPaint, (paint)); |
| + rec->fOffset.set(dx, dy); |
| +} |
| + |
| +SkLayerRasterizer* SkLayerRasterizer::Builder::detachRasterizer() { |
| + SkLayerRasterizer* rasterizer = SkNEW_ARGS(SkLayerRasterizer, (fLayers)); |
| + fLayers = NULL; |
| + return rasterizer; |
| +} |