diff options
Diffstat (limited to 'src/core/SkTextBlob.cpp')
-rw-r--r-- | src/core/SkTextBlob.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/core/SkTextBlob.cpp b/src/core/SkTextBlob.cpp index dd2f7bd1dd..fec7c527a2 100644 --- a/src/core/SkTextBlob.cpp +++ b/src/core/SkTextBlob.cpp @@ -7,6 +7,7 @@ #include "SkTextBlobRunIterator.h" +#include "SkGlyphRun.h" #include "SkPaintPriv.h" #include "SkReadBuffer.h" #include "SkSafeMath.h" @@ -886,6 +887,26 @@ sk_sp<SkTextBlob> SkTextBlobPriv::MakeFromBuffer(SkReadBuffer& reader) { return blobBuilder.make(); } +sk_sp<SkTextBlob> SkTextBlob::MakeAsDrawText( + const void* text, size_t byteLength, const SkPaint& paint) { + SkGlyphRunBuilder runBuilder; + + runBuilder.drawText(paint, text, byteLength, SkPoint::Make(0, 0)); + + auto list = runBuilder.useGlyphRunList(); + SkTextBlobBuilder blobBuilder; + if (!list->empty()) { + auto run = (*list)[0]; + SkPaint blobPaint(paint); + blobPaint.setTextEncoding(SkPaint::kGlyphID_TextEncoding); + + auto runData = blobBuilder.allocRunPos(blobPaint, run.runSize()); + run.filloutGlyphsAndPositions(runData.glyphs, (SkPoint *)runData.pos); + } + + return blobBuilder.make(); +} + sk_sp<SkData> SkTextBlob::serialize(const SkSerialProcs& procs) const { SkBinaryWriteBuffer buffer; buffer.setSerialProcs(procs); |