gdiplus: Better implementation of GdipGetFontHeightGivenDPI.

This commit is contained in:
Hans Leidekker 2008-11-28 17:30:48 +01:00 committed by Alexandre Julliard
parent aa5358fdae
commit 8656f6db50
2 changed files with 24 additions and 1 deletions

View File

@ -153,6 +153,8 @@ GpStatus WINGDIPAPI GdipCreateFont(GDIPCONST GpFontFamily *fontFamily,
(*font)->unit = unit;
(*font)->emSize = emSize;
(*font)->height = tmw->ntmSizeEM;
(*font)->line_spacing = tmw->tmAscent + tmw->tmDescent + tmw->tmExternalLeading;
return Ok;
}
@ -194,6 +196,9 @@ GpStatus WINGDIPAPI GdipCreateFontFromLogfontW(HDC hdc,
(*font)->lfw.lfHeight = -textmet.tmHeight;
(*font)->lfw.lfWeight = textmet.tmWeight;
(*font)->height = 1; /* FIXME: need NEWTEXTMETRIC.ntmSizeEM here */
(*font)->line_spacing = textmet.tmAscent + textmet.tmDescent + textmet.tmExternalLeading;
SelectObject(hdc, oldfont);
DeleteObject(hfont);
@ -444,15 +449,31 @@ GpStatus WINGDIPAPI GdipGetFontHeight(GDIPCONST GpFont *font,
*/
GpStatus WINGDIPAPI GdipGetFontHeightGivenDPI(GDIPCONST GpFont *font, REAL dpi, REAL *height)
{
REAL font_height;
TRACE("%p (%s), %f, %p\n", font,
debugstr_w(font->lfw.lfFaceName), dpi, height);
if (!(font && height)) return InvalidParameter;
font_height = font->line_spacing * (font->emSize / font->height);
switch (font->unit)
{
case UnitPixel:
*height = font->emSize;
*height = font_height;
break;
case UnitPoint:
*height = font_height * dpi * inch_per_point;
break;
case UnitInch:
*height = font_height * dpi;
break;
case UnitDocument:
*height = font_height * (dpi / 300.0);
break;
case UnitMillimeter:
*height = font_height * (dpi / mm_per_inch);
break;
default:
FIXME("Unhandled unit type: %d\n", font->unit);

View File

@ -209,6 +209,8 @@ struct GpImageAttributes{
struct GpFont{
LOGFONTW lfw;
REAL emSize;
UINT height;
LONG line_spacing;
Unit unit;
};