Bug 1566528 - clamp the amount of synthetic bold extra strikes. r=jfkthame

Differential Revision: https://phabricator.services.mozilla.com/D38212

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Lee Salzman 2019-07-16 17:59:35 +00:00
Родитель 45b648c8e3
Коммит 8e0e393dc3
1 изменённых файлов: 13 добавлений и 3 удалений

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

@ -2224,9 +2224,19 @@ void gfxFont::Draw(const gfxTextRun* aTextRun, uint32_t aStart, uint32_t aEnd,
gfx::Float xscale = CalcXScale(aRunParams.context->GetDrawTarget());
fontParams.synBoldOnePixelOffset = aRunParams.direction * xscale;
if (xscale != 0.0) {
// use as many strikes as needed for the the increased advance
fontParams.extraStrikes =
std::max(1, NS_lroundf(GetSyntheticBoldOffset() / xscale));
static const int32_t kMaxExtraStrikes = 128;
gfxFloat extraStrikes = GetSyntheticBoldOffset() / xscale;
if (extraStrikes > kMaxExtraStrikes) {
// if too many strikes are required, limit them and increase the step
// size to compensate
fontParams.extraStrikes = kMaxExtraStrikes;
fontParams.synBoldOnePixelOffset = aRunParams.direction *
GetSyntheticBoldOffset() /
fontParams.extraStrikes;
} else {
// use as many strikes as needed for the increased advance
fontParams.extraStrikes = NS_lroundf(std::max(1.0, extraStrikes));
}
}
} else {
fontParams.synBoldOnePixelOffset = 0;