| /**************************************************************************\ |
| * |
| * Copyright (c) 1998-2000, Microsoft Corp. All Rights Reserved. |
| * |
| * Module Name: |
| * |
| * GdiplusFont.h |
| * |
| * Abstract: |
| * |
| * Font related declarations |
| * |
| \**************************************************************************/ |
| |
| #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); |
| } |
| |
| #ifdef DCR_USE_NEW_127084 |
| 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); |
| } |
| |
| #ifndef DCR_USE_NEW_135429 |
| if ((INT) lastResult >= 10) |
| lastResult = NotFound; |
| #endif |
| |
| SetNativeFont(font); |
| } |
| #endif |
| |
| 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; |
| |
| 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 ? family->nativeFamily : NULL, |
| 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 ? 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; |
| } |
| |
| |
| #ifdef DCR_USE_NEW_125467 |
| inline REAL |
| Font::GetHeight(IN REAL dpi = 0) const |
| { |
| REAL height; |
| SetStatus(DllExports::GdipGetFontHeightGivenDPI(nativeFont, dpi, &height)); |
| return height; |
| } |
| #endif |
| |
| |
| // 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 |