Chromium Code Reviews| Index: include/effects/SkLayerDrawLooper.h |
| diff --git a/include/effects/SkLayerDrawLooper.h b/include/effects/SkLayerDrawLooper.h |
| index 76172dfd4b1dfcfb45296bac51a36dcff101d344..8918f83a9964f4fd1b95156843fda6744a979b2f 100644 |
| --- a/include/effects/SkLayerDrawLooper.h |
| +++ b/include/effects/SkLayerDrawLooper.h |
| @@ -9,10 +9,13 @@ |
| #define SkLayerDrawLooper_DEFINED |
| #include "SkDrawLooper.h" |
| -#include "SkPaint.h" |
| -#include "SkPoint.h" |
| #include "SkXfermode.h" |
| +#include <stddef.h> |
| +#include <vector> |
|
mtklein
2015/09/25 11:47:21
We don't use std::vector in Skia (yet?) but SkTArr
mdempsky
2015/09/25 16:40:17
Hm, right. Somehow I thought I saw STL usage else
|
| + |
| +class SkPaint; |
| + |
| class SK_API SkLayerDrawLooper : public SkDrawLooper { |
| public: |
| virtual ~SkLayerDrawLooper(); |
| @@ -88,13 +91,8 @@ protected: |
| void flatten(SkWriteBuffer&) const override; |
| private: |
| - struct Rec { |
| - Rec* fNext; |
| - SkPaint fPaint; |
| - LayerInfo fInfo; |
| - }; |
| - Rec* fRecs; |
| - int fCount; |
| + struct Rec; |
| + std::vector<Rec> fRecs; |
| // state-machine during the init/next cycle |
| class LayerDrawLooperContext : public SkDrawLooper::Context { |
| @@ -105,7 +103,8 @@ private: |
| bool next(SkCanvas*, SkPaint* paint) override; |
| private: |
| - Rec* fCurrRec; |
| + std::vector<Rec>::const_iterator fCurr; |
| + const std::vector<Rec>::const_iterator fEnd; |
| static void ApplyInfo(SkPaint* dst, const SkPaint& src, const LayerInfo&); |
| }; |
| @@ -119,35 +118,35 @@ public: |
| ~Builder(); |
| /** |
| - * Call for each layer you want to add (from top to bottom). |
| + * Requests that the builder reserve space for at least n layers. |
| + */ |
| + void reserve(size_t n); |
| + |
| + /** |
| + * Call for each layer you want to add (from bottom to top). |
| * This returns a paint you can modify, but that ptr is only valid until |
| - * the next call made to addLayer(). |
| + * the next call made to addLayerOnTop(). |
| */ |
| - SkPaint* addLayer(const LayerInfo&); |
| + SkPaint* addLayerOnTop(const LayerInfo&); |
|
mtklein
2015/09/25 11:47:21
Can we keep the API oriented top to bottom while k
mdempsky
2015/09/25 16:40:17
Yeah that's possible too if you think that's bette
|
| /** |
| * This layer will draw with the original paint, at the specified offset |
| */ |
| - void addLayer(SkScalar dx, SkScalar dy); |
| + void addLayerOnTop(SkScalar dx, SkScalar dy); |
| /** |
| * This layer will with the original paint and no offset. |
| */ |
| - void addLayer() { this->addLayer(0, 0); } |
| - |
| - /// Similar to addLayer, but adds a layer to the top. |
| - SkPaint* addLayerOnTop(const LayerInfo&); |
| + void addLayerOnTop() { this->addLayerOnTop(0, 0); } |
| /** |
| - * Pass list of layers on to newly built looper and return it. This will |
| - * also reset the builder, so it can be used to build another looper. |
| - */ |
| + * Pass list of layers on to newly built looper and return it. This will |
| + * also reset the builder, so it can be used to build another looper. |
| + */ |
| SkLayerDrawLooper* detachLooper(); |
| private: |
| - Rec* fRecs; |
| - Rec* fTopRec; |
| - int fCount; |
| + std::vector<Rec> fRecs; |
| }; |
| }; |