Index: samplecode/SampleText.cpp |
diff --git a/samplecode/SampleText.cpp b/samplecode/SampleText.cpp |
index 17456b2ee988e6cbfca5d02d6caa1fba434db5a3..aaef930018b5f1d5e3d6e80f2f74cbb8008cc466 100644 |
--- a/samplecode/SampleText.cpp |
+++ b/samplecode/SampleText.cpp |
@@ -20,6 +20,7 @@ |
#include "SkUtils.h" |
#include "SkColorPriv.h" |
#include "SkColorFilter.h" |
+#include "SkTextBlob.h" |
#include "SkTime.h" |
#include "SkTypeface.h" |
#include "SkXfermode.h" |
@@ -76,14 +77,14 @@ static const struct { |
static void DrawTheText(SkCanvas* canvas, const char text[], size_t length, SkScalar x, SkScalar y, |
const SkPaint& paint, SkScalar clickX) { |
SkPaint p(paint); |
+ SkPoint pts[1000]; |
+ SkASSERT(length <= SK_ARRAY_COUNT(pts)); |
#if 0 |
canvas->drawText(text, length, x, y, paint); |
#else |
{ |
- SkPoint pts[1000]; |
SkScalar xpos = x; |
- SkASSERT(length <= SK_ARRAY_COUNT(pts)); |
for (size_t i = 0; i < length; i++) { |
pts[i].set(xpos, y), xpos += paint.getTextSize(); |
} |
@@ -103,6 +104,39 @@ static void DrawTheText(SkCanvas* canvas, const char text[], size_t length, SkSc |
canvas->drawText(text, length, x, y, p); |
} |
#endif |
+ |
+ |
+ uint16_t glyphs[1000]; |
+ SkASSERT(length <= SK_ARRAY_COUNT(glyphs)); |
+ int glyphCount = paint.textToGlyphs(text, length, glyphs); |
+ SkPaint glyphPaint = paint; |
+ glyphPaint.setTextEncoding(SkPaint::kGlyphID_TextEncoding); |
+ |
+ SkTextBlobBuilder blobBuilder; |
+ SkTextBlobBuilder::RunBuilder<SkTextBlob::kFull_Positioning> posRunBuilder = |
+ blobBuilder.startRun<SkTextBlob::kFull_Positioning>(glyphPaint, glyphCount); |
+ for (int i = 0; i < glyphCount; ++i) { |
+ posRunBuilder.addGlyph(glyphs[i], pts[i].x(), pts[i].y()); |
+ } |
+ SkAutoTUnref<const SkTextBlob> posBlob(blobBuilder.build()); |
+ canvas->drawTextBlob(posBlob, 0, 400, glyphPaint); |
+ |
+ glyphPaint.setSubpixelText(true); |
+ SkTextBlobBuilder::RunBuilder<SkTextBlob::kDefault_Positioning> runBuilder = |
+ blobBuilder.startRun<SkTextBlob::kDefault_Positioning>(glyphPaint, glyphCount); |
+ runBuilder.addGlyphs(glyphs, glyphCount); |
+ SkAutoTUnref<const SkTextBlob> blob(blobBuilder.build()); |
+ canvas->drawTextBlob(blob, 180, 400 + y, glyphPaint); |
+ |
+ glyphPaint.setSubpixelText(false); |
+ glyphPaint.setLinearText(true); |
+ SkTextBlobBuilder::RunBuilder<SkTextBlob::kHorizontal_Positioning> hPosRunBuilder = |
+ blobBuilder.startRun<SkTextBlob::kHorizontal_Positioning>(glyphPaint, glyphCount); |
+ for (int i = 0; i < glyphCount; ++i) { |
+ hPosRunBuilder.addGlyph(glyphs[i], pts[i].x()); |
+ } |
+ SkAutoTUnref<const SkTextBlob> hPosBlob(blobBuilder.build()); |
+ canvas->drawTextBlob(hPosBlob, 360, 400 + y, glyphPaint); |
} |
class TextSpeedView : public SampleView { |