Dmitry Timoshkov : gdiplus: Create 'const' friendly internal entries for font APIs.
Alexandre Julliard
julliard at winehq.org
Mon May 14 14:26:05 CDT 2012
Module: wine
Branch: master
Commit: 5e4d64d18ed02639d4fec534f5d9cf6f1425b9f8
URL: http://source.winehq.org/git/wine.git/?a=commit;h=5e4d64d18ed02639d4fec534f5d9cf6f1425b9f8
Author: Dmitry Timoshkov <dmitry at 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)
{
More information about the wine-cvs
mailing list