зеркало из https://github.com/mozilla/gecko-dev.git
Instantiate the unknown glyph font (mini-font) lazily, since it's usually not needed at all. Bug 226406, r/sr=dbaron, a=asa.
This commit is contained in:
Родитель
481c06ff09
Коммит
b0a5c8b172
|
@ -521,9 +521,6 @@ nsFontMetricsXft::Init(const nsFont& aFont, nsIAtom* aLangGroup,
|
||||||
if (NS_FAILED(RealizeFont()))
|
if (NS_FAILED(RealizeFont()))
|
||||||
return NS_ERROR_FAILURE;
|
return NS_ERROR_FAILURE;
|
||||||
|
|
||||||
// Set up the mini-font in case it needs to be used later
|
|
||||||
SetupMiniFont();
|
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1342,6 +1339,10 @@ nsFontMetricsXft::RawGetWidth(const PRUnichar* aString, PRUint32 aLength)
|
||||||
nsresult
|
nsresult
|
||||||
nsFontMetricsXft::SetupMiniFont(void)
|
nsFontMetricsXft::SetupMiniFont(void)
|
||||||
{
|
{
|
||||||
|
// The minifont is initialized lazily.
|
||||||
|
if (mMiniFont)
|
||||||
|
return NS_OK;
|
||||||
|
|
||||||
FcPattern *pattern = nsnull;
|
FcPattern *pattern = nsnull;
|
||||||
XftFont *font = nsnull;
|
XftFont *font = nsnull;
|
||||||
XftFont *xftFont = mWesternFont->GetXftFont();
|
XftFont *xftFont = mWesternFont->GetXftFont();
|
||||||
|
@ -1624,6 +1625,7 @@ nsFontMetricsXft::DrawStringCallback(const FcChar32 *aString, PRUint32 aLen,
|
||||||
data->context->GetTranMatrix()->TransformCoord(&x, &y);
|
data->context->GetTranMatrix()->TransformCoord(&x, &y);
|
||||||
|
|
||||||
NS_ASSERTION(aLen == 1, "An unknown glyph should come by itself");
|
NS_ASSERTION(aLen == 1, "An unknown glyph should come by itself");
|
||||||
|
SetupMiniFont();
|
||||||
DrawUnknownGlyph(*aString, x, y + mMiniFontYOffset, &data->color,
|
DrawUnknownGlyph(*aString, x, y + mMiniFontYOffset, &data->color,
|
||||||
data->draw);
|
data->draw);
|
||||||
|
|
||||||
|
@ -1656,6 +1658,7 @@ nsFontMetricsXft::TextDimensionsCallback(const FcChar32 *aString, PRUint32 aLen,
|
||||||
|
|
||||||
if (!aFont) {
|
if (!aFont) {
|
||||||
NS_ASSERTION(aLen == 1, "An unknown glyph should come by itself");
|
NS_ASSERTION(aLen == 1, "An unknown glyph should come by itself");
|
||||||
|
SetupMiniFont();
|
||||||
data->dimensions->width +=
|
data->dimensions->width +=
|
||||||
mMiniFontWidth * (IS_NON_BMP(*aString) ? 3 : 2) +
|
mMiniFontWidth * (IS_NON_BMP(*aString) ? 3 : 2) +
|
||||||
mMiniFontPadding * (IS_NON_BMP(*aString) ? 6 : 5);
|
mMiniFontPadding * (IS_NON_BMP(*aString) ? 6 : 5);
|
||||||
|
@ -1695,6 +1698,7 @@ nsFontMetricsXft::GetWidthCallback(const FcChar32 *aString, PRUint32 aLen,
|
||||||
|
|
||||||
if (!aFont) {
|
if (!aFont) {
|
||||||
NS_ASSERTION(aLen == 1, "An unknown glyph should come by itself");
|
NS_ASSERTION(aLen == 1, "An unknown glyph should come by itself");
|
||||||
|
SetupMiniFont();
|
||||||
data->width += mMiniFontWidth * (IS_NON_BMP(*aString) ? 3 : 2) +
|
data->width += mMiniFontWidth * (IS_NON_BMP(*aString) ? 3 : 2) +
|
||||||
mMiniFontPadding * (IS_NON_BMP(*aString) ? 6 : 5);
|
mMiniFontPadding * (IS_NON_BMP(*aString) ? 6 : 5);
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
|
@ -1715,6 +1719,7 @@ nsFontMetricsXft::BoundingMetricsCallback(const FcChar32 *aString,
|
||||||
|
|
||||||
if (!aFont) {
|
if (!aFont) {
|
||||||
NS_ASSERTION(aLen == 1, "An unknown glyph should come by itself");
|
NS_ASSERTION(aLen == 1, "An unknown glyph should come by itself");
|
||||||
|
SetupMiniFont();
|
||||||
bm.width = mMiniFontWidth * (IS_NON_BMP(*aString) ? 3 : 2) +
|
bm.width = mMiniFontWidth * (IS_NON_BMP(*aString) ? 3 : 2) +
|
||||||
mMiniFontPadding * (IS_NON_BMP(*aString) ? 6 : 5);
|
mMiniFontPadding * (IS_NON_BMP(*aString) ? 6 : 5);
|
||||||
bm.rightBearing = bm.width; // no need to set leftBearing.
|
bm.rightBearing = bm.width; // no need to set leftBearing.
|
||||||
|
|
Загрузка…
Ссылка в новой задаче