Index: src/core/SkBBoxRecord.cpp |
diff --git a/src/core/SkBBoxRecord.cpp b/src/core/SkBBoxRecord.cpp |
index 0dadb5c382cc92ae185e4a174209301da199d4bc..b1c229e68b57483caac93224f3331a9a038527f9 100644 |
--- a/src/core/SkBBoxRecord.cpp |
+++ b/src/core/SkBBoxRecord.cpp |
@@ -165,6 +165,18 @@ void SkBBoxRecord::drawBitmapNine(const SkBitmap& bitmap, const SkIRect& center, |
} |
} |
+// Hack to work-around https://code.google.com/p/chromium/issues/detail?id=373785 |
+// This logic assums that 'pad' is enough to add to the left and right to account for |
+// big glyphs. For the font in question (a logo font) the glyphs is much wider than just |
+// the pointsize (approx 3x wider). |
+// As a temp work-around, we scale-up pad. |
+// A more correct fix might be to add fontmetrics.fMaxX, but we don't have that value in hand |
+// at the moment, and (possibly) the value in the font may not be accurate (but who knows). |
+// |
+static SkScalar hack_373785_amend_pad(SkScalar pad) { |
+ return pad * 4; |
+} |
+ |
void SkBBoxRecord::onDrawPosText(const void* text, size_t byteLength, const SkPoint pos[], |
const SkPaint& paint) { |
SkRect bbox; |
@@ -176,6 +188,7 @@ void SkBBoxRecord::onDrawPosText(const void* text, size_t byteLength, const SkPo |
// pad on left and right by half of max vertical glyph extents |
SkScalar pad = (metrics.fTop - metrics.fBottom) / 2; |
+ pad = hack_373785_amend_pad(pad); |
bbox.fLeft += pad; |
bbox.fRight -= pad; |
@@ -212,6 +225,7 @@ void SkBBoxRecord::onDrawPosTextH(const void* text, size_t byteLength, const SkS |
} |
// pad horizontally by max glyph height |
+ pad = hack_373785_amend_pad(pad); |
bbox.fLeft += pad; |
bbox.fRight -= pad; |