Index: samplecode/SampleText.cpp |
diff --git a/samplecode/SampleText.cpp b/samplecode/SampleText.cpp |
index 17456b2ee988e6cbfca5d02d6caa1fba434db5a3..c028b32bfbbea3d427829803efe3747f83743669 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,16 +77,18 @@ 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]; |
+ SkScalar xPos[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(); |
+ xPos[i] = pts[i].x(); |
} |
canvas->drawPosText(text, length, pts, paint); |
} |
@@ -103,6 +106,35 @@ 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::RunBuffer posRun = blobBuilder.allocRun(glyphPaint, glyphCount); |
+ memcpy(posRun.glyphs, glyphs, glyphCount * sizeof(uint16_t)); |
+ memcpy(posRun.pos, pts, glyphCount * sizeof(SkScalar) * 2); |
+ SkAutoTUnref<const SkTextBlob> posBlob(blobBuilder.build()); |
+ canvas->drawTextBlob(posBlob, 0, 400, glyphPaint); |
+ |
+ glyphPaint.setSubpixelText(true); |
+ uint16_t* defaultRun = blobBuilder.allocRun(glyphPaint, glyphCount, |
+ SkPoint::Make(0, 0)); |
+ memcpy(defaultRun, glyphs, glyphCount * sizeof(uint16_t)); |
+ SkAutoTUnref<const SkTextBlob> blob(blobBuilder.build()); |
+ canvas->drawTextBlob(blob, 180, 400 + y, glyphPaint); |
+ |
+ glyphPaint.setSubpixelText(false); |
+ glyphPaint.setLinearText(true); |
+ SkTextBlobBuilder::RunBuffer hPosRun = blobBuilder.allocRun(glyphPaint, glyphCount, 0, NULL); |
+ memcpy(hPosRun.glyphs, glyphs, glyphCount * sizeof(uint16_t)); |
+ memcpy(hPosRun.pos, xPos, glyphCount * sizeof(SkScalar)); |
+ SkAutoTUnref<const SkTextBlob> hPosBlob(blobBuilder.build()); |
+ canvas->drawTextBlob(hPosBlob, 360, 400 + y, glyphPaint); |
} |
class TextSpeedView : public SampleView { |