[PATCH 3/3] gdi32: Fix text metrics in synthetic bold bitmap fonts. (rebased)

Huw Davies huw at codeweavers.com
Mon Feb 12 03:27:06 CST 2018


On Sun, Feb 11, 2018 at 10:27:56PM +0900, Akihiro Sagawa wrote:
> 
> Fixes Bug 44473.
> 
> Signed-off-by: Akihiro Sagawa <sagawa.aki at gmail.com>
> ---
>  dlls/gdi32/freetype.c   | 9 +++++++--
>  dlls/gdi32/tests/font.c | 3 ---
>  2 files changed, 7 insertions(+), 5 deletions(-)
> 

> diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c
> index ba8855a..5d53129 100644
> --- a/dlls/gdi32/freetype.c
> +++ b/dlls/gdi32/freetype.c
> @@ -7523,6 +7523,9 @@ static BOOL get_bitmap_text_metrics(GdiFont *font)
>          TM.tmPitchAndFamily = FT_IS_FIXED_WIDTH(ft_face) ? 0 : TMPF_FIXED_PITCH;
>          TM.tmCharSet = font->charset;
>      }
> +
> +    if(font->fake_bold)
> +        TM.tmWeight = FW_BOLD;
>  #undef TM
>  
>      return TRUE;
> @@ -7552,10 +7555,12 @@ static void scale_font_metrics(const GdiFont *font, LPTEXTMETRICW ptm)
>      SCALE_Y(ptm->tmDescent);
>      SCALE_Y(ptm->tmInternalLeading);
>      SCALE_Y(ptm->tmExternalLeading);
> -    SCALE_Y(ptm->tmOverhang);
>  
> -    if(FT_IS_SCALABLE(font->ft_face) && font->fake_bold)
> +    SCALE_X(ptm->tmOverhang);
> +    if(font->fake_bold)
>      {
> +        if(!FT_IS_SCALABLE(font->ft_face))
> +            ptm->tmOverhang += fabs(font->font_desc.matrix.eM11);
>          ptm->tmAveCharWidth++;
>          ptm->tmMaxCharWidth++;
>      }

It looks odd to me that tmOverHang gets incremented by essentially the
scaling factor, yet the widths only get incremented by one.  Shouldn't
these all be consistent?

Huw.



More information about the wine-devel mailing list