| Index: src/core/SkPicturePlayback.cpp
|
| diff --git a/src/core/SkPicturePlayback.cpp b/src/core/SkPicturePlayback.cpp
|
| index 6197d88d6655e3d46ea07aee6a0852f8bda6fd97..3655018cdb5a719d693f5f55d12d3d4cc23e3844 100644
|
| --- a/src/core/SkPicturePlayback.cpp
|
| +++ b/src/core/SkPicturePlayback.cpp
|
| @@ -12,6 +12,7 @@
|
| #include "SkPictureRecord.h"
|
| #include "SkPictureStateTree.h"
|
| #include "SkReader32.h"
|
| +#include "SkTextBlob.h"
|
| #include "SkTDArray.h"
|
| #include "SkTypes.h"
|
|
|
| @@ -442,6 +443,41 @@ void SkPicturePlayback::handleOp(SkReader32* reader,
|
| reader->readMatrix(&matrix);
|
| canvas->drawTextOnPath(text.text(), text.length(), path, &matrix, paint);
|
| } break;
|
| + case DRAW_TEXT_BLOB: {
|
| + const SkPaint& paint = *fPictureData->getPaint(reader);
|
| + uint32_t chunkCount = reader->readInt();
|
| + const SkPoint& offset = reader->skipT<SkPoint>();
|
| +
|
| + SkTextBlobBuilder blobBuilder;
|
| + for (unsigned i = 0; i < chunkCount; ++i) {
|
| + uint32_t glyphCount = reader->readInt();
|
| + const SkPaint& glyphPaint = *fPictureData->getPaint(reader);
|
| + unsigned scalarsPerPos = reader->readInt();
|
| + const SkRect* boundsPtr = get_rect_ptr(reader);
|
| + const uint16_t* glyphs = (uint16_t*)reader->skip(
|
| + SkAlign4(glyphCount * sizeof(uint16_t)));
|
| + const SkTextChunk* chunk;
|
| + if (scalarsPerPos > 0) {
|
| + const SkScalar* pos = (const SkScalar*)reader->skip(
|
| + SkAlign4(glyphCount * sizeof(SkScalar) * scalarsPerPos));
|
| + if (1 == scalarsPerPos) {
|
| + chunk = SkTextChunk::Create(glyphs, glyphCount, pos, glyphPaint, boundsPtr);
|
| + } else {
|
| + SkASSERT(2 == scalarsPerPos);
|
| + chunk = SkTextChunk::Create(glyphs, glyphCount, (const SkPoint*)pos,
|
| + glyphPaint, boundsPtr);
|
| + }
|
| +
|
| + } else {
|
| + chunk = SkTextChunk::Create(glyphs, glyphCount, glyphPaint, boundsPtr);
|
| + }
|
| +
|
| + blobBuilder.addChunk(chunk);
|
| + }
|
| +
|
| + SkAutoTUnref<const SkTextBlob> blob(blobBuilder.build());
|
| + canvas->drawTextBlob(blob, offset, paint);
|
| + } break;
|
| case DRAW_VERTICES: {
|
| SkAutoTUnref<SkXfermode> xfer;
|
| const SkPaint& paint = *fPictureData->getPaint(reader);
|
|
|