| Index: src/core/SkPicturePlayback.cpp
|
| diff --git a/src/core/SkPicturePlayback.cpp b/src/core/SkPicturePlayback.cpp
|
| index beb745ff1a6b3c38c482d5fd9ee6851fda45f8b2..36d385c0954a1068eda4c6d66fa0cb051dbe5997 100644
|
| --- a/src/core/SkPicturePlayback.cpp
|
| +++ b/src/core/SkPicturePlayback.cpp
|
| @@ -267,11 +267,13 @@ void SkPicturePlayback::handleOp(SkReadBuffer* reader,
|
| canvas->drawDrawable(drawable, &matrix);
|
| } break;
|
| case DRAW_DRRECT: {
|
| - const SkPaint& paint = *fPictureData->getPaint(reader);
|
| + const SkPaint* paint = fPictureData->getPaint(reader);
|
| SkRRect outer, inner;
|
| reader->readRRect(&outer);
|
| reader->readRRect(&inner);
|
| - canvas->drawDRRect(outer, inner, paint);
|
| + if (paint) {
|
| + canvas->drawDRRect(outer, inner, *paint);
|
| + }
|
| } break;
|
| case BEGIN_COMMENT_GROUP: {
|
| SkString tmp;
|
| @@ -322,16 +324,21 @@ void SkPicturePlayback::handleOp(SkReadBuffer* reader,
|
| canvas->legacy_drawImageRect(image, src, dst, paint, constraint);
|
| } break;
|
| case DRAW_OVAL: {
|
| - const SkPaint& paint = *fPictureData->getPaint(reader);
|
| + const SkPaint* paint = fPictureData->getPaint(reader);
|
| SkRect rect;
|
| reader->readRect(&rect);
|
| - canvas->drawOval(rect, paint);
|
| + if (paint) {
|
| + canvas->drawOval(rect, *paint);
|
| + }
|
| + } break;
|
| + case DRAW_PAINT: {
|
| + const SkPaint* paint = fPictureData->getPaint(reader);
|
| + if (paint) {
|
| + canvas->drawPaint(*paint);
|
| + }
|
| } break;
|
| - case DRAW_PAINT:
|
| - canvas->drawPaint(*fPictureData->getPaint(reader));
|
| - break;
|
| case DRAW_PATCH: {
|
| - const SkPaint& paint = *fPictureData->getPaint(reader);
|
| + const SkPaint* paint = fPictureData->getPaint(reader);
|
|
|
| const SkPoint* cubics = (const SkPoint*)reader->skip(SkPatchUtils::kNumCtrlPts *
|
| sizeof(SkPoint));
|
| @@ -353,11 +360,15 @@ void SkPicturePlayback::handleOp(SkReadBuffer* reader,
|
| }
|
| xfer = SkXfermode::Make((SkXfermode::Mode)mode);
|
| }
|
| - canvas->drawPatch(cubics, colors, texCoords, std::move(xfer), paint);
|
| + if (paint) {
|
| + canvas->drawPatch(cubics, colors, texCoords, std::move(xfer), *paint);
|
| + }
|
| } break;
|
| case DRAW_PATH: {
|
| - const SkPaint& paint = *fPictureData->getPaint(reader);
|
| - canvas->drawPath(fPictureData->getPath(reader), paint);
|
| + const SkPaint* paint = fPictureData->getPaint(reader);
|
| + if (paint) {
|
| + canvas->drawPath(fPictureData->getPath(reader), *paint);
|
| + }
|
| } break;
|
| case DRAW_PICTURE:
|
| canvas->drawPicture(fPictureData->getPicture(reader));
|
| @@ -370,43 +381,49 @@ void SkPicturePlayback::handleOp(SkReadBuffer* reader,
|
| canvas->drawPicture(pic, &matrix, paint);
|
| } break;
|
| case DRAW_POINTS: {
|
| - const SkPaint& paint = *fPictureData->getPaint(reader);
|
| + const SkPaint* paint = fPictureData->getPaint(reader);
|
| SkCanvas::PointMode mode = (SkCanvas::PointMode)reader->readInt();
|
| size_t count = reader->readInt();
|
| const SkPoint* pts = (const SkPoint*)reader->skip(sizeof(SkPoint)* count);
|
| - canvas->drawPoints(mode, count, pts, paint);
|
| + if (paint) {
|
| + canvas->drawPoints(mode, count, pts, *paint);
|
| + }
|
| } break;
|
| case DRAW_POS_TEXT: {
|
| - const SkPaint& paint = *fPictureData->getPaint(reader);
|
| + const SkPaint* paint = fPictureData->getPaint(reader);
|
| TextContainer text;
|
| get_text(reader, &text);
|
| size_t points = reader->readInt();
|
| const SkPoint* pos = (const SkPoint*)reader->skip(points * sizeof(SkPoint));
|
| - canvas->drawPosText(text.text(), text.length(), pos, paint);
|
| + if (paint) {
|
| + canvas->drawPosText(text.text(), text.length(), pos, *paint);
|
| + }
|
| } break;
|
| case DRAW_POS_TEXT_TOP_BOTTOM: {
|
| - const SkPaint& paint = *fPictureData->getPaint(reader);
|
| + const SkPaint* paint = fPictureData->getPaint(reader);
|
| TextContainer text;
|
| get_text(reader, &text);
|
| size_t points = reader->readInt();
|
| const SkPoint* pos = (const SkPoint*)reader->skip(points * sizeof(SkPoint));
|
| const SkScalar top = reader->readScalar();
|
| const SkScalar bottom = reader->readScalar();
|
| - if (!canvas->quickRejectY(top, bottom)) {
|
| - canvas->drawPosText(text.text(), text.length(), pos, paint);
|
| + if (!canvas->quickRejectY(top, bottom) && paint) {
|
| + canvas->drawPosText(text.text(), text.length(), pos, *paint);
|
| }
|
| } break;
|
| case DRAW_POS_TEXT_H: {
|
| - const SkPaint& paint = *fPictureData->getPaint(reader);
|
| + const SkPaint* paint = fPictureData->getPaint(reader);
|
| TextContainer text;
|
| get_text(reader, &text);
|
| size_t xCount = reader->readInt();
|
| const SkScalar constY = reader->readScalar();
|
| const SkScalar* xpos = (const SkScalar*)reader->skip(xCount * sizeof(SkScalar));
|
| - canvas->drawPosTextH(text.text(), text.length(), xpos, constY, paint);
|
| + if (paint) {
|
| + canvas->drawPosTextH(text.text(), text.length(), xpos, constY, *paint);
|
| + }
|
| } break;
|
| case DRAW_POS_TEXT_H_TOP_BOTTOM: {
|
| - const SkPaint& paint = *fPictureData->getPaint(reader);
|
| + const SkPaint* paint = fPictureData->getPaint(reader);
|
| TextContainer text;
|
| get_text(reader, &text);
|
| size_t xCount = reader->readInt();
|
| @@ -414,21 +431,25 @@ void SkPicturePlayback::handleOp(SkReadBuffer* reader,
|
| const SkScalar top = *xpos++;
|
| const SkScalar bottom = *xpos++;
|
| const SkScalar constY = *xpos++;
|
| - if (!canvas->quickRejectY(top, bottom)) {
|
| - canvas->drawPosTextH(text.text(), text.length(), xpos, constY, paint);
|
| + if (!canvas->quickRejectY(top, bottom) && paint) {
|
| + canvas->drawPosTextH(text.text(), text.length(), xpos, constY, *paint);
|
| }
|
| } break;
|
| case DRAW_RECT: {
|
| - const SkPaint& paint = *fPictureData->getPaint(reader);
|
| + const SkPaint* paint = fPictureData->getPaint(reader);
|
| SkRect rect;
|
| reader->readRect(&rect);
|
| - canvas->drawRect(rect, paint);
|
| + if (paint) {
|
| + canvas->drawRect(rect, *paint);
|
| + }
|
| } break;
|
| case DRAW_RRECT: {
|
| - const SkPaint& paint = *fPictureData->getPaint(reader);
|
| + const SkPaint* paint = fPictureData->getPaint(reader);
|
| SkRRect rrect;
|
| reader->readRRect(&rrect);
|
| - canvas->drawRRect(rrect, paint);
|
| + if (paint) {
|
| + canvas->drawRRect(rrect, *paint);
|
| + }
|
| } break;
|
| case DRAW_SPRITE: {
|
| /* const SkPaint* paint = */ fPictureData->getPaint(reader);
|
| @@ -438,22 +459,26 @@ void SkPicturePlayback::handleOp(SkReadBuffer* reader,
|
| // drawSprite removed dec-2015
|
| } break;
|
| case DRAW_TEXT: {
|
| - const SkPaint& paint = *fPictureData->getPaint(reader);
|
| + const SkPaint* paint = fPictureData->getPaint(reader);
|
| TextContainer text;
|
| get_text(reader, &text);
|
| SkScalar x = reader->readScalar();
|
| SkScalar y = reader->readScalar();
|
| - canvas->drawText(text.text(), text.length(), x, y, paint);
|
| + if (paint) {
|
| + canvas->drawText(text.text(), text.length(), x, y, *paint);
|
| + }
|
| } break;
|
| case DRAW_TEXT_BLOB: {
|
| - const SkPaint& paint = *fPictureData->getPaint(reader);
|
| + const SkPaint* paint = fPictureData->getPaint(reader);
|
| const SkTextBlob* blob = fPictureData->getTextBlob(reader);
|
| SkScalar x = reader->readScalar();
|
| SkScalar y = reader->readScalar();
|
| - canvas->drawTextBlob(blob, x, y, paint);
|
| + if (paint) {
|
| + canvas->drawTextBlob(blob, x, y, *paint);
|
| + }
|
| } break;
|
| case DRAW_TEXT_TOP_BOTTOM: {
|
| - const SkPaint& paint = *fPictureData->getPaint(reader);
|
| + const SkPaint* paint = fPictureData->getPaint(reader);
|
| TextContainer text;
|
| get_text(reader, &text);
|
| const SkScalar* ptr = (const SkScalar*)reader->skip(4 * sizeof(SkScalar));
|
| @@ -461,22 +486,24 @@ void SkPicturePlayback::handleOp(SkReadBuffer* reader,
|
| // ptr[1] == y
|
| // ptr[2] == top
|
| // ptr[3] == bottom
|
| - if (!canvas->quickRejectY(ptr[2], ptr[3])) {
|
| - canvas->drawText(text.text(), text.length(), ptr[0], ptr[1], paint);
|
| + if (!canvas->quickRejectY(ptr[2], ptr[3]) && paint) {
|
| + canvas->drawText(text.text(), text.length(), ptr[0], ptr[1], *paint);
|
| }
|
| } break;
|
| case DRAW_TEXT_ON_PATH: {
|
| - const SkPaint& paint = *fPictureData->getPaint(reader);
|
| + const SkPaint* paint = fPictureData->getPaint(reader);
|
| TextContainer text;
|
| get_text(reader, &text);
|
| const SkPath& path = fPictureData->getPath(reader);
|
| SkMatrix matrix;
|
| reader->readMatrix(&matrix);
|
| - canvas->drawTextOnPath(text.text(), text.length(), path, &matrix, paint);
|
| + if (paint) {
|
| + canvas->drawTextOnPath(text.text(), text.length(), path, &matrix, *paint);
|
| + }
|
| } break;
|
| case DRAW_VERTICES: {
|
| sk_sp<SkXfermode> xfer;
|
| - const SkPaint& paint = *fPictureData->getPaint(reader);
|
| + const SkPaint* paint = fPictureData->getPaint(reader);
|
| DrawVertexFlags flags = (DrawVertexFlags)reader->readInt();
|
| SkCanvas::VertexMode vmode = (SkCanvas::VertexMode)reader->readInt();
|
| int vCount = reader->readInt();
|
| @@ -502,7 +529,10 @@ void SkPicturePlayback::handleOp(SkReadBuffer* reader,
|
| }
|
| xfer = SkXfermode::Make((SkXfermode::Mode)mode);
|
| }
|
| - canvas->drawVertices(vmode, vCount, verts, texs, colors, xfer, indices, iCount, paint);
|
| + if (paint) {
|
| + canvas->drawVertices(vmode, vCount, verts, texs, colors,
|
| + xfer, indices, iCount, *paint);
|
| + }
|
| } break;
|
| case RESTORE:
|
| canvas->restore();
|
|
|