/**************************************************************************\ * * Copyright (c) 1998-2000, Microsoft Corp. All Rights Reserved. * * Abstract: * * Font related declarations * * Revision History: * * 05/06/1999 ikkof * Created it. * 22/July/1999 Xudong Wu [tessiew] * Modified it. * \**************************************************************************/ #ifndef _GDIPLUSFONT_H #define _GDIPLUSFONT_H inline Font::Font(IN HDC hdc) { GpFont *font = NULL; lastResult = DllExports::GdipCreateFontFromDC(hdc, &font); #ifndef DCR_USE_NEW_135429 if ((INT) lastResult >= 10) lastResult = NotFound; #endif 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); } #ifndef DCR_USE_NEW_135429 if ((INT) lastResult >= 10) lastResult = NotFound; #endif SetNativeFont(font); } inline Font::Font(IN HDC hdc, IN const LOGFONTA* logfont) { GpFont *font = NULL; lastResult = DllExports::GdipCreateFontFromLogfontA(hdc, logfont, &font); if (logfont) { lastResult = DllExports::GdipCreateFontFromLogfontA(hdc, logfont, &font); } else { lastResult = DllExports::GdipCreateFontFromDC(hdc, &font); } #ifndef DCR_USE_NEW_135429 if ((INT) lastResult >= 10) lastResult = NotFound; #endif 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->nativeFamily, emSize, style, unit, &font); #ifndef DCR_USE_NEW_135429 if ((INT) lastResult >= 10) lastResult = NotFound; #endif SetNativeFont(font); } inline Font::Font( IN const WCHAR * familyName, IN REAL emSize, IN INT style, IN Unit unit, IN const FontCollection * fontCollection ) { FontFamily family(familyName, fontCollection); GpFont * font = NULL; lastResult = family.GetLastStatus(); if (lastResult == Ok) { lastResult = DllExports::GdipCreateFont(family.nativeFamily, emSize, style, unit, &font); } #ifndef DCR_USE_NEW_135429 if ((INT) lastResult >= 10) lastResult = NotFound; #endif SetNativeFont(font); } inline Status Font::GetLogFontA(IN const Graphics *g, OUT LOGFONTA *logfontA) const { return SetStatus(DllExports::GdipGetLogFontA(nativeFont, g->nativeGraphics, logfontA)); } inline Status Font::GetLogFontW(IN const Graphics *g, OUT LOGFONTW *logfontW) const { return SetStatus(DllExports::GdipGetLogFontW(nativeFont, g->nativeGraphics, 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; } // protected method inline Font::Font(IN GpFont* font, IN Status status) { lastResult = status; SetNativeFont(font); } // protected method inline VOID Font::SetNativeFont(GpFont *Font) { nativeFont = Font; } inline Status Font::GetLastStatus(void) const { return lastResult; } // protected method inline Status Font::SetStatus(IN Status status) const { if (status != Ok) return (lastResult = status); else return status; } #endif