|
|
/**************************************************************************\
* * Copyright (c) 1998-2001, Microsoft Corp. All Rights Reserved. * * Module Name: * * GdiplusFont.h * * Abstract: * * GDI+ Font class * \**************************************************************************/
#ifndef _GDIPLUSFONT_H
#define _GDIPLUSFONT_H
inline Font::Font(IN HDC hdc) { GpFont *font = NULL; lastResult = DllExports::GdipCreateFontFromDC(hdc, &font);
SetNativeFont(font); }
inline Font::Font(IN HDC hdc, IN const HFONT hfont) { GpFont *font = NULL;
if (hfont) { LOGFONTA lf;
if(GetObjectA(hfont, sizeof(LOGFONTA), &lf)) lastResult = DllExports::GdipCreateFontFromLogfontA(hdc, &lf, &font); else lastResult = DllExports::GdipCreateFontFromDC(hdc, &font); } else { lastResult = DllExports::GdipCreateFontFromDC(hdc, &font); }
SetNativeFont(font); }
inline Font::Font(IN HDC hdc, IN const LOGFONTW* logfont) { GpFont *font = NULL; if (logfont) { lastResult = DllExports::GdipCreateFontFromLogfontW(hdc, logfont, &font); } else { lastResult = DllExports::GdipCreateFontFromDC(hdc, &font); }
SetNativeFont(font); }
inline Font::Font(IN HDC hdc, IN const LOGFONTA* logfont) { GpFont *font = NULL;
if (logfont) { lastResult = DllExports::GdipCreateFontFromLogfontA(hdc, logfont, &font); } else { lastResult = DllExports::GdipCreateFontFromDC(hdc, &font); }
SetNativeFont(font); }
inline Font::Font( IN const FontFamily * family, IN REAL emSize, IN INT style, IN Unit unit ) { GpFont *font = NULL;
lastResult = DllExports::GdipCreateFont(family ? family->nativeFamily : NULL, emSize, style, unit, &font);
SetNativeFont(font); }
inline Font::Font( IN const WCHAR * familyName, IN REAL emSize, IN INT style, IN Unit unit, IN const FontCollection * fontCollection ) { nativeFont = NULL;
FontFamily family(familyName, fontCollection); GpFontFamily *nativeFamily = family.nativeFamily;
lastResult = family.GetLastStatus();
if (lastResult != Ok) { nativeFamily = FontFamily::GenericSansSerif()->nativeFamily; lastResult = FontFamily::GenericSansSerif()->lastResult; if (lastResult != Ok) return; }
lastResult = DllExports::GdipCreateFont(nativeFamily, emSize, style, unit, &nativeFont);
if (lastResult != Ok) { nativeFamily = FontFamily::GenericSansSerif()->nativeFamily; lastResult = FontFamily::GenericSansSerif()->lastResult; if (lastResult != Ok) return;
lastResult = DllExports::GdipCreateFont( nativeFamily, emSize, style, unit, &nativeFont); } }
inline Status Font::GetLogFontA(IN const Graphics *g, OUT LOGFONTA *logfontA) const { return SetStatus(DllExports::GdipGetLogFontA(nativeFont, g ? g->nativeGraphics : NULL, logfontA));
}
inline Status Font::GetLogFontW(IN const Graphics *g, OUT LOGFONTW *logfontW) const { return SetStatus(DllExports::GdipGetLogFontW(nativeFont, g ? g->nativeGraphics : NULL, logfontW)); }
inline Font* Font::Clone() const { GpFont *cloneFont = NULL;
SetStatus(DllExports::GdipCloneFont(nativeFont, &cloneFont));
return new Font(cloneFont, lastResult); }
inline Font::~Font() { DllExports::GdipDeleteFont(nativeFont); }
// Operations
inline BOOL Font::IsAvailable() const { return (nativeFont ? TRUE : FALSE); }
inline Status Font::GetFamily(OUT FontFamily *family) const { if (family == NULL) { return SetStatus(InvalidParameter); }
Status status = DllExports::GdipGetFamily(nativeFont, &(family->nativeFamily)); family->SetStatus(status);
return SetStatus(status); }
inline INT Font::GetStyle() const { INT style;
SetStatus(DllExports::GdipGetFontStyle(nativeFont, &style));
return style; }
inline REAL Font::GetSize() const { REAL size; SetStatus(DllExports::GdipGetFontSize(nativeFont, &size)); return size; }
inline Unit Font::GetUnit() const { Unit unit; SetStatus(DllExports::GdipGetFontUnit(nativeFont, &unit)); return unit; }
inline REAL Font::GetHeight(IN const Graphics *graphics) const { REAL height; SetStatus(DllExports::GdipGetFontHeight( nativeFont, graphics ? graphics->nativeGraphics : NULL, &height )); return height; }
inline REAL Font::GetHeight(IN REAL dpi) const { REAL height; SetStatus(DllExports::GdipGetFontHeightGivenDPI(nativeFont, dpi, &height)); return height; }
inline Font::Font(IN GpFont* font, IN Status status) { lastResult = status; SetNativeFont(font); }
inline VOID Font::SetNativeFont(GpFont *Font) { nativeFont = Font; }
inline Status Font::GetLastStatus(void) const { return lastResult; }
inline Status Font::SetStatus(IN Status status) const { if (status != Ok) return (lastResult = status); else return status; }
#endif
|