Continue adding fontations equivalents to cfx_face.cpp Alternatively, add a TODO() to problematic methods. Bug: 42271123 Change-Id: Ida96ef32e90794dfa666f6d50cf509abee4dee92 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/148450 Auto-Submit: Tom Sepez <tsepez@chromium.org> Commit-Queue: Tom Sepez <tsepez@chromium.org> Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/core/fxge/cfx_face.cpp b/core/fxge/cfx_face.cpp index 9a7f7e9..2cd2a60 100644 --- a/core/fxge/cfx_face.cpp +++ b/core/fxge/cfx_face.cpp
@@ -394,19 +394,40 @@ } bool CFX_Face::HasGlyphNames() const { - return !!(GetRec()->face_flags & FT_FACE_FLAG_GLYPH_NAMES); + const bool ft_result = !!(GetRec()->face_flags & FT_FACE_FLAG_GLYPH_NAMES); +#if defined(PDF_ENABLE_SKIA_TYPEFACE_CHECKS) + // TODO(https://crbug.com/42271123): Compute equivalent result via Skia or + // Skrifa. +#endif + return ft_result; } bool CFX_Face::IsTtOt() const { - return !!(GetRec()->face_flags & FT_FACE_FLAG_SFNT); + const bool ft_result = !!(GetRec()->face_flags & FT_FACE_FLAG_SFNT); +#if defined(PDF_ENABLE_SKIA_TYPEFACE_CHECKS) + if (skia_typeface_) { + CHECK_EQ(ft_result, skia_typeface_->countTables() > 0); + } +#endif + return ft_result; } ByteString CFX_Face::GetFontFormat() { - return ByteString(FT_Get_Font_Format(GetRec())); + const ByteString ft_result(FT_Get_Font_Format(GetRec())); +#if defined(PDF_ENABLE_SKIA_TYPEFACE_CHECKS) + // TODO(https://crbug.com/42271123): Compute equivalent result via Skia or + // Skrifa. +#endif + return ft_result; } bool CFX_Face::IsTricky() const { - return !!(GetRec()->face_flags & FT_FACE_FLAG_TRICKY); + const bool ft_result = !!(GetRec()->face_flags & FT_FACE_FLAG_TRICKY); +#if defined(PDF_ENABLE_SKIA_TYPEFACE_CHECKS) + // TODO(https://crbug.com/42271123): Compute equivalent result via Skia or + // Skrifa. +#endif + return ft_result; } bool CFX_Face::IsFixedWidth() const { @@ -421,7 +442,12 @@ #if defined(PDF_ENABLE_XFA) bool CFX_Face::IsScalable() const { - return !!(GetRec()->face_flags & FT_FACE_FLAG_SCALABLE); + const bool ft_result = !!(GetRec()->face_flags & FT_FACE_FLAG_SCALABLE); +#if defined(PDF_ENABLE_SKIA_TYPEFACE_CHECKS) + // TODO(https://crbug.com/42271123): Compute equivalent result via Skia or + // Skrifa. +#endif + return ft_result; } #endif @@ -797,6 +823,10 @@ src_span = src_span.subspan(src_pitch); } } +#if defined(PDF_ENABLE_SKIA_TYPEFACE_CHECKS) + // TODO(https://crbug.com/42271123): Compute equivalent result via Skia or + // Skrifa. +#endif return pGlyphBitmap; } @@ -1068,7 +1098,12 @@ if (!scale) { args |= FT_LOAD_NO_SCALE; } - return FT_Load_Glyph(GetRec(), glyph_index, args); + const int ft_result = FT_Load_Glyph(GetRec(), glyph_index, args); +#if defined(PDF_ENABLE_SKIA_TYPEFACE_CHECKS) + // TODO(https://crbug.com/42271123): Compute equivalent result via Skia or + // Skrifa. +#endif + return ft_result; } ByteString CFX_Face::GetPostscriptName() { @@ -1125,11 +1160,29 @@ return std::nullopt; } int em = GetUnitsPerEm(); - return ScaledFXRectFromFTPos( + const FX_RECT ft_result = ScaledFXRectFromFTPos( GetRec()->glyph->metrics.horiBearingX, GetRec()->glyph->metrics.horiBearingY - GetRec()->glyph->metrics.height, GetRec()->glyph->metrics.horiBearingX + GetRec()->glyph->metrics.width, GetRec()->glyph->metrics.horiBearingY, em, em); +#if defined(PDF_ENABLE_SKIA_TYPEFACE_CHECKS) + if (skia_typeface_) { + SkFont font(skia_typeface_, em); + font.setHinting(SkFontHinting::kNone); + uint16_t skia_glyph_index = static_cast<uint16_t>(glyph_index); + SkRect bounds = font.getBounds(skia_glyph_index, nullptr); + + CHECK_EQ(ft_result.left, + NormalizeFontMetric(static_cast<int32_t>(bounds.fLeft), em)); + CHECK_EQ(ft_result.top, + NormalizeFontMetric(static_cast<int32_t>(-bounds.fTop), em)); + CHECK_EQ(ft_result.right, + NormalizeFontMetric(static_cast<int32_t>(bounds.fRight), em)); + CHECK_EQ(ft_result.bottom, + NormalizeFontMetric(static_cast<int32_t>(-bounds.fBottom), em)); + } +#endif + return ft_result; } FX_RECT CFX_Face::GetCharBBox(uint32_t code, int glyph_index) { @@ -1173,6 +1226,10 @@ } } } +#if defined(PDF_ENABLE_SKIA_TYPEFACE_CHECKS) + // TODO(https://crbug.com/42271123): Compute equivalent result via Skia or + // Skrifa. +#endif return rect; } @@ -1303,7 +1360,12 @@ #if defined(PDF_ENABLE_XFA) int CFX_Face::GetNumFaces() const { - return pdfium::checked_cast<int>(GetRec()->num_faces); + const int ft_result = pdfium::checked_cast<int>(GetRec()->num_faces); +#if defined(PDF_ENABLE_SKIA_TYPEFACE_CHECKS) + // TODO(https://crbug.com/42271123): Compute equivalent result via Skia or + // Skrifa. +#endif + return ft_result; } #endif