diff options
author | Herb Derby <herb@google.com> | 2018-05-09 16:36:11 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-06-05 20:11:39 +0000 |
commit | 4225b3220ef4bf50f0d9403f812ea94d50c4ee59 (patch) | |
tree | a03d6ff5708e6c41fdc4b1edb8f5200d08d7dc63 /src/core/SkCanvas.cpp | |
parent | f105dc71e4200db5a57a1e28b8bca2b3689debdb (diff) |
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>
Diffstat (limited to 'src/core/SkCanvas.cpp')
-rw-r--r-- | src/core/SkCanvas.cpp | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp index 8230fb3928..dcff1b0cc3 100644 --- a/src/core/SkCanvas.cpp +++ b/src/core/SkCanvas.cpp @@ -15,6 +15,8 @@ #include "SkDrawable.h" #include "SkDrawFilter.h" #include "SkDrawLooper.h" +#include "SkGlyphCache.h" +#include "SkGlyphRun.h" #include "SkImage.h" #include "SkImage_Base.h" #include "SkImageFilter.h" @@ -34,6 +36,7 @@ #include "SkRasterHandleAllocator.h" #include "SkRRect.h" #include "SkSpecialImage.h" +#include "SkStrikeCache.h" #include "SkString.h" #include "SkSurface_Base.h" #include "SkTextBlob.h" @@ -1075,7 +1078,8 @@ void SkCanvas::internalSaveLayer(const SaveLayerRec& rec, SaveLayerStrategy stra const bool preserveLCDText = kOpaque_SkAlphaType == info.alphaType() || (saveLayerFlags & kPreserveLCDText_SaveLayerFlag); const SkBaseDevice::TileUsage usage = SkBaseDevice::kNever_TileUsage; - const bool trackCoverage = SkToBool(saveLayerFlags & kMaskAgainstCoverage_EXPERIMENTAL_DONT_USE_SaveLayerFlag); + const bool trackCoverage = + SkToBool(saveLayerFlags & kMaskAgainstCoverage_EXPERIMENTAL_DONT_USE_SaveLayerFlag); const SkBaseDevice::CreateInfo createInfo = SkBaseDevice::CreateInfo(info, usage, geo, preserveLCDText, trackCoverage, @@ -2439,10 +2443,13 @@ void SkCanvas::onDrawBitmapLattice(const SkBitmap& bitmap, const Lattice& lattic void SkCanvas::onDrawText(const void* text, size_t byteLength, SkScalar x, SkScalar y, const SkPaint& paint) { + LOOPER_BEGIN(paint, SkDrawFilter::kText_Type, nullptr) while (iter.next()) { - iter.fDevice->drawText(text, byteLength, x, y, looper.paint()); + auto glyphRun = SkGlyphRun::MakeFromDrawText( + looper.paint(), text, byteLength, SkPoint::Make(x, y)); + iter.fDevice->drawGlyphRun(looper.paint(), &glyphRun); } LOOPER_END @@ -2450,12 +2457,12 @@ void SkCanvas::onDrawText(const void* text, size_t byteLength, SkScalar x, SkSca void SkCanvas::onDrawPosText(const void* text, size_t byteLength, const SkPoint pos[], const SkPaint& paint) { - SkPoint textOffset = SkPoint::Make(0, 0); LOOPER_BEGIN(paint, SkDrawFilter::kText_Type, nullptr) while (iter.next()) { - iter.fDevice->drawPosText(text, byteLength, &pos->fX, 2, textOffset, looper.paint()); + auto glyphRun = SkGlyphRun::MakeFromDrawPosText(looper.paint(), text, byteLength, pos); + iter.fDevice->drawGlyphRun(looper.paint(), &glyphRun); } LOOPER_END @@ -2464,12 +2471,12 @@ void SkCanvas::onDrawPosText(const void* text, size_t byteLength, const SkPoint void SkCanvas::onDrawPosTextH(const void* text, size_t byteLength, const SkScalar xpos[], SkScalar constY, const SkPaint& paint) { - SkPoint textOffset = SkPoint::Make(0, constY); - LOOPER_BEGIN(paint, SkDrawFilter::kText_Type, nullptr) while (iter.next()) { - iter.fDevice->drawPosText(text, byteLength, xpos, 1, textOffset, looper.paint()); + auto glyphRun = + SkGlyphRun::MakeFromDrawPosTextH(looper.paint(), text, byteLength, xpos, constY); + iter.fDevice->drawGlyphRun(looper.paint(), &glyphRun); } LOOPER_END |