1 /**************************************************************************\ 2 * 3 * Copyright (c) 1998-2000, Microsoft Corp. All Rights Reserved. 4 * 5 * Module Name: 6 * 7 * GdiplusFontFamily.h 8 * 9 * Abstract: 10 * 11 * Font family API related declarations 12 * 13 \**************************************************************************/ 14 15 #ifndef _GDIPLUS_FONT_FAMILY_H 16 #define _GDIPLUS_FONT_FAMILY_H 17 18 inline 19 FontFamily::FontFamily() : 20 nativeFamily (NULL), 21 lastResult (Ok) 22 { 23 } 24 25 inline 26 FontFamily::FontFamily( 27 IN const WCHAR* name, 28 IN const FontCollection* fontCollection 29 ) 30 { 31 nativeFamily = NULL; 32 lastResult = DllExports::GdipCreateFontFamilyFromName( 33 name, 34 fontCollection ? fontCollection->nativeFontCollection : NULL, 35 &nativeFamily 36 ); 37 38 #ifndef DCR_USE_NEW_135429 39 if ((INT) lastResult >= 10) 40 lastResult = NotFound; 41 #endif 42 } 43 44 // private method 45 inline 46 FontFamily::FontFamily( 47 IN GpFontFamily *nativeOrig, 48 IN Status status 49 ) 50 { 51 lastResult = status; 52 nativeFamily = nativeOrig; 53 } 54 55 // Generic font family access 56 57 inline const FontFamily * 58 FontFamily::GenericSansSerif() 59 { 60 if (GenericSansSerifFontFamily != NULL) 61 { 62 return GenericSansSerifFontFamily; 63 } 64 65 GenericSansSerifFontFamily = 66 (FontFamily*) GenericSansSerifFontFamilyBuffer; 67 68 GenericSansSerifFontFamily->lastResult = 69 DllExports::GdipGetGenericFontFamilySansSerif( 70 &(GenericSansSerifFontFamily->nativeFamily) 71 ); 72 73 #ifndef DCR_USE_NEW_135429 74 if ((INT) GenericSansSerifFontFamily->lastResult >= 10) 75 GenericSansSerifFontFamily->lastResult = NotFound; 76 #endif 77 78 return GenericSansSerifFontFamily; 79 } 80 81 inline const FontFamily * 82 FontFamily::GenericSerif() 83 { 84 if (GenericSerifFontFamily != NULL) 85 { 86 return GenericSerifFontFamily; 87 } 88 89 GenericSerifFontFamily = 90 (FontFamily*) GenericSerifFontFamilyBuffer; 91 92 GenericSerifFontFamily->lastResult = 93 DllExports::GdipGetGenericFontFamilySerif( 94 &(GenericSerifFontFamily->nativeFamily) 95 ); 96 97 #ifndef DCR_USE_NEW_135429 98 if ((INT) GenericSerifFontFamily->lastResult >= 10) 99 GenericSerifFontFamily->lastResult = NotFound; 100 #endif 101 102 return GenericSerifFontFamily; 103 } 104 105 inline const FontFamily * 106 FontFamily::GenericMonospace() 107 { 108 if (GenericMonospaceFontFamily != NULL) 109 { 110 return GenericMonospaceFontFamily; 111 } 112 113 GenericMonospaceFontFamily = 114 (FontFamily*) GenericMonospaceFontFamilyBuffer; 115 116 GenericMonospaceFontFamily->lastResult = 117 DllExports::GdipGetGenericFontFamilyMonospace( 118 &(GenericMonospaceFontFamily->nativeFamily) 119 ); 120 121 #ifndef DCR_USE_NEW_135429 122 if ((INT) GenericMonospaceFontFamily->lastResult >= 10) 123 GenericMonospaceFontFamily->lastResult = NotFound; 124 #endif 125 126 return GenericMonospaceFontFamily; 127 } 128 129 inline FontFamily::~FontFamily() 130 { 131 DllExports::GdipDeleteFontFamily (nativeFamily); 132 } 133 134 inline FontFamily * 135 FontFamily::Clone() const 136 { 137 GpFontFamily * clonedFamily = NULL; 138 139 SetStatus(DllExports::GdipCloneFontFamily (nativeFamily, &clonedFamily)); 140 141 return new FontFamily(clonedFamily, lastResult); 142 } 143 144 inline Status 145 FontFamily::GetFamilyName( 146 IN WCHAR name[LF_FACESIZE], 147 IN LANGID language 148 ) const 149 { 150 return SetStatus(DllExports::GdipGetFamilyName(nativeFamily, 151 name, 152 language)); 153 } 154 155 inline BOOL 156 FontFamily::IsStyleAvailable(IN INT style) const 157 { 158 BOOL StyleAvailable; 159 Status status; 160 161 status = SetStatus(DllExports::GdipIsStyleAvailable(nativeFamily, style, &StyleAvailable)); 162 163 if (status != Ok) 164 StyleAvailable = FALSE; 165 166 return StyleAvailable; 167 } 168 169 170 inline UINT16 171 FontFamily::GetEmHeight(IN INT style) const 172 { 173 UINT16 EmHeight; 174 175 SetStatus(DllExports::GdipGetEmHeight(nativeFamily, style, &EmHeight)); 176 177 return EmHeight; 178 } 179 180 inline UINT16 181 FontFamily::GetCellAscent(IN INT style) const 182 { 183 UINT16 CellAscent; 184 185 SetStatus(DllExports::GdipGetCellAscent(nativeFamily, style, &CellAscent)); 186 187 return CellAscent; 188 } 189 190 inline UINT16 191 FontFamily::GetCellDescent(IN INT style) const 192 { 193 UINT16 CellDescent; 194 195 SetStatus(DllExports::GdipGetCellDescent(nativeFamily, style, &CellDescent)); 196 197 return CellDescent; 198 } 199 200 201 inline UINT16 202 FontFamily::GetLineSpacing(IN INT style) const 203 { 204 UINT16 LineSpacing; 205 206 SetStatus(DllExports::GdipGetLineSpacing(nativeFamily, style, &LineSpacing)); 207 208 return LineSpacing; 209 210 } 211 212 #ifdef TEXTV2 213 214 // The following APIs return data from the font OS/2 table 215 216 inline INT16 217 FontFamily::GetTypographicAscent(IN INT style) const 218 { 219 INT16 TypographicAscent; 220 221 SetStatus(DllExports::GdipGetTypographicAscent(nativeFamily, style, &TypographicAscent)); 222 223 return TypographicAscent; 224 } 225 226 inline INT16 227 FontFamily::GetTypographicDescent(IN INT style) const 228 { 229 INT16 TypographicDescent; 230 231 SetStatus(DllExports::GdipGetTypographicDescent(nativeFamily, style, &TypographicDescent)); 232 233 return TypographicDescent; 234 } 235 236 inline INT16 237 FontFamily::GetTypographicLineGap(IN INT style) const 238 { 239 INT16 TypographicLineGap; 240 241 SetStatus(DllExports::GdipGetTypographicLineGap(nativeFamily, style, &TypographicLineGap)); 242 243 return TypographicLineGap; 244 } 245 246 #endif 247 248 /////////////////////////////////////////////////////////// 249 250 // GetLastStatus - return last error code and clear error code 251 252 inline Status 253 FontFamily::GetLastStatus() const 254 { 255 Status lastStatus = lastResult; 256 lastResult = Ok; 257 258 return lastStatus; 259 } 260 261 // protected method 262 inline Status 263 FontFamily::SetStatus(Status status) const 264 { 265 if (status != Ok) 266 return (lastResult = status); 267 else 268 return status; 269 } 270 271 #endif 272