| 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 {
|
|
|