| Index: app/gfx/font_skia.cc
|
| ===================================================================
|
| --- app/gfx/font_skia.cc (revision 25038)
|
| +++ app/gfx/font_skia.cc (working copy)
|
| @@ -41,9 +41,13 @@
|
| PaintSetup(&paint);
|
| paint.getFontMetrics(&metrics);
|
|
|
| - ascent_ = SkScalarRound(-metrics.fAscent);
|
| - height_ = SkScalarRound(-metrics.fAscent + metrics.fDescent +
|
| - metrics.fLeading);
|
| + // We need to know the number of whole pixels for these measurements. The
|
| + // height is the number of whole pixels above the baseline, plus the number
|
| + // of whole pixels below it.
|
| + ascent_ = SkScalarCeil(-metrics.fAscent);
|
| + height_ = ascent_ +
|
| + SkScalarCeil(metrics.fDescent) +
|
| + SkScalarCeil(metrics.fLeading);
|
|
|
| if (metrics.fAvgCharWidth) {
|
| avg_width_ = SkScalarRound(metrics.fAvgCharWidth);
|
| @@ -54,6 +58,23 @@
|
|
|
| avg_width_ = static_cast<int>(ceilf(SkScalarToFloat(width)));
|
| }
|
| +
|
| + // HACK ALERT! Skia and Pango don't agree about how to vertically size text.
|
| + // Since we use Pango in gfx::Canvas, we need to use its version of the
|
| + // height or various layouts will look weird.
|
| + //
|
| + // From debugging, it looks like Skia's notion of ascenders and descenders
|
| + // are correct from the pixel rendering, but includes no leading or other
|
| + // space around the text. Pango includes extra space (at least for the fonts
|
| + // tested). To hack around this, we now ask Pango to get the height of a
|
| + // string: we use "l" for the highest ascender, and "g" to get a descender.
|
| + //
|
| + // TODO(brettw/jhawkins): figure out how to get the real height that Pango
|
| + // will use in a reasonable way. This is a horrible hack!
|
| + int width, height;
|
| + Canvas cvs(1, 1, true);
|
| + cvs.SizeStringInt(L"lg", *this, &width, &height, 0);
|
| + height_ = height;
|
| }
|
|
|
| void Font::CopyFont(const Font& other) {
|
|
|