Bug 475968. Pad out the glyph extents of Windows text to account for possible antialiased pixels outside the regular bounds. r=roc

This commit is contained in:
Jonathan Kew 2009-06-15 10:01:19 +12:00
Родитель a91add6632
Коммит 1e7b94c8cd
5 изменённых файлов: 38 добавлений и 2 удалений

Просмотреть файл

@ -1137,8 +1137,24 @@ gfxWindowsFont::Measure(gfxTextRun *aTextRun,
}
}
return gfxFont::Measure(aTextRun, aStart, aEnd,
aBoundingBoxType, aRefContext, aSpacing);
gfxFont::RunMetrics metrics = gfxFont::Measure(aTextRun, aStart, aEnd,
aBoundingBoxType, aRefContext,
aSpacing);
// if aBoundingBoxType is LOOSE_INK_EXTENTS
// and the underlying cairo font may be antialiased,
// we can't trust Windows to have considered all the pixels
// so we need to add "padding" to the bounds.
// (see bugs 475968, 439831, compare also bug 445087)
if (aBoundingBoxType == LOOSE_INK_EXTENTS &&
mAntialiasOption != CAIRO_ANTIALIAS_NONE &&
metrics.mBoundingBox.size.width > 0) {
const PRUint32 appUnitsPerDevUnit = aTextRun->GetAppUnitsPerDevUnit();
metrics.mBoundingBox.pos.x -= appUnitsPerDevUnit;
metrics.mBoundingBox.size.width += 3 * appUnitsPerDevUnit;
}
return metrics;
}
FontEntry*

Просмотреть файл

@ -1,5 +1,10 @@
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
td { padding: 3px; }
</style>
</head>
<body>
<table>
<tbody style="height:200px; overflow:auto;">

Просмотреть файл

@ -1,5 +1,10 @@
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
td { padding: 3px; }
</style>
</head>
<body>
<table>
<tbody style="height:200px;">

Просмотреть файл

@ -1,4 +1,9 @@
<html>
<head>
<style type="text/css">
td { padding: 3px; }
</style>
</head>
<body>
<table>
<tbody style="height:200px; overflow:auto;">

Просмотреть файл

@ -1,4 +1,9 @@
<html>
<head>
<style type="text/css">
td { padding: 3px; }
</style>
</head>
<body>
<table>
<tbody style="height:200px;">