| /**************************************************************************\ |
| * |
| * Copyright (c) 1998-2000, Microsoft Corp. All Rights Reserved. |
| * |
| * Module Name: |
| * |
| * GdiplusFontFamily.h |
| * |
| * Abstract: |
| * |
| * Font family API related declarations |
| * |
| \**************************************************************************/ |
| |
| #ifndef _GDIPLUS_FONT_FAMILY_H |
| #define _GDIPLUS_FONT_FAMILY_H |
| |
| inline |
| FontFamily::FontFamily() : |
| nativeFamily (NULL), |
| lastResult (Ok) |
| { |
| } |
| |
| inline |
| FontFamily::FontFamily( |
| IN const WCHAR* name, |
| IN const FontCollection* fontCollection |
| ) |
| { |
| nativeFamily = NULL; |
| lastResult = DllExports::GdipCreateFontFamilyFromName( |
| name, |
| fontCollection ? fontCollection->nativeFontCollection : NULL, |
| &nativeFamily |
| ); |
| |
| #ifndef DCR_USE_NEW_135429 |
| if ((INT) lastResult >= 10) |
| lastResult = NotFound; |
| #endif |
| } |
| |
| // private method |
| inline |
| FontFamily::FontFamily( |
| IN GpFontFamily *nativeOrig, |
| IN Status status |
| ) |
| { |
| lastResult = status; |
| nativeFamily = nativeOrig; |
| } |
| |
| // Generic font family access |
| |
| inline const FontFamily * |
| FontFamily::GenericSansSerif() |
| { |
| if (GenericSansSerifFontFamily != NULL) |
| { |
| return GenericSansSerifFontFamily; |
| } |
| |
| GenericSansSerifFontFamily = |
| (FontFamily*) GenericSansSerifFontFamilyBuffer; |
| |
| GenericSansSerifFontFamily->lastResult = |
| DllExports::GdipGetGenericFontFamilySansSerif( |
| &(GenericSansSerifFontFamily->nativeFamily) |
| ); |
| |
| #ifndef DCR_USE_NEW_135429 |
| if ((INT) GenericSansSerifFontFamily->lastResult >= 10) |
| GenericSansSerifFontFamily->lastResult = NotFound; |
| #endif |
| |
| return GenericSansSerifFontFamily; |
| } |
| |
| inline const FontFamily * |
| FontFamily::GenericSerif() |
| { |
| if (GenericSerifFontFamily != NULL) |
| { |
| return GenericSerifFontFamily; |
| } |
| |
| GenericSerifFontFamily = |
| (FontFamily*) GenericSerifFontFamilyBuffer; |
| |
| GenericSerifFontFamily->lastResult = |
| DllExports::GdipGetGenericFontFamilySerif( |
| &(GenericSerifFontFamily->nativeFamily) |
| ); |
| |
| #ifndef DCR_USE_NEW_135429 |
| if ((INT) GenericSerifFontFamily->lastResult >= 10) |
| GenericSerifFontFamily->lastResult = NotFound; |
| #endif |
| |
| return GenericSerifFontFamily; |
| } |
| |
| inline const FontFamily * |
| FontFamily::GenericMonospace() |
| { |
| if (GenericMonospaceFontFamily != NULL) |
| { |
| return GenericMonospaceFontFamily; |
| } |
| |
| GenericMonospaceFontFamily = |
| (FontFamily*) GenericMonospaceFontFamilyBuffer; |
| |
| GenericMonospaceFontFamily->lastResult = |
| DllExports::GdipGetGenericFontFamilyMonospace( |
| &(GenericMonospaceFontFamily->nativeFamily) |
| ); |
| |
| #ifndef DCR_USE_NEW_135429 |
| if ((INT) GenericMonospaceFontFamily->lastResult >= 10) |
| GenericMonospaceFontFamily->lastResult = NotFound; |
| #endif |
| |
| return GenericMonospaceFontFamily; |
| } |
| |
| inline FontFamily::~FontFamily() |
| { |
| DllExports::GdipDeleteFontFamily (nativeFamily); |
| } |
| |
| inline FontFamily * |
| FontFamily::Clone() const |
| { |
| GpFontFamily * clonedFamily = NULL; |
| |
| SetStatus(DllExports::GdipCloneFontFamily (nativeFamily, &clonedFamily)); |
| |
| return new FontFamily(clonedFamily, lastResult); |
| } |
| |
| inline Status |
| FontFamily::GetFamilyName( |
| IN WCHAR name[LF_FACESIZE], |
| IN LANGID language |
| ) const |
| { |
| return SetStatus(DllExports::GdipGetFamilyName(nativeFamily, |
| name, |
| language)); |
| } |
| |
| inline BOOL |
| FontFamily::IsStyleAvailable(IN INT style) const |
| { |
| BOOL StyleAvailable; |
| Status status; |
| |
| status = SetStatus(DllExports::GdipIsStyleAvailable(nativeFamily, style, &StyleAvailable)); |
| |
| if (status != Ok) |
| StyleAvailable = FALSE; |
| |
| return StyleAvailable; |
| } |
| |
| |
| inline UINT16 |
| FontFamily::GetEmHeight(IN INT style) const |
| { |
| UINT16 EmHeight; |
| |
| SetStatus(DllExports::GdipGetEmHeight(nativeFamily, style, &EmHeight)); |
| |
| return EmHeight; |
| } |
| |
| inline UINT16 |
| FontFamily::GetCellAscent(IN INT style) const |
| { |
| UINT16 CellAscent; |
| |
| SetStatus(DllExports::GdipGetCellAscent(nativeFamily, style, &CellAscent)); |
| |
| return CellAscent; |
| } |
| |
| inline UINT16 |
| FontFamily::GetCellDescent(IN INT style) const |
| { |
| UINT16 CellDescent; |
| |
| SetStatus(DllExports::GdipGetCellDescent(nativeFamily, style, &CellDescent)); |
| |
| return CellDescent; |
| } |
| |
| |
| inline UINT16 |
| FontFamily::GetLineSpacing(IN INT style) const |
| { |
| UINT16 LineSpacing; |
| |
| SetStatus(DllExports::GdipGetLineSpacing(nativeFamily, style, &LineSpacing)); |
| |
| return LineSpacing; |
| |
| } |
| |
| #ifdef TEXTV2 |
| |
| // The following APIs return data from the font OS/2 table |
| |
| inline INT16 |
| FontFamily::GetTypographicAscent(IN INT style) const |
| { |
| INT16 TypographicAscent; |
| |
| SetStatus(DllExports::GdipGetTypographicAscent(nativeFamily, style, &TypographicAscent)); |
| |
| return TypographicAscent; |
| } |
| |
| inline INT16 |
| FontFamily::GetTypographicDescent(IN INT style) const |
| { |
| INT16 TypographicDescent; |
| |
| SetStatus(DllExports::GdipGetTypographicDescent(nativeFamily, style, &TypographicDescent)); |
| |
| return TypographicDescent; |
| } |
| |
| inline INT16 |
| FontFamily::GetTypographicLineGap(IN INT style) const |
| { |
| INT16 TypographicLineGap; |
| |
| SetStatus(DllExports::GdipGetTypographicLineGap(nativeFamily, style, &TypographicLineGap)); |
| |
| return TypographicLineGap; |
| } |
| |
| #endif |
| |
| /////////////////////////////////////////////////////////// |
| |
| // GetLastStatus - return last error code and clear error code |
| |
| inline Status |
| FontFamily::GetLastStatus() const |
| { |
| Status lastStatus = lastResult; |
| lastResult = Ok; |
| |
| return lastStatus; |
| } |
| |
| // protected method |
| inline Status |
| FontFamily::SetStatus(Status status) const |
| { |
| if (status != Ok) |
| return (lastResult = status); |
| else |
| return status; |
| } |
| |
| #endif |