summaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
authorbrettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-09-02 00:24:18 +0000
committerbrettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-09-02 00:24:18 +0000
commit7007668faea3bf52350d21d86a030cd6209ac5a9 (patch)
treeb34d09b6bb97a97a18b61d5849cf6ff91c3efa04 /app
parentc90c0e3e83d8167cd067a2414a1677f4d6e1c7ff (diff)
downloadchromium_src-7007668faea3bf52350d21d86a030cd6209ac5a9.zip
chromium_src-7007668faea3bf52350d21d86a030cd6209ac5a9.tar.gz
chromium_src-7007668faea3bf52350d21d86a030cd6209ac5a9.tar.bz2
Workaround Skia and Pango measuring font heights differently by asking Pango
for the height that we'll report in the gfx::Font. This seems wrong, but at least things will look reasonable until we find a better solution. This changes the existing height computation code to use ceiling. Even though this is no longer used, it is good to have the correct code for the height computation here so that if we find a better solution, it will be run properly. This also gives more room for the clock in the status area view because the height is now more and we want it to be aligned properly. BUG=none TEST=none Review URL: http://codereview.chromium.org/183044 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@25131 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'app')
-rw-r--r--app/gfx/font_skia.cc27
1 files changed, 24 insertions, 3 deletions
diff --git a/app/gfx/font_skia.cc b/app/gfx/font_skia.cc
index 4308bf6..988683c 100644
--- a/app/gfx/font_skia.cc
+++ b/app/gfx/font_skia.cc
@@ -41,9 +41,13 @@ void Font::calculateMetrics() {
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 @@ void Font::calculateMetrics() {
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) {