Module: wine Branch: master Commit: 5e4d64d18ed02639d4fec534f5d9cf6f1425b9f8 URL: http://source.winehq.org/git/wine.git/?a=commit;h=5e4d64d18ed02639d4fec534f5...
Author: Dmitry Timoshkov dmitry@baikal.ru Date: Sat May 12 15:23:12 2012 +0900
gdiplus: Create 'const' friendly internal entries for font APIs.
---
dlls/gdiplus/font.c | 102 +++++++++++++++++++++++++-------------- dlls/gdiplus/gdiplus_private.h | 2 + dlls/gdiplus/graphics.c | 5 +- dlls/gdiplus/graphicspath.c | 3 +- 4 files changed, 70 insertions(+), 42 deletions(-)
diff --git a/dlls/gdiplus/font.c b/dlls/gdiplus/font.c index 4b059a0..70ddef6 100644 --- a/dlls/gdiplus/font.c +++ b/dlls/gdiplus/font.c @@ -116,6 +116,8 @@ typedef struct #define MS_OS2_TAG MS_MAKE_TAG('O','S','/','2') #define MS_HHEA_TAG MS_MAKE_TAG('h','h','e','a')
+static GpStatus clone_font_family(const GpFontFamily *, GpFontFamily **); + static const REAL mm_per_inch = 25.4; static const REAL inch_per_point = 1.0/72.0;
@@ -216,7 +218,7 @@ GpStatus WINGDIPAPI GdipCreateFont(GDIPCONST GpFontFamily *fontFamily, (*font)->emSize = emSize; (*font)->otm = otm;
- stat = GdipCloneFontFamily((GpFontFamily *)fontFamily, &(*font)->family); + stat = clone_font_family(fontFamily, &(*font)->family); if (stat != Ok) { GdipFree(*font); @@ -355,6 +357,11 @@ GpStatus WINGDIPAPI GdipGetFamily(GpFont *font, GpFontFamily **family) return GdipCloneFontFamily(font->family, family); }
+static REAL get_font_size(const GpFont *font) +{ + return font->emSize; +} + /****************************************************************************** * GdipGetFontSize [GDIPLUS.@] * @@ -377,12 +384,30 @@ GpStatus WINGDIPAPI GdipGetFontSize(GpFont *font, REAL *size)
if (!(font && size)) return InvalidParameter;
- *size = font->emSize; + *size = get_font_size(font); TRACE("%s,%d => %f\n", debugstr_w(font->family->FamilyName), font->otm.otmTextMetrics.tmHeight, *size);
return Ok; }
+static INT get_font_style(const GpFont *font) +{ + INT style; + + if (font->otm.otmTextMetrics.tmWeight > FW_REGULAR) + style = FontStyleBold; + else + style = FontStyleRegular; + if (font->otm.otmTextMetrics.tmItalic) + style |= FontStyleItalic; + if (font->otm.otmTextMetrics.tmUnderlined) + style |= FontStyleUnderline; + if (font->otm.otmTextMetrics.tmStruckOut) + style |= FontStyleStrikeout; + + return style; +} + /******************************************************************************* * GdipGetFontStyle [GDIPLUS.@] * @@ -403,16 +428,8 @@ GpStatus WINGDIPAPI GdipGetFontStyle(GpFont *font, INT *style) if (!(font && style)) return InvalidParameter;
- if (font->otm.otmTextMetrics.tmWeight > FW_REGULAR) - *style = FontStyleBold; - else - *style = FontStyleRegular; - if (font->otm.otmTextMetrics.tmItalic) - *style |= FontStyleItalic; - if (font->otm.otmTextMetrics.tmUnderlined) - *style |= FontStyleUnderline; - if (font->otm.otmTextMetrics.tmStruckOut) - *style |= FontStyleStrikeout; + *style = get_font_style(font); + TRACE("%s,%d => %d\n", debugstr_w(font->family->FamilyName), font->otm.otmTextMetrics.tmHeight, *style);
return Ok; } @@ -463,6 +480,25 @@ GpStatus WINGDIPAPI GdipGetLogFontA(GpFont *font, GpGraphics *graphics, return Ok; }
+void get_log_fontW(const GpFont *font, GpGraphics *graphics, LOGFONTW *lf) +{ + /* FIXME: use graphics */ + lf->lfHeight = -font->otm.otmTextMetrics.tmAscent; + lf->lfWidth = 0; + lf->lfEscapement = 0; + lf->lfOrientation = 0; + lf->lfWeight = font->otm.otmTextMetrics.tmWeight; + lf->lfItalic = font->otm.otmTextMetrics.tmItalic ? 1 : 0; + lf->lfUnderline = font->otm.otmTextMetrics.tmUnderlined ? 1 : 0; + lf->lfStrikeOut = font->otm.otmTextMetrics.tmStruckOut ? 1 : 0; + lf->lfCharSet = font->otm.otmTextMetrics.tmCharSet; + lf->lfOutPrecision = OUT_DEFAULT_PRECIS; + lf->lfClipPrecision = CLIP_DEFAULT_PRECIS; + lf->lfQuality = DEFAULT_QUALITY; + lf->lfPitchAndFamily = 0; + strcpyW(lf->lfFaceName, font->family->FamilyName); +} + /******************************************************************************* * GdipGetLogFontW [GDIPLUS.@] */ @@ -471,25 +507,10 @@ GpStatus WINGDIPAPI GdipGetLogFontW(GpFont *font, GpGraphics *graphics, { TRACE("(%p, %p, %p)\n", font, graphics, lfw);
- /* FIXME: use graphics */ if(!font || !graphics || !lfw) return InvalidParameter;
- lfw->lfHeight = -font->otm.otmTextMetrics.tmAscent; - lfw->lfWidth = 0; - lfw->lfEscapement = 0; - lfw->lfOrientation = 0; - lfw->lfWeight = font->otm.otmTextMetrics.tmWeight; - lfw->lfItalic = font->otm.otmTextMetrics.tmItalic ? 1 : 0; - lfw->lfUnderline = font->otm.otmTextMetrics.tmUnderlined ? 1 : 0; - lfw->lfStrikeOut = font->otm.otmTextMetrics.tmStruckOut ? 1 : 0; - lfw->lfCharSet = font->otm.otmTextMetrics.tmCharSet; - lfw->lfOutPrecision = OUT_DEFAULT_PRECIS; - lfw->lfClipPrecision = CLIP_DEFAULT_PRECIS; - lfw->lfQuality = DEFAULT_QUALITY; - lfw->lfPitchAndFamily = 0; - strcpyW(lfw->lfFaceName, font->family->FamilyName); - + get_log_fontW(font, graphics, lfw); TRACE("=> %s,%d\n", debugstr_w(lfw->lfFaceName), lfw->lfHeight);
return Ok; @@ -576,10 +597,8 @@ GpStatus WINGDIPAPI GdipGetFontHeightGivenDPI(GDIPCONST GpFont *font, REAL dpi, TRACE("%p (%s), %f, %p\n", font, debugstr_w(font->family->FamilyName), dpi, height);
- stat = GdipGetFontSize((GpFont *)font, &font_size); - if (stat != Ok) return stat; - stat = GdipGetFontStyle((GpFont *)font, &style); - if (stat != Ok) return stat; + font_size = get_font_size(font); + style = get_font_style(font); stat = GdipGetLineSpacing(font->family, style, &line_spacing); if (stat != Ok) return stat; stat = GdipGetEmHeight(font->family, style, &em_height); @@ -764,6 +783,16 @@ GpStatus WINGDIPAPI GdipCreateFontFamilyFromName(GDIPCONST WCHAR *name, return Ok; }
+static GpStatus clone_font_family(const GpFontFamily *family, GpFontFamily **clone) +{ + *clone = GdipAlloc(sizeof(GpFontFamily)); + if (!*clone) return OutOfMemory; + + **clone = *family; + + return Ok; +} + /******************************************************************************* * GdipCloneFontFamily [GDIPLUS.@] * @@ -778,16 +807,15 @@ GpStatus WINGDIPAPI GdipCreateFontFamilyFromName(GDIPCONST WCHAR *name, */ GpStatus WINGDIPAPI GdipCloneFontFamily(GpFontFamily* FontFamily, GpFontFamily** clonedFontFamily) { + GpStatus status; + if (!(FontFamily && clonedFontFamily)) return InvalidParameter;
TRACE("%p (%s), %p\n", FontFamily, debugstr_w(FontFamily->FamilyName), clonedFontFamily);
- *clonedFontFamily = GdipAlloc(sizeof(GpFontFamily)); - if (!*clonedFontFamily) return OutOfMemory; - - **clonedFontFamily = *FontFamily; - lstrcpyW((*clonedFontFamily)->FamilyName, FontFamily->FamilyName); + status = clone_font_family(FontFamily, clonedFontFamily); + if (status != Ok) return status;
TRACE("<-- %p\n", *clonedFontFamily);
diff --git a/dlls/gdiplus/gdiplus_private.h b/dlls/gdiplus/gdiplus_private.h index 1adfe09..df66903 100644 --- a/dlls/gdiplus/gdiplus_private.h +++ b/dlls/gdiplus/gdiplus_private.h @@ -436,4 +436,6 @@ GpStatus gdip_format_string(HDC hdc, GDIPCONST RectF *rect, GDIPCONST GpStringFormat *format, gdip_format_string_callback callback, void *user_data) DECLSPEC_HIDDEN;
+void get_log_fontW(const GpFont *, GpGraphics *, LOGFONTW *) DECLSPEC_HIDDEN; + #endif diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c index 38335a8..e352e42 100644 --- a/dlls/gdiplus/graphics.c +++ b/dlls/gdiplus/graphics.c @@ -2136,7 +2136,7 @@ void get_font_hfont(GpGraphics *graphics, GDIPCONST GpFont *font, HFONT *hfont) rel_height = sqrt((pt[2].Y-pt[0].Y)*(pt[2].Y-pt[0].Y)+ (pt[2].X-pt[0].X)*(pt[2].X-pt[0].X));
- GdipGetLogFontW((GpFont *)font, graphics, &lfw); + get_log_fontW(font, graphics, &lfw); lfw.lfHeight = roundr(lfw.lfHeight * rel_height); unscaled_font = CreateFontIndirectW(&lfw);
@@ -4931,8 +4931,7 @@ GpStatus WINGDIPAPI GdipMeasureCharacterRanges(GpGraphics* graphics, if (regionCount < stringFormat->range_count) return InvalidParameter;
- stat = GdipGetLogFontW((GpFont *)font, graphics, &lfw); - if (stat != Ok) return stat; + get_log_fontW(font, graphics, &lfw);
if(!graphics->hdc) { diff --git a/dlls/gdiplus/graphicspath.c b/dlls/gdiplus/graphicspath.c index 5da53b2..25cf6be 100644 --- a/dlls/gdiplus/graphicspath.c +++ b/dlls/gdiplus/graphicspath.c @@ -957,8 +957,7 @@ GpStatus WINGDIPAPI GdipAddPathString(GpPath* path, GDIPCONST WCHAR* string, INT if (status != Ok) return status;
- status = GdipGetLogFontW((GpFont *)font, NULL, &lfw); - if (status != Ok) return status; + get_log_fontW(font, NULL, &lfw); hfont = CreateFontIndirectW(&lfw); if (!hfont) {