Module: wine Branch: master Commit: ba79c19d09a5943c80033f1896a10fe86448c13f URL: http://source.winehq.org/git/wine.git/?a=commit;h=ba79c19d09a5943c80033f1896...
Author: Akihiro Sagawa sagawa.aki@gmail.com Date: Wed Jan 13 23:09:09 2016 +0900
gdi32: Return an boolean value whether synthesizing bold glyph is success.
Signed-off-by: Akihiro Sagawa sagawa.aki@gmail.com Signed-off-by: Huw Davies huw@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/gdi32/freetype.c | 52 ++++++++++++++++++++++----------------------------- 1 file changed, 22 insertions(+), 30 deletions(-)
diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c index a5b320b..569dc02 100644 --- a/dlls/gdi32/freetype.c +++ b/dlls/gdi32/freetype.c @@ -6400,40 +6400,32 @@ static inline FT_Vector normalize_vector(FT_Vector *vec) return out; }
-static void synthesize_bold_glyph(FT_GlyphSlot glyph, LONG ppem, FT_Glyph_Metrics *metrics) +static BOOL get_bold_glyph_outline(FT_GlyphSlot glyph, LONG ppem, FT_Glyph_Metrics *metrics) { FT_Error err; - static UINT once; + FT_Pos strength; + FT_BBox bbox;
- switch(glyph->format) { - case FT_GLYPH_FORMAT_OUTLINE: - { - FT_Pos strength; - FT_BBox bbox; - if(!pFT_Outline_Embolden) - break; - - strength = MulDiv(ppem, 1 << 6, 24); - err = pFT_Outline_Embolden(&glyph->outline, strength); - if(err) { - TRACE("FT_Ouline_Embolden returns %d, ignored\n", err); - break; - } + if(glyph->format != FT_GLYPH_FORMAT_OUTLINE) + return FALSE; + if(!pFT_Outline_Embolden) + return FALSE;
- pFT_Outline_Get_CBox(&glyph->outline, &bbox); - metrics->width = bbox.xMax - bbox.xMin; - metrics->height = bbox.yMax - bbox.yMin; - metrics->horiBearingX = bbox.xMin; - metrics->horiBearingY = bbox.yMax; - metrics->vertBearingX = metrics->horiBearingX - metrics->horiAdvance / 2; - metrics->vertBearingY = (metrics->vertAdvance - metrics->height) / 2; - break; - } - default: - if (!once++) - WARN("Emboldening format 0x%x is not supported\n", glyph->format); - return; + strength = MulDiv(ppem, 1 << 6, 24); + err = pFT_Outline_Embolden(&glyph->outline, strength); + if(err) { + TRACE("FT_Ouline_Embolden returns %d\n", err); + return FALSE; } + + pFT_Outline_Get_CBox(&glyph->outline, &bbox); + metrics->width = bbox.xMax - bbox.xMin; + metrics->height = bbox.yMax - bbox.yMin; + metrics->horiBearingX = bbox.xMin; + metrics->horiBearingY = bbox.yMax; + metrics->vertBearingX = metrics->horiBearingX - metrics->horiAdvance / 2; + metrics->vertBearingY = (metrics->vertAdvance - metrics->height) / 2; + return TRUE; }
static inline BYTE get_max_level( UINT format ) @@ -6926,7 +6918,7 @@ static DWORD get_glyph_outline(GdiFont *incoming_font, UINT glyph, UINT format,
metrics = ft_face->glyph->metrics; if(font->fake_bold) - synthesize_bold_glyph(ft_face->glyph, font->ppem, &metrics); + get_bold_glyph_outline(ft_face->glyph, font->ppem, &metrics);
/* Some poorly-created fonts contain glyphs that exceed the boundaries set * by the text metrics. The proper behavior is to clip the glyph metrics to