262 lines
4.9 KiB
C
262 lines
4.9 KiB
C
/**************************************************************************\
|
|
*
|
|
* 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
|