diff options
author | Hal Canary <halcanary@google.com> | 2018-06-06 13:29:51 +0000 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-06-06 13:29:57 +0000 |
commit | 74b390d6b136a60f1df15ac5ecd19bd8ad5a394b (patch) | |
tree | afba5f9d8d8d802e9b6873c5f4c7948a94f76762 /src/core/SkDraw.cpp | |
parent | 102c8cf26e2886ba783a2b54827e1f5d1cf0a774 (diff) |
Revert "Have draw(Text|PosText|PosTextH) use a single entry on the device"
This reverts commit 4225b3220ef4bf50f0d9403f812ea94d50c4ee59.
Reason for revert: made valgrind unhappy.
Original change's description:
> Have draw(Text|PosText|PosTextH) use a single entry on the device
>
> Handle the positioning of drawText at the canvas layer. Simplify
> the code by removing similar implementations.
>
> Change-Id: I8b711783435072f560e29fca1dd934fa2e345ed2
> Reviewed-on: https://skia-review.googlesource.com/127131
> Reviewed-by: Ben Wagner <bungeman@google.com>
> Commit-Queue: Herb Derby <herb@google.com>
TBR=jvanverth@google.com,bungeman@google.com,herb@google.com
Change-Id: I65c9d30ae6ecb1f87e8660e56d8f8ce5daab7551
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://skia-review.googlesource.com/132403
Reviewed-by: Hal Canary <halcanary@google.com>
Commit-Queue: Hal Canary <halcanary@google.com>
Diffstat (limited to 'src/core/SkDraw.cpp')
-rw-r--r-- | src/core/SkDraw.cpp | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/core/SkDraw.cpp b/src/core/SkDraw.cpp index e975ea2a4b..b7150f85f8 100644 --- a/src/core/SkDraw.cpp +++ b/src/core/SkDraw.cpp @@ -1537,6 +1537,37 @@ SkScalerContextFlags SkDraw::scalerContextFlags() const { return flags; } +void SkDraw::drawText(const char text[], size_t byteLength, SkScalar x, SkScalar y, + const SkPaint& paint, const SkSurfaceProps* props) const { + SkASSERT(byteLength == 0 || text != nullptr); + + SkDEBUGCODE(this->validate();) + + // nothing to draw + if (text == nullptr || byteLength == 0 || fRC->isEmpty()) { + return; + } + + // SkScalarRec doesn't currently have a way of representing hairline stroke and + // will fill if its frame-width is 0. + if (ShouldDrawTextAsPaths(paint, *fMatrix)) { + this->drawText_asPaths(text, byteLength, x, y, paint); + return; + } + + auto cache = SkStrikeCache::FindOrCreateStrikeExclusive( + paint, props, this->scalerContextFlags(), fMatrix); + + // The Blitter Choose needs to be live while using the blitter below. + SkAutoBlitterChoose blitterChooser(*this, nullptr, paint); + SkAAClipBlitterWrapper wrapper(*fRC, blitterChooser.get()); + DrawOneGlyph drawOneGlyph(*this, paint, cache.get(), wrapper.getBlitter()); + + SkFindAndPlaceGlyph::ProcessText( + paint.getTextEncoding(), text, byteLength, + {x, y}, *fMatrix, paint.getTextAlign(), cache.get(), drawOneGlyph); +} + ////////////////////////////////////////////////////////////////////////////// void SkDraw::drawPosText_asPaths(const char text[], size_t byteLength, const SkScalar pos[], |