diff options
author | Herb Derby <herb@google.com> | 2018-07-27 16:23:27 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-07-30 14:06:55 +0000 |
commit | 13449ce2439044c06847c5f9487352d98931d11d (patch) | |
tree | f60163a7ba6794677aa9bd995a9b2b0cf615960d | |
parent | 160e4dcc4ec8c17578b3800c8683981834b903cb (diff) |
Make SkInternalAtlasTextTarget use glyph runs
Change-Id: I14f296c9d394288d2c28ab7f09b17c1a4d1ef49d
Reviewed-on: https://skia-review.googlesource.com/144125
Commit-Queue: Brian Salomon <bsalomon@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Auto-Submit: Herb Derby <herb@google.com>
-rw-r--r-- | src/atlastext/SkAtlasTextTarget.cpp | 12 | ||||
-rw-r--r-- | src/core/SkGlyphRun.cpp | 10 | ||||
-rw-r--r-- | src/core/SkGlyphRun.h | 2 |
3 files changed, 20 insertions, 4 deletions
diff --git a/src/atlastext/SkAtlasTextTarget.cpp b/src/atlastext/SkAtlasTextTarget.cpp index c70e47995a..4d7d65d746 100644 --- a/src/atlastext/SkAtlasTextTarget.cpp +++ b/src/atlastext/SkAtlasTextTarget.cpp @@ -14,6 +14,7 @@ #include "SkAtlasTextContext.h" #include "SkAtlasTextFont.h" #include "SkAtlasTextRenderer.h" +#include "SkGlyphRun.h" #include "SkGr.h" #include "SkInternalAtlasTextContext.h" #include "ops/GrAtlasTextOp.h" @@ -152,10 +153,13 @@ void SkInternalAtlasTextTarget::drawText(const SkGlyphID glyphs[], const SkPoint auto* grContext = this->context()->internal().grContext(); auto bounds = SkIRect::MakeWH(fWidth, fHeight); auto atlasTextContext = grContext->contextPriv().drawingManager()->getTextContext(); - size_t byteLength = sizeof(SkGlyphID) * glyphCnt; - const SkScalar* pos = &positions->fX; - atlasTextContext->drawPosText(grContext, this, GrNoClip(), paint, this->ctm(), props, - (const char*)glyphs, byteLength, pos, 2, {0, 0}, bounds); + SkGlyphRunBuilder builder; + builder.drawGlyphPos(paint, SkSpan<const SkGlyphID>{glyphs, SkTo<size_t>(glyphCnt)}, positions); + auto glyphRunList = builder.useGlyphRunList(); + if (!glyphRunList.empty()) { + atlasTextContext->drawGlyphRunList(grContext, this, GrNoClip(), this->ctm(), props, + glyphRunList, bounds); + } } void SkInternalAtlasTextTarget::addDrawOp(const GrClip& clip, std::unique_ptr<GrAtlasTextOp> op) { diff --git a/src/core/SkGlyphRun.cpp b/src/core/SkGlyphRun.cpp index 006a4ba067..f53f90986e 100644 --- a/src/core/SkGlyphRun.cpp +++ b/src/core/SkGlyphRun.cpp @@ -534,6 +534,16 @@ void SkGlyphRunBuilder::drawTextBlob(const SkPaint& paint, const SkTextBlob& blo this->makeGlyphRunList(paint, &blob, origin); } +void SkGlyphRunBuilder::drawGlyphPos( + const SkPaint& paint, SkSpan<const SkGlyphID> glyphIDs, const SkPoint* pos) { + if (!glyphIDs.empty()) { + this->initialize(glyphIDs.size()); + this->simplifyDrawPosText(paint, glyphIDs, pos, + fUniqueGlyphIDIndices, fUniqueGlyphIDs); + this->makeGlyphRunList(paint, nullptr, SkPoint::Make(0, 0)); + } +} + const SkGlyphRunList& SkGlyphRunBuilder::useGlyphRunList() { return fGlyphRunList; } diff --git a/src/core/SkGlyphRun.h b/src/core/SkGlyphRun.h index 003c13c91c..26590c1251 100644 --- a/src/core/SkGlyphRun.h +++ b/src/core/SkGlyphRun.h @@ -240,6 +240,8 @@ public: void drawPosText( const SkPaint& paint, const void* bytes, size_t byteLength, const SkPoint* pos); void drawTextBlob(const SkPaint& paint, const SkTextBlob& blob, SkPoint origin); + void drawGlyphPos( + const SkPaint& paint, SkSpan<const SkGlyphID> glyphIDs, const SkPoint* pos); const SkGlyphRunList& useGlyphRunList(); |