| Index: src/core/SkCanvas.cpp
|
| diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
|
| index 240dc9ccc52c87e7fbba3e515bc40c369a7c6975..87ecf3b6632784264b9db8e74da53f0cfceecf10 100644
|
| --- a/src/core/SkCanvas.cpp
|
| +++ b/src/core/SkCanvas.cpp
|
| @@ -22,6 +22,7 @@
|
| #include "SkSmallAllocator.h"
|
| #include "SkSurface_Base.h"
|
| #include "SkTemplates.h"
|
| +#include "SkTextBlob.h"
|
| #include "SkTextFormatParams.h"
|
| #include "SkTLazy.h"
|
| #include "SkUtils.h"
|
| @@ -2221,6 +2222,30 @@ void SkCanvas::onDrawTextOnPath(const void* text, size_t byteLength, const SkPat
|
| LOOPER_END
|
| }
|
|
|
| +void SkCanvas::onDrawTextBlob(const SkTextBlob* blob, const SkPoint& offset,
|
| + const SkPaint& paint) {
|
| + SkASSERT(blob);
|
| +
|
| + // FIXME: should we send the offset to the device?
|
| + if (!offset.isZero()) {
|
| + translate(offset.x(), offset.y());
|
| + }
|
| +
|
| + LOOPER_BEGIN(paint, SkDrawFilter::kText_Type, NULL)
|
| +
|
| + while (iter.next()) {
|
| + SkDeviceFilteredPaint dfp(iter.fDevice, looper.paint());
|
| + iter.fDevice->drawTextBlob(iter, blob, dfp.paint());
|
| + // DrawTextDecorations?
|
| + }
|
| +
|
| + LOOPER_END
|
| +
|
| + if (!offset.isZero()) {
|
| + translate(-offset.x(), -offset.y());
|
| + }
|
| +}
|
| +
|
| // These will become non-virtual, so they always call the (virtual) onDraw... method
|
| void SkCanvas::drawText(const void* text, size_t byteLength, SkScalar x, SkScalar y,
|
| const SkPaint& paint) {
|
| @@ -2239,6 +2264,13 @@ void SkCanvas::drawTextOnPath(const void* text, size_t byteLength, const SkPath&
|
| this->onDrawTextOnPath(text, byteLength, path, matrix, paint);
|
| }
|
|
|
| +void SkCanvas::drawTextBlob(const SkTextBlob* blob, const SkPoint& offset,
|
| + const SkPaint& paint) {
|
| + if (NULL != blob) {
|
| + this->onDrawTextBlob(blob, offset, paint);
|
| + }
|
| +}
|
| +
|
| void SkCanvas::drawVertices(VertexMode vmode, int vertexCount,
|
| const SkPoint verts[], const SkPoint texs[],
|
| const SkColor colors[], SkXfermode* xmode,
|
|
|