cleanup previous array of paints
git-svn-id: http://skia.googlecode.com/svn/trunk@1310 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/pipe/SkGPipeRead.cpp b/src/pipe/SkGPipeRead.cpp
index ee20d80..5e6c632 100644
--- a/src/pipe/SkGPipeRead.cpp
+++ b/src/pipe/SkGPipeRead.cpp
@@ -72,13 +72,9 @@
void setReader(SkFlattenableReadBuffer* reader) { fReader = reader; }
- const SkPaint& getPaint(uint32_t drawOp32) const;
+ const SkPaint& paint() const { return fPaint; }
+ SkPaint* editPaint() { return &fPaint; }
- // Extracts index from DrawOp_unpackData().
- // Returns the specified paint from our list, or creates a new paint if
- // index == count. If index > count, return NULL
- SkPaint* editPaint(uint32_t drawOp32);
-
SkFlattenable* getFlat(unsigned index) const {
if (0 == index) {
return NULL;
@@ -103,20 +99,11 @@
}
SkFlattenableReadBuffer* fReader;
- SkTDArray<SkFlattenable*> fFlatArray;
private:
-
- SkTDArray<SkPaint*> fPaints;
-
- SkRefCntTDArray<SkColorFilter*> fColorFilters;
- SkRefCntTDArray<SkDrawLooper*> fDrawLoopers;
- SkRefCntTDArray<SkMaskFilter*> fMaskFilters;
- SkRefCntTDArray<SkPathEffect*> fPathEffects;
- SkRefCntTDArray<SkRasterizer*> fRasterizers;
- SkRefCntTDArray<SkShader*> fShaders;
- SkRefCntTDArray<SkTypeface*> fTypefaces;
- SkRefCntTDArray<SkXfermode*> fXfermodes;
+ SkPaint fPaint;
+ SkTDArray<SkFlattenable*> fFlatArray;
+ SkTDArray<SkTypeface*> fTypefaces;
};
///////////////////////////////////////////////////////////////////////////////
@@ -134,29 +121,6 @@
return reinterpret_cast<const T*>(reader->skip(size));
}
-const SkPaint& SkGPipeState::getPaint(uint32_t op32) const {
- unsigned index = DrawOp_unpackData(op32);
- if (index >= fPaints.count()) {
- SkASSERT(!"paint index out of range");
- index = 0; // we always have at least 1 paint
- }
- return *fPaints[index];
-}
-
-SkPaint* SkGPipeState::editPaint(uint32_t op32) {
- unsigned index = DrawOp_unpackData(op32);
-
- if (index > fPaints.count()) {
- SkASSERT(!"paint index out of range");
- return NULL;
- }
-
- if (index == fPaints.count()) {
- *fPaints.append() = SkNEW(SkPaint);
- }
- return fPaints[index];
-}
-
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
@@ -236,7 +200,7 @@
}
const SkPaint* paint = NULL;
if (flags & kSaveLayer_HasPaint_DrawOpFlag) {
- paint = &state->getPaint(reader->readU32());
+ paint = &state->paint();
}
canvas->saveLayer(bounds, paint, saveFlags);
}
@@ -259,7 +223,7 @@
static void drawPaint_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32,
SkGPipeState* state) {
- canvas->drawPaint(state->getPaint(op32));
+ canvas->drawPaint(state->paint());
}
static void drawPoints_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32,
@@ -267,19 +231,19 @@
SkCanvas::PointMode mode = (SkCanvas::PointMode)DrawOp_unpackFlags(op32);
size_t count = reader->readU32();
const SkPoint* pts = skip<SkPoint>(reader, count);
- canvas->drawPoints(mode, count, pts, state->getPaint(op32));
+ canvas->drawPoints(mode, count, pts, state->paint());
}
static void drawRect_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32,
SkGPipeState* state) {
- canvas->drawRect(*skip<SkRect>(reader), state->getPaint(op32));
+ canvas->drawRect(*skip<SkRect>(reader), state->paint());
}
static void drawPath_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32,
SkGPipeState* state) {
SkPath path;
path.unflatten(*reader);
- canvas->drawPath(path, state->getPaint(op32));
+ canvas->drawPath(path, state->paint());
}
static void drawVertices_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32,
@@ -311,7 +275,7 @@
}
canvas->drawVertices(mode, vertexCount, verts, texs, colors, xfer,
- indices, indexCount, state->getPaint(op32));
+ indices, indexCount, state->paint());
}
///////////////////////////////////////////////////////////////////////////////
@@ -321,7 +285,7 @@
size_t len = reader->readU32();
const void* text = reader->skip(SkAlign4(len));
const SkScalar* xy = skip<SkScalar>(reader, 2);
- canvas->drawText(text, len, xy[0], xy[1], state->getPaint(op32));
+ canvas->drawText(text, len, xy[0], xy[1], state->paint());
}
static void drawPosText_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32,
@@ -330,7 +294,7 @@
const void* text = reader->skip(SkAlign4(len));
size_t posCount = reader->readU32(); // compute by our writer
const SkPoint* pos = skip<SkPoint>(reader, posCount);
- canvas->drawPosText(text, len, pos, state->getPaint(op32));
+ canvas->drawPosText(text, len, pos, state->paint());
}
static void drawPosTextH_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32,
@@ -340,7 +304,7 @@
size_t posCount = reader->readU32(); // compute by our writer
const SkScalar* xpos = skip<SkScalar>(reader, posCount);
SkScalar constY = reader->readScalar();
- canvas->drawPosTextH(text, len, xpos, constY, state->getPaint(op32));
+ canvas->drawPosTextH(text, len, xpos, constY, state->paint());
}
static void drawTextOnPath_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32,
@@ -358,7 +322,7 @@
matrix = &matrixStorage;
}
- canvas->drawTextOnPath(text, len, path, matrix, state->getPaint(op32));
+ canvas->drawTextOnPath(text, len, path, matrix, state->paint());
}
///////////////////////////////////////////////////////////////////////////////
@@ -412,14 +376,12 @@
SkGPipeState* state) {
size_t offset = reader->offset();
size_t stop = offset + PaintOp_unpackData(op32);
- SkPaint* p = state->editPaint(0);
- int done;
+ SkPaint* p = state->editPaint();
do {
uint32_t p32 = reader->readU32();
unsigned op = PaintOp_unpackOp(p32);
unsigned data = PaintOp_unpackData(p32);
- done = PaintOp_unpackFlags(p32) & kLastOp_PaintOpFlag;
// SkDebugf(" read %08X op=%d flags=%d data=%d\n", p32, op, done, data);
@@ -452,8 +414,7 @@
default: SkASSERT(!"bad paintop"); return;
}
SkASSERT(reader->offset() <= stop);
- done = (reader->offset() >= stop);
- } while (!done);
+ } while (reader->offset() < stop);
}
///////////////////////////////////////////////////////////////////////////////
@@ -521,14 +482,11 @@
///////////////////////////////////////////////////////////////////////////////
-SkGPipeState::SkGPipeState() {
- // start out with one paint in default state
- *fPaints.append() = SkNEW(SkPaint);
-}
+SkGPipeState::SkGPipeState() {}
SkGPipeState::~SkGPipeState() {
+ fTypefaces.unrefAll();
fFlatArray.unrefAll();
- fPaints.deleteAll();
}
///////////////////////////////////////////////////////////////////////////////