diff options
Diffstat (limited to 'src/core/SkTextBlob.cpp')
-rw-r--r-- | src/core/SkTextBlob.cpp | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/core/SkTextBlob.cpp b/src/core/SkTextBlob.cpp index d1a77e74f7..4ba7df8a7d 100644 --- a/src/core/SkTextBlob.cpp +++ b/src/core/SkTextBlob.cpp @@ -382,7 +382,16 @@ SkRect SkTextBlobBuilder::ConservativeRunBounds(const SkTextBlob::RunRecord& run SkASSERT(SkTextBlob::kFull_Positioning == run.positioning() || SkTextBlob::kHorizontal_Positioning == run.positioning()); - // First, compute the glyph position bbox. + SkPaint paint; + run.font().applyToPaint(&paint); + const SkRect fontBounds = paint.getFontBounds(); + if (fontBounds.isEmpty()) { + // Empty font bounds are likely a font bug. TightBounds has a better chance of + // producing useful results in this case. + return TightRunBounds(run); + } + + // Compute the glyph position bbox. SkRect bounds; switch (run.positioning()) { case SkTextBlob::kHorizontal_Positioning: { @@ -410,9 +419,6 @@ SkRect SkTextBlobBuilder::ConservativeRunBounds(const SkTextBlob::RunRecord& run } // Expand by typeface glyph bounds. - SkPaint paint; - run.font().applyToPaint(&paint); - const SkRect fontBounds = paint.getFontBounds(); bounds.fLeft += fontBounds.left(); bounds.fTop += fontBounds.top(); bounds.fRight += fontBounds.right(); |