зеркало из https://github.com/mozilla/pjs.git
Apply font size inflation to 'line-height: normal' by using the metrics of the inflated font rather than multiplying the inflation by the result for the uninflated font. (Bug 706609, patch 7) r=roc
This matters primarily because it makes font inflation easier to test by avoiding rounding differences. It fixes two existing tests that were disabled and also makes it possible to test font inflation of selects (since options have line-height: normal ! important in the UA style sheet).
This commit is contained in:
Родитель
9d13defcdf
Коммит
2a5e64f028
|
@ -26,13 +26,9 @@ var gTests = [
|
|||
// file) has font inflation set to 15 em per line.
|
||||
|
||||
|
||||
// FIXME (maybe): Commented out due to rounding differences between
|
||||
// inflating the 'normal' line height of a smaller font and using the
|
||||
// normal line height of the inflated font.
|
||||
//"== text-1.html text-1-ref.html",
|
||||
"== text-1.html text-1-ref.html",
|
||||
"== text-2.html text-2-ref.html",
|
||||
// FIXME (maybe): same as text-1.
|
||||
//"== text-3.html text-3-ref.html",
|
||||
"== text-3.html text-3-ref.html",
|
||||
"== text-4.html text-4-ref.html",
|
||||
"== decoration-1.html decoration-1-ref.html",
|
||||
"== bullet-1.html bullet-1-ref.html",
|
||||
|
|
|
@ -2170,20 +2170,23 @@ GetNormalLineHeight(nsFontMetrics* aFontMetrics)
|
|||
static inline nscoord
|
||||
ComputeLineHeight(nsStyleContext* aStyleContext,
|
||||
nscoord aBlockHeight,
|
||||
bool* aIsBlockHeight)
|
||||
float aFontSizeInflation)
|
||||
{
|
||||
*aIsBlockHeight = false;
|
||||
|
||||
const nsStyleCoord& lhCoord = aStyleContext->GetStyleText()->mLineHeight;
|
||||
|
||||
if (lhCoord.GetUnit() == eStyleUnit_Coord)
|
||||
return lhCoord.GetCoordValue();
|
||||
if (lhCoord.GetUnit() == eStyleUnit_Coord) {
|
||||
nscoord result = lhCoord.GetCoordValue();
|
||||
if (aFontSizeInflation != 1.0f) {
|
||||
result = NSToCoordRound(result * aFontSizeInflation);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
if (lhCoord.GetUnit() == eStyleUnit_Factor)
|
||||
// For factor units the computed value of the line-height property
|
||||
// is found by multiplying the factor by the font's computed size
|
||||
// (adjusted for min-size prefs and text zoom).
|
||||
return NSToCoordRound(lhCoord.GetFactorValue() *
|
||||
return NSToCoordRound(lhCoord.GetFactorValue() * aFontSizeInflation *
|
||||
aStyleContext->GetStyleFont()->mFont.size);
|
||||
|
||||
NS_ASSERTION(lhCoord.GetUnit() == eStyleUnit_Normal ||
|
||||
|
@ -2194,14 +2197,14 @@ ComputeLineHeight(nsStyleContext* aStyleContext,
|
|||
NS_ASSERTION(lhCoord.GetIntValue() == NS_STYLE_LINE_HEIGHT_BLOCK_HEIGHT,
|
||||
"bad line-height value");
|
||||
if (aBlockHeight != NS_AUTOHEIGHT) {
|
||||
*aIsBlockHeight = true;
|
||||
return aBlockHeight;
|
||||
}
|
||||
}
|
||||
|
||||
nsRefPtr<nsFontMetrics> fm;
|
||||
nsLayoutUtils::GetFontMetricsForStyleContext(aStyleContext,
|
||||
getter_AddRefs(fm));
|
||||
getter_AddRefs(fm),
|
||||
aFontSizeInflation);
|
||||
return GetNormalLineHeight(fm);
|
||||
}
|
||||
|
||||
|
@ -2224,16 +2227,11 @@ nsHTMLReflowState::CalcLineHeight(nsStyleContext* aStyleContext,
|
|||
{
|
||||
NS_PRECONDITION(aStyleContext, "Must have a style context");
|
||||
|
||||
bool isBlockHeight;
|
||||
nscoord lineHeight =
|
||||
ComputeLineHeight(aStyleContext, aBlockHeight, &isBlockHeight);
|
||||
ComputeLineHeight(aStyleContext, aBlockHeight, aFontSizeInflation);
|
||||
|
||||
NS_ASSERTION(lineHeight >= 0, "ComputeLineHeight screwed up");
|
||||
|
||||
if (aFontSizeInflation != 1.0f && !isBlockHeight) {
|
||||
lineHeight = NSToCoordRound(lineHeight * aFontSizeInflation);
|
||||
}
|
||||
|
||||
return lineHeight;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче