зеркало из https://github.com/mozilla/pjs.git
Switch lots of callers to using nsLayoutUtils::GetFontMetricsForFrame and nsLayoutUtils::GetFontMetricsForStyleContext. (Bug 678671, patch 1) r=roc
This changes a number of callers that were previously bypassing the use of the correct language (with either no language or the charset-detected language on the pres context via nsPresContext::GetMetricsFor) and/or the correct user font set to pass the correct values, which should improve the correctness of the behavior of whatever they were using the fonts for, and also reduce the number of unique sets of font metrics requested (which helps nsFontCache effectiveness).
This commit is contained in:
Родитель
0036f55bd8
Коммит
914066afe4
|
@ -45,6 +45,7 @@
|
|||
#include "gfxFont.h"
|
||||
#include "gfxUserFontSet.h"
|
||||
#include "nsFontMetrics.h"
|
||||
#include "nsLayoutUtils.h"
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Constants and structures
|
||||
|
@ -479,10 +480,7 @@ nsFontSizeTextAttr::Format(const nscoord& aValue, nsAString& aFormattedValue)
|
|||
nscoord
|
||||
nsFontSizeTextAttr::GetFontSize(nsIFrame *aFrame)
|
||||
{
|
||||
nsStyleFont* styleFont =
|
||||
(nsStyleFont*)(aFrame->GetStyleDataExternal(eStyleStruct_Font));
|
||||
|
||||
return styleFont->mSize;
|
||||
return aFrame->GetStyleFont()->mSize;
|
||||
}
|
||||
|
||||
|
||||
|
@ -527,15 +525,8 @@ nsFontWeightTextAttr::GetFontWeight(nsIFrame *aFrame)
|
|||
{
|
||||
// nsFont::width isn't suitable here because it's necessary to expose real
|
||||
// value of font weight (used font might not have some font weight values).
|
||||
nsStyleFont* styleFont =
|
||||
(nsStyleFont*)(aFrame->GetStyleDataExternal(eStyleStruct_Font));
|
||||
|
||||
gfxUserFontSet *fs = aFrame->PresContext()->GetUserFontSet();
|
||||
|
||||
nsRefPtr<nsFontMetrics> fm;
|
||||
aFrame->PresContext()->DeviceContext()->
|
||||
GetMetricsFor(styleFont->mFont, aFrame->GetStyleVisibility()->mLanguage,
|
||||
fs, *getter_AddRefs(fm));
|
||||
nsLayoutUtils::GetFontMetricsForFrame(aFrame, getter_AddRefs(fm));
|
||||
|
||||
gfxFontGroup *fontGroup = fm->GetThebesFontGroup();
|
||||
gfxFont *font = fontGroup->GetFontAt(0);
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
#include "nsIFrame.h"
|
||||
#include "nsFontMetrics.h"
|
||||
#include "nsPresContext.h"
|
||||
#include "nsLayoutUtils.h"
|
||||
|
||||
#include "gfxFont.h"
|
||||
|
||||
|
@ -256,11 +257,7 @@ __try {
|
|||
}
|
||||
|
||||
nsRefPtr<nsFontMetrics> fm;
|
||||
frame->PresContext()->DeviceContext()->
|
||||
GetMetricsFor(frame->GetStyleFont()->mFont,
|
||||
frame->GetStyleVisibility()->mLanguage,
|
||||
frame->PresContext()->GetUserFontSet(),
|
||||
*getter_AddRefs(fm));
|
||||
nsLayoutUtils::GetFontMetricsForFrame(frame, getter_AddRefs(fm));
|
||||
|
||||
const nsString& name = fm->GetThebesFontGroup()->GetFontAt(0)->GetName();
|
||||
if (name.IsEmpty())
|
||||
|
|
|
@ -2537,9 +2537,8 @@ GetScrollableLineHeight(nsIFrame* aTargetFrame)
|
|||
}
|
||||
|
||||
// Fall back to the font height of the target frame.
|
||||
const nsStyleFont* font = aTargetFrame->GetStyleFont();
|
||||
const nsFont& f = font->mFont;
|
||||
nsRefPtr<nsFontMetrics> fm = aTargetFrame->PresContext()->GetMetricsFor(f);
|
||||
nsRefPtr<nsFontMetrics> fm;
|
||||
nsLayoutUtils::GetFontMetricsForFrame(aTargetFrame, getter_AddRefs(fm));
|
||||
NS_ASSERTION(fm, "FontMetrics is null!");
|
||||
if (fm)
|
||||
return fm->MaxHeight();
|
||||
|
|
|
@ -2203,9 +2203,8 @@ nsGfxScrollFrameInner::ScrollBy(nsIntPoint aDelta,
|
|||
nsSize
|
||||
nsGfxScrollFrameInner::GetLineScrollAmount() const
|
||||
{
|
||||
const nsStyleFont* font = mOuter->GetStyleFont();
|
||||
const nsFont& f = font->mFont;
|
||||
nsRefPtr<nsFontMetrics> fm = mOuter->PresContext()->GetMetricsFor(f);
|
||||
nsRefPtr<nsFontMetrics> fm;
|
||||
nsLayoutUtils::GetFontMetricsForFrame(mOuter, getter_AddRefs(fm));
|
||||
NS_ASSERTION(fm, "FontMetrics is null, assuming fontHeight == 1 appunit");
|
||||
nscoord fontHeight = 1;
|
||||
if (fm) {
|
||||
|
|
|
@ -328,8 +328,9 @@ nsMathMLFrame::CalcLength(nsPresContext* aPresContext,
|
|||
return NSToCoordRound(aCSSValue.GetFloatValue() * (float)font->mFont.size);
|
||||
}
|
||||
else if (eCSSUnit_XHeight == unit) {
|
||||
const nsStyleFont* font = aStyleContext->GetStyleFont();
|
||||
nsRefPtr<nsFontMetrics> fm = aPresContext->GetMetricsFor(font->mFont);
|
||||
nsRefPtr<nsFontMetrics> fm;
|
||||
nsLayoutUtils::GetFontMetricsForStyleContext(aStyleContext,
|
||||
getter_AddRefs(fm));
|
||||
nscoord xHeight = fm->XHeight();
|
||||
return NSToCoordRound(aCSSValue.GetFloatValue() * (float)xHeight);
|
||||
}
|
||||
|
|
|
@ -49,6 +49,7 @@
|
|||
#include "nsFrame.h"
|
||||
#include "nsCSSValue.h"
|
||||
#include "nsMathMLElement.h"
|
||||
#include "nsLayoutUtils.h"
|
||||
|
||||
class nsMathMLChar;
|
||||
|
||||
|
@ -239,9 +240,8 @@ public:
|
|||
GetSubDropFromChild(nsIFrame* aChild,
|
||||
nscoord& aSubDrop)
|
||||
{
|
||||
const nsStyleFont* font = aChild->GetStyleFont();
|
||||
nsRefPtr<nsFontMetrics> fm = aChild->PresContext()->GetMetricsFor(
|
||||
font->mFont);
|
||||
nsRefPtr<nsFontMetrics> fm;
|
||||
nsLayoutUtils::GetFontMetricsForFrame(aChild, getter_AddRefs(fm));
|
||||
GetSubDrop(fm, aSubDrop);
|
||||
}
|
||||
|
||||
|
@ -249,9 +249,8 @@ public:
|
|||
GetSupDropFromChild(nsIFrame* aChild,
|
||||
nscoord& aSupDrop)
|
||||
{
|
||||
const nsStyleFont* font = aChild->GetStyleFont();
|
||||
nsRefPtr<nsFontMetrics> fm = aChild->PresContext()->GetMetricsFor(
|
||||
font->mFont);
|
||||
nsRefPtr<nsFontMetrics> fm;
|
||||
nsLayoutUtils::GetFontMetricsForFrame(aChild, getter_AddRefs(fm));
|
||||
GetSupDrop(fm, aSupDrop);
|
||||
}
|
||||
|
||||
|
|
|
@ -220,8 +220,8 @@ nsMathMLTokenFrame::Place(nsRenderingContext& aRenderingContext,
|
|||
mBoundingMetrics += childSize.mBoundingMetrics;
|
||||
}
|
||||
|
||||
nsRefPtr<nsFontMetrics> fm =
|
||||
PresContext()->GetMetricsFor(GetStyleFont()->mFont);
|
||||
nsRefPtr<nsFontMetrics> fm;
|
||||
nsLayoutUtils::GetFontMetricsForFrame(this, getter_AddRefs(fm));
|
||||
nscoord ascent = fm->MaxAscent();
|
||||
nscoord descent = fm->MaxDescent();
|
||||
|
||||
|
|
|
@ -369,9 +369,9 @@ nsMathMLmencloseFrame::PlaceInternal(nsRenderingContext& aRenderingContext,
|
|||
nscoord onePixel = nsPresContext::CSSPixelsToAppUnits(1);
|
||||
|
||||
nscoord mEmHeight;
|
||||
aRenderingContext.SetFont(GetStyleFont()->mFont,
|
||||
PresContext()->GetUserFontSet());
|
||||
nsFontMetrics* fm = aRenderingContext.FontMetrics();
|
||||
nsRefPtr<nsFontMetrics> fm;
|
||||
nsLayoutUtils::GetFontMetricsForFrame(this, getter_AddRefs(fm));
|
||||
aRenderingContext.SetFont(fm);
|
||||
GetRuleThickness(aRenderingContext, fm, mRuleThickness);
|
||||
GetEmHeight(fm, mEmHeight);
|
||||
|
||||
|
|
|
@ -250,9 +250,9 @@ nsMathMLmfencedFrame::Reflow(nsPresContext* aPresContext,
|
|||
|
||||
PRInt32 i;
|
||||
const nsStyleFont* font = GetStyleFont();
|
||||
aReflowState.rendContext->SetFont(font->mFont,
|
||||
aPresContext->GetUserFontSet());
|
||||
nsFontMetrics* fm = aReflowState.rendContext->FontMetrics();
|
||||
nsRefPtr<nsFontMetrics> fm;
|
||||
nsLayoutUtils::GetFontMetricsForFrame(this, getter_AddRefs(fm));
|
||||
aReflowState.rendContext->SetFont(fm);
|
||||
nscoord axisHeight, em;
|
||||
GetAxisHeight(*aReflowState.rendContext, fm, axisHeight);
|
||||
GetEmHeight(fm, em);
|
||||
|
@ -594,7 +594,8 @@ nsMathMLmfencedFrame::GetIntrinsicWidth(nsRenderingContext* aRenderingContext)
|
|||
|
||||
nsPresContext* presContext = PresContext();
|
||||
const nsStyleFont* font = GetStyleFont();
|
||||
nsRefPtr<nsFontMetrics> fm = presContext->GetMetricsFor(font->mFont);
|
||||
nsRefPtr<nsFontMetrics> fm;
|
||||
nsLayoutUtils::GetFontMetricsForFrame(this, getter_AddRefs(fm));
|
||||
nscoord em;
|
||||
GetEmHeight(fm, em);
|
||||
|
||||
|
|
|
@ -240,9 +240,9 @@ nsMathMLmfracFrame::PlaceInternal(nsRenderingContext& aRenderingContext,
|
|||
nsPresContext* presContext = PresContext();
|
||||
nscoord onePixel = nsPresContext::CSSPixelsToAppUnits(1);
|
||||
|
||||
aRenderingContext.SetFont(GetStyleFont()->mFont,
|
||||
presContext->GetUserFontSet());
|
||||
nsFontMetrics* fm = aRenderingContext.FontMetrics();
|
||||
nsRefPtr<nsFontMetrics> fm;
|
||||
nsLayoutUtils::GetFontMetricsForFrame(this, getter_AddRefs(fm));
|
||||
aRenderingContext.SetFont(fm);
|
||||
|
||||
nscoord defaultRuleThickness, axisHeight;
|
||||
GetRuleThickness(aRenderingContext, fm, defaultRuleThickness);
|
||||
|
|
|
@ -160,9 +160,9 @@ nsMathMLmmultiscriptsFrame::Place(nsRenderingContext& aRenderingContext,
|
|||
|
||||
// get x-height (an ex)
|
||||
const nsStyleFont* font = GetStyleFont();
|
||||
aRenderingContext.SetFont(font->mFont,
|
||||
PresContext()->GetUserFontSet());
|
||||
nsFontMetrics* fm = aRenderingContext.FontMetrics();
|
||||
nsRefPtr<nsFontMetrics> fm;
|
||||
nsLayoutUtils::GetFontMetricsForFrame(this, getter_AddRefs(fm));
|
||||
aRenderingContext.SetFont(fm);
|
||||
|
||||
nscoord xHeight = fm->XHeight();
|
||||
|
||||
|
|
|
@ -391,8 +391,8 @@ nsMathMLmoFrame::ProcessOperatorData()
|
|||
// cache the default values of lspace & rspace that we get from the dictionary.
|
||||
// since these values are relative to the 'em' unit, convert to twips now
|
||||
nscoord em;
|
||||
nsRefPtr<nsFontMetrics> fm =
|
||||
presContext->GetMetricsFor(GetStyleFont()->mFont);
|
||||
nsRefPtr<nsFontMetrics> fm;
|
||||
nsLayoutUtils::GetFontMetricsForFrame(this, getter_AddRefs(fm));
|
||||
GetEmHeight(fm, em);
|
||||
|
||||
mEmbellishData.leftSpace = NSToCoordRound(lspace * em);
|
||||
|
@ -635,9 +635,9 @@ nsMathMLmoFrame::Stretch(nsRenderingContext& aRenderingContext,
|
|||
nsIFrame* firstChild = mFrames.FirstChild();
|
||||
|
||||
// get the axis height;
|
||||
aRenderingContext.SetFont(GetStyleFont()->mFont,
|
||||
PresContext()->GetUserFontSet());
|
||||
nsFontMetrics* fm = aRenderingContext.FontMetrics();
|
||||
nsRefPtr<nsFontMetrics> fm;
|
||||
nsLayoutUtils::GetFontMetricsForFrame(this, getter_AddRefs(fm));
|
||||
aRenderingContext.SetFont(fm);
|
||||
nscoord axisHeight, height;
|
||||
GetAxisHeight(aRenderingContext, fm, axisHeight);
|
||||
|
||||
|
|
|
@ -257,9 +257,9 @@ nsMathMLmrootFrame::Reflow(nsPresContext* aPresContext,
|
|||
////////////
|
||||
// Prepare the radical symbol and the overline bar
|
||||
|
||||
renderingContext.SetFont(GetStyleFont()->mFont,
|
||||
aPresContext->GetUserFontSet());
|
||||
nsFontMetrics* fm = renderingContext.FontMetrics();
|
||||
nsRefPtr<nsFontMetrics> fm;
|
||||
nsLayoutUtils::GetFontMetricsForFrame(this, getter_AddRefs(fm));
|
||||
renderingContext.SetFont(fm);
|
||||
|
||||
// For radical glyphs from TeX fonts and some of the radical glyphs from
|
||||
// Mathematica fonts, the thickness of the overline can be obtained from the
|
||||
|
|
|
@ -153,8 +153,8 @@ nsMathMLmsubFrame::PlaceSubScript (nsPresContext* aPresContext,
|
|||
// get min subscript shift limit from x-height
|
||||
// = h(x) - 4/5 * sigma_5, Rule 18b, App. G, TeXbook
|
||||
nscoord xHeight = 0;
|
||||
nsRefPtr<nsFontMetrics> fm =
|
||||
aPresContext->GetMetricsFor(baseFrame->GetStyleFont()->mFont);
|
||||
nsRefPtr<nsFontMetrics> fm;
|
||||
nsLayoutUtils::GetFontMetricsForFrame(baseFrame, getter_AddRefs(fm));
|
||||
|
||||
xHeight = fm->XHeight();
|
||||
nscoord minShiftFromXHeight = (nscoord)
|
||||
|
|
|
@ -193,9 +193,9 @@ nsMathMLmsubsupFrame::PlaceSubSupScript(nsPresContext* aPresContext,
|
|||
// subScriptShift1 = subscriptshift attribute * x-height
|
||||
nscoord subScriptShift1, subScriptShift2;
|
||||
|
||||
aRenderingContext.SetFont(baseFrame->GetStyleFont()->mFont,
|
||||
aPresContext->GetUserFontSet());
|
||||
nsFontMetrics* fm = aRenderingContext.FontMetrics();
|
||||
nsRefPtr<nsFontMetrics> fm;
|
||||
nsLayoutUtils::GetFontMetricsForFrame(baseFrame, getter_AddRefs(fm));
|
||||
aRenderingContext.SetFont(fm);
|
||||
|
||||
// get x-height (an ex)
|
||||
nscoord xHeight = fm->XHeight();
|
||||
|
|
|
@ -154,8 +154,8 @@ nsMathMLmsupFrame::PlaceSuperScript(nsPresContext* aPresContext,
|
|||
// get min supscript shift limit from x-height
|
||||
// = d(x) + 1/4 * sigma_5, Rule 18c, App. G, TeXbook
|
||||
nscoord xHeight = 0;
|
||||
nsRefPtr<nsFontMetrics> fm =
|
||||
aPresContext->GetMetricsFor(baseFrame->GetStyleFont()->mFont);
|
||||
nsRefPtr<nsFontMetrics> fm;
|
||||
nsLayoutUtils::GetFontMetricsForFrame(baseFrame, getter_AddRefs(fm));
|
||||
|
||||
xHeight = fm->XHeight();
|
||||
nscoord minShiftFromXHeight = (nscoord)
|
||||
|
|
|
@ -637,8 +637,9 @@ nsMathMLmtableOuterFrame::Reflow(nsPresContext* aPresContext,
|
|||
case eAlign_axis:
|
||||
default: {
|
||||
// XXX should instead use style data from the row of reference here ?
|
||||
aReflowState.rendContext->SetFont(GetStyleFont()->mFont,
|
||||
aPresContext->GetUserFontSet());
|
||||
nsRefPtr<nsFontMetrics> fm;
|
||||
nsLayoutUtils::GetFontMetricsForFrame(this, getter_AddRefs(fm));
|
||||
aReflowState.rendContext->SetFont(fm);
|
||||
nscoord axisHeight;
|
||||
GetAxisHeight(*aReflowState.rendContext,
|
||||
aReflowState.rendContext->FontMetrics(),
|
||||
|
|
|
@ -425,9 +425,9 @@ nsMathMLmunderoverFrame::Place(nsRenderingContext& aRenderingContext,
|
|||
////////////////////
|
||||
// Place Children
|
||||
|
||||
aRenderingContext.SetFont(GetStyleFont()->mFont,
|
||||
PresContext()->GetUserFontSet());
|
||||
nsFontMetrics* fm = aRenderingContext.FontMetrics();
|
||||
nsRefPtr<nsFontMetrics> fm;
|
||||
nsLayoutUtils::GetFontMetricsForFrame(this, getter_AddRefs(fm));
|
||||
aRenderingContext.SetFont(fm);
|
||||
|
||||
nscoord xHeight = fm->XHeight();
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче