aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkTextBlob.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/SkTextBlob.cpp')
-rw-r--r--src/core/SkTextBlob.cpp21
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);