Index: src/core/SkTextBlob.cpp |
diff --git a/src/core/SkTextBlob.cpp b/src/core/SkTextBlob.cpp |
index d1a77e74f7efdcc831a6768f8314abc426e9e4e1..4ba7df8a7da222f832f90eb4dd1d741181015e7a 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(); |