/**************************************************************************\ * * Copyright (c) 1998-2000, Microsoft Corp. All Rights Reserved. * * Abstract: * * Font family API related declarations * * Revision History: * * * 06/30/1999 cameronb * Created it. * \**************************************************************************/ #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