[OS/2] Bug 432575: add options for font hinting and antialiasing to get approximately equal display than on branch.

This commit is contained in:
mozilla@weilbacher.org 2008-05-28 05:38:09 -07:00
parent 8c87d7cebd
commit e80bce4bc0
2 changed files with 31 additions and 2 deletions

View File

@ -79,6 +79,8 @@ private:
Metrics *mMetrics;
gfxFloat mAdjustedSize;
PRUint32 mSpaceGlyph;
int mHinting;
PRBool mAntialias;
};

View File

@ -47,6 +47,8 @@
#include "nsIServiceManager.h"
#include "nsIPlatformCharset.h"
#include "nsIPrefBranch.h"
#include "nsIPrefService.h"
/**********************************************************************
* class gfxOS2Font
@ -55,11 +57,29 @@
gfxOS2Font::gfxOS2Font(const nsAString &aName, const gfxFontStyle *aFontStyle)
: gfxFont(aName, aFontStyle),
mFontFace(nsnull), mScaledFont(nsnull),
mMetrics(nsnull), mAdjustedSize(0)
mMetrics(nsnull), mAdjustedSize(0),
mHinting(FC_HINT_MEDIUM), mAntialias(FcTrue)
{
#ifdef DEBUG_thebes_2
#if 1 //def DEBUG_thebes_2
printf("gfxOS2Font[%#x]::gfxOS2Font(\"%s\", aFontStyle)\n",
(unsigned)this, NS_LossyConvertUTF16toASCII(aName).get());
#endif
// try to get the preferences for hinting, antialias, and embolden options
nsCOMPtr<nsIPrefBranch> prefbranch = do_GetService(NS_PREFSERVICE_CONTRACTID);
if (prefbranch) {
int value;
nsresult rv = prefbranch->GetIntPref("gfx.os2.font.hinting", &value);
if (NS_SUCCEEDED(rv) && value >= FC_HINT_NONE && value <= FC_HINT_FULL)
mHinting = value;
PRBool enabled;
rv = prefbranch->GetBoolPref("gfx.os2.font.antialiasing", &enabled);
if (NS_SUCCEEDED(rv))
mAntialias = enabled;
}
#if 1 //def DEBUG_thebes_2
printf(" font display options: hinting=%d, antialiasing=%s\n",
mHinting, mAntialias ? "on" : "off");
#endif
}
@ -318,13 +338,20 @@ cairo_font_face_t *gfxOS2Font::CairoFontFace()
(char *)str2, w2, i2, s2);
#endif
FcPatternDestroy(fcPattern);
if (mName == NS_LITERAL_STRING("Workplace Sans") && fcW >= FC_WEIGHT_DEMIBOLD) {
// if we are dealing with Workplace Sans and want a bold font, we
// need to artificially embolden it (no bold counterpart yet)
FcPatternAddBool(fcMatch, FC_EMBOLDEN, FcTrue);
} else {
// if we don't embolden, we can possibly switch off antialiasing
FcPatternAddBool(fcMatch, FC_ANTIALIAS, mAntialias);
}
FcPatternAddInteger(fcMatch, FC_HINT_STYLE, mHinting);
// and ask cairo to return a font face for this
mFontFace = cairo_ft_font_face_create_for_pattern(fcMatch);
FcPatternDestroy(fcMatch);
}