// lf->lfClipPrecision = 64;
}
-static SkTypeface::Style get_style(const LOGFONT& lf) {
- unsigned style = 0;
- if (lf.lfWeight >= FW_BOLD) {
- style |= SkTypeface::kBold;
- }
- if (lf.lfItalic) {
- style |= SkTypeface::kItalic;
- }
- return static_cast<SkTypeface::Style>(style);
-}
-
-static void setStyle(LOGFONT* lf, SkTypeface::Style style) {
- lf->lfWeight = (style & SkTypeface::kBold) != 0 ? FW_BOLD : FW_NORMAL ;
- lf->lfItalic = ((style & SkTypeface::kItalic) != 0);
+static SkFontStyle get_style(const LOGFONT& lf) {
+ return SkFontStyle(lf.lfWeight,
+ lf.lfWidth,
+ lf.lfItalic ? SkFontStyle::kItalic_Slant : SkFontStyle::kUpright_Slant);
}
static inline FIXED SkFixedToFIXED(SkFixed x) {
class LogFontTypeface : public SkTypeface {
public:
- LogFontTypeface(SkTypeface::Style style, SkFontID fontID, const LOGFONT& lf, bool serializeAsStream = false) :
- SkTypeface(style, fontID, false), fLogFont(lf), fSerializeAsStream(serializeAsStream) {
+ LogFontTypeface(const SkFontStyle& style, const LOGFONT& lf, bool serializeAsStream)
+ : SkTypeface(style, SkTypefaceCache::NewFontID(), false)
+ , fLogFont(lf)
+ , fSerializeAsStream(serializeAsStream)
+ {
// If the font has cubic outlines, it will not be rendered with ClearType.
HFONT font = CreateFontIndirect(&lf);
bool fCanBeLCD;
static LogFontTypeface* Create(const LOGFONT& lf) {
- SkTypeface::Style style = get_style(lf);
- SkFontID fontID = SkTypefaceCache::NewFontID();
- return new LogFontTypeface(style, fontID, lf);
+ return new LogFontTypeface(get_style(lf), lf, false);
}
static void EnsureAccessible(const SkTypeface* face) {
* The created FontMemResourceTypeface takes ownership of fontMemResource.
*/
static FontMemResourceTypeface* Create(const LOGFONT& lf, HANDLE fontMemResource) {
- SkTypeface::Style style = get_style(lf);
- SkFontID fontID = SkTypefaceCache::NewFontID();
- return new FontMemResourceTypeface(style, fontID, lf, fontMemResource);
+ return new FontMemResourceTypeface(get_style(lf), lf, fontMemResource);
}
protected:
/**
* Takes ownership of fontMemResource.
*/
- FontMemResourceTypeface(SkTypeface::Style style, SkFontID fontID, const LOGFONT& lf, HANDLE fontMemResource) :
- LogFontTypeface(style, fontID, lf, true), fFontMemResource(fontMemResource) {
- }
+ FontMemResourceTypeface(const SkFontStyle& style, const LOGFONT& lf, HANDLE fontMemResource)
+ : LogFontTypeface(style, lf, true), fFontMemResource(fontMemResource)
+ { }
HANDLE fFontMemResource;
return gDefaultFont;
}
-static bool FindByLogFont(SkTypeface* face, SkTypeface::Style requestedStyle, void* ctx) {
+static bool FindByLogFont(SkTypeface* face, const SkFontStyle& requestedStyle, void* ctx) {
LogFontTypeface* lface = static_cast<LogFontTypeface*>(face);
const LOGFONT* lf = reinterpret_cast<const LOGFONT*>(ctx);
SkTypeface* SkCreateFontMemResourceTypefaceFromLOGFONT(const LOGFONT& origLF, HANDLE fontMemResource) {
LOGFONT lf = origLF;
make_canonical(&lf);
- FontMemResourceTypeface* face = FontMemResourceTypeface::Create(lf, fontMemResource);
- SkTypefaceCache::Add(face, get_style(lf), false);
- return face;
+ // We'll never get a cache hit, so no point in putting this in SkTypefaceCache.
+ return FontMemResourceTypeface::Create(lf, fontMemResource);
}
/**
return 1; // non-zero means continue
}
-static SkFontStyle compute_fontstyle(const LOGFONT& lf) {
- return SkFontStyle(lf.lfWeight, SkFontStyle::kNormal_Width,
- lf.lfItalic ? SkFontStyle::kItalic_Slant
- : SkFontStyle::kUpright_Slant);
-}
-
class SkFontStyleSetGDI : public SkFontStyleSet {
public:
SkFontStyleSetGDI(const TCHAR familyName[]) {
virtual void getStyle(int index, SkFontStyle* fs, SkString* styleName) SK_OVERRIDE {
if (fs) {
- *fs = compute_fontstyle(fArray[index].elfLogFont);
+ *fs = get_style(fArray[index].elfLogFont);
}
if (styleName) {
const ENUMLOGFONTEX& ref = fArray[index];
} else {
logfont_for_name(familyName, &lf);
}
- setStyle(&lf, (SkTypeface::Style)styleBits);
+
+ SkTypeface::Style style = (SkTypeface::Style)styleBits;
+ lf.lfWeight = (style & SkTypeface::kBold) != 0 ? FW_BOLD : FW_NORMAL;
+ lf.lfItalic = ((style & SkTypeface::kItalic) != 0);
return SkCreateTypefaceFromLOGFONT(lf);
}