From 82b7d4f3da9db3786cf84820fea4d2768a433e37 Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Sat, 18 Jan 2025 22:33:00 +0900 Subject: [PATCH] [FREETYPE][NTGDI] Fix ftGdiGetTextMetricsW return for raster fonts (#7635) Try to get ready to support raster fonts. JIRA issue: CORE-17327 - Fix the return value of ftGdiGetTextMetricsW function for raster fonts. --- win32ss/gdi/ntgdi/freetype.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/win32ss/gdi/ntgdi/freetype.c b/win32ss/gdi/ntgdi/freetype.c index 8deb9e6820b..86e3c7a4106 100644 --- a/win32ss/gdi/ntgdi/freetype.c +++ b/win32ss/gdi/ntgdi/freetype.c @@ -3164,7 +3164,7 @@ IntGetOutlineTextMetrics(PFONTGDI FontGDI, Otm->otmSize = Cache->OutlineRequiredSize; - FillTM(&Otm->otmTextMetrics, FontGDI, pOS2, pHori, !Error ? &WinFNT : 0); + FillTM(&Otm->otmTextMetrics, FontGDI, pOS2, pHori, (Error ? NULL : &WinFNT)); if (!pOS2) goto skip_os2; @@ -5318,25 +5318,26 @@ ftGdiGetTextMetricsW( Status = STATUS_SUCCESS; IntLockFreeType(); + + Error = FT_Get_WinFNT_Header(Face, &Win); pOS2 = FT_Get_Sfnt_Table(Face, ft_sfnt_os2); - if (NULL == pOS2) + pHori = FT_Get_Sfnt_Table(Face, ft_sfnt_hhea); + + if (!pOS2 && Error) { DPRINT1("Can't find OS/2 table - not TT font?\n"); Status = STATUS_INTERNAL_ERROR; } - pHori = FT_Get_Sfnt_Table(Face, ft_sfnt_hhea); - if (NULL == pHori) + if (!pHori && Error) { DPRINT1("Can't find HHEA table - not TT font?\n"); Status = STATUS_INTERNAL_ERROR; } - Error = FT_Get_WinFNT_Header(Face, &Win); - - if (NT_SUCCESS(Status) || !Error) + if (NT_SUCCESS(Status)) { - FillTM(&ptmwi->TextMetric, FontGDI, pOS2, pHori, !Error ? &Win : 0); + FillTM(&ptmwi->TextMetric, FontGDI, pOS2, pHori, (Error ? NULL : &Win)); /* FIXME: Fill Diff member */ }