diff --git a/layout/style/nsRuleNode.cpp b/layout/style/nsRuleNode.cpp index 19565f00b378..929a2d84e84f 100644 --- a/layout/style/nsRuleNode.cpp +++ b/layout/style/nsRuleNode.cpp @@ -369,22 +369,18 @@ static inline nscoord ScaleViewportCoordTrunc(const nsCSSValue& aValue, aViewportSize / 100.0f); } +/* static */ already_AddRefed -GetMetricsFor(nsPresContext* aPresContext, - nsStyleContext* aStyleContext, - const nsStyleFont* aStyleFont, - nscoord aFontSize, // overrides value from aStyleFont - bool aUseUserFontSet) +nsRuleNode::GetMetricsFor(nsPresContext* aPresContext, + bool aIsVertical, + const nsStyleFont* aStyleFont, + nscoord aFontSize, + bool aUseUserFontSet) { nsFont font = aStyleFont->mFont; font.size = aFontSize; - gfxFont::Orientation orientation = gfxFont::eHorizontal; - if (aStyleContext) { - WritingMode wm(aStyleContext); - if (wm.IsVertical() && !wm.IsSideways()) { - orientation = gfxFont::eVertical; - } - } + gfxFont::Orientation orientation + = aIsVertical ? gfxFont::eVertical : gfxFont::eHorizontal; nsFontMetrics::Params params; params.language = aStyleFont->mLanguage; params.explicitLanguage = aStyleFont->mExplicitLanguage; @@ -395,6 +391,25 @@ GetMetricsFor(nsPresContext* aPresContext, return aPresContext->DeviceContext()->GetMetricsFor(font, params); } +/* static */ +already_AddRefed +nsRuleNode::GetMetricsFor(nsPresContext* aPresContext, + nsStyleContext* aStyleContext, + const nsStyleFont* aStyleFont, + nscoord aFontSize, // overrides value from aStyleFont + bool aUseUserFontSet) +{ + bool isVertical = false; + if (aStyleContext) { + WritingMode wm(aStyleContext); + if (wm.IsVertical() && !wm.IsSideways()) { + isVertical = true; + } + } + return nsRuleNode::GetMetricsFor(aPresContext, isVertical, aStyleFont, + aFontSize, aUseUserFontSet); +} + static nsSize CalcViewportUnitsScale(nsPresContext* aPresContext) { diff --git a/layout/style/nsRuleNode.h b/layout/style/nsRuleNode.h index f4755558058b..56faf5d62560 100644 --- a/layout/style/nsRuleNode.h +++ b/layout/style/nsRuleNode.h @@ -22,6 +22,7 @@ class nsCSSPropertyIDSet; class nsCSSValue; +class nsFontMetrics; class nsIStyleRule; class nsStyleContext; class nsStyleCoord; @@ -797,6 +798,18 @@ public: bool aConvertListItem = false); static void EnsureInlineDisplay(mozilla::StyleDisplay& display); + static already_AddRefed GetMetricsFor(nsPresContext* aPresContext, + bool aIsVertical, + const nsStyleFont* aStyleFont, + nscoord aFontSize, + bool aUseUserFontSet); + + static already_AddRefed GetMetricsFor(nsPresContext* aPresContext, + nsStyleContext* aStyleContext, + const nsStyleFont* aStyleFont, + nscoord aFontSize, + bool aUseUserFontSet); + // Transition never returns null; on out of memory it'll just return |this|. nsRuleNode* Transition(nsIStyleRule* aRule, mozilla::SheetType aLevel, bool aIsImportantRule);