Make fxge::FontEncoding independent from FT_Encoding Instead of having FontEncoding values that just happen to match FT_Encoding values, change the FontEncoding to a simple enum. Then add conversion functions between the two data types, and use them in place of static_casts. Bug: pdfium:2037 Change-Id: Idee1cb09d9f8a63f50abb4e3cfdd1abce391e1fe Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/114830 Reviewed-by: Dominik Röttsches <drott@chromium.org> Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fxge/BUILD.gn b/core/fxge/BUILD.gn index b7b1b0d..7034cd1 100644 --- a/core/fxge/BUILD.gn +++ b/core/fxge/BUILD.gn
@@ -98,7 +98,6 @@ "freetype/fx_freetype.h", "fx_font.cpp", "fx_font.h", - "fx_fontencoding.cpp", "fx_fontencoding.h", "render_defines.h", "renderdevicedriver_iface.cpp",
diff --git a/core/fxge/cfx_face.cpp b/core/fxge/cfx_face.cpp index 9bca779..8e6f423 100644 --- a/core/fxge/cfx_face.cpp +++ b/core/fxge/cfx_face.cpp
@@ -22,6 +22,7 @@ #include "core/fxge/scoped_font_transform.h" #include "third_party/base/check.h" #include "third_party/base/check_op.h" +#include "third_party/base/notreached.h" #include "third_party/base/numerics/safe_conversions.h" #include "third_party/base/numerics/safe_math.h" @@ -201,6 +202,69 @@ return 0; } +FT_Encoding ToFTEncoding(fxge::FontEncoding encoding) { + switch (encoding) { + case fxge::FontEncoding::kAdobeCustom: + return FT_ENCODING_ADOBE_CUSTOM; + case fxge::FontEncoding::kAdobeExpert: + return FT_ENCODING_ADOBE_EXPERT; + case fxge::FontEncoding::kAdobeStandard: + return FT_ENCODING_ADOBE_STANDARD; + case fxge::FontEncoding::kAppleRoman: + return FT_ENCODING_APPLE_ROMAN; + case fxge::FontEncoding::kBig5: + return FT_ENCODING_BIG5; + case fxge::FontEncoding::kGB2312: + return FT_ENCODING_PRC; + case fxge::FontEncoding::kJohab: + return FT_ENCODING_JOHAB; + case fxge::FontEncoding::kLatin1: + return FT_ENCODING_ADOBE_LATIN_1; + case fxge::FontEncoding::kOldLatin2: + return FT_ENCODING_OLD_LATIN_2; + case fxge::FontEncoding::kSjis: + return FT_ENCODING_SJIS; + case fxge::FontEncoding::kSymbol: + return FT_ENCODING_MS_SYMBOL; + case fxge::FontEncoding::kUnicode: + return FT_ENCODING_UNICODE; + case fxge::FontEncoding::kWansung: + return FT_ENCODING_WANSUNG; + } +} + +fxge::FontEncoding ToFontEncoding(uint32_t ft_encoding) { + switch (ft_encoding) { + case FT_ENCODING_ADOBE_CUSTOM: + return fxge::FontEncoding::kAdobeCustom; + case FT_ENCODING_ADOBE_EXPERT: + return fxge::FontEncoding::kAdobeExpert; + case FT_ENCODING_ADOBE_STANDARD: + return fxge::FontEncoding::kAdobeStandard; + case FT_ENCODING_APPLE_ROMAN: + return fxge::FontEncoding::kAppleRoman; + case FT_ENCODING_BIG5: + return fxge::FontEncoding::kBig5; + case FT_ENCODING_PRC: + return fxge::FontEncoding::kGB2312; + case FT_ENCODING_JOHAB: + return fxge::FontEncoding::kJohab; + case FT_ENCODING_ADOBE_LATIN_1: + return fxge::FontEncoding::kLatin1; + case FT_ENCODING_OLD_LATIN_2: + return fxge::FontEncoding::kOldLatin2; + case FT_ENCODING_SJIS: + return fxge::FontEncoding::kSjis; + case FT_ENCODING_MS_SYMBOL: + return fxge::FontEncoding::kSymbol; + case FT_ENCODING_UNICODE: + return fxge::FontEncoding::kUnicode; + case FT_ENCODING_WANSUNG: + return fxge::FontEncoding::kWansung; + } + NOTREACHED_NORETURN(); +} + } // namespace // static @@ -608,7 +672,7 @@ if (!GetRec()->charmap) { return absl::nullopt; } - return static_cast<fxge::FontEncoding>(GetRec()->charmap->encoding); + return ToFontEncoding(GetRec()->charmap->encoding); } int CFX_Face::GetCharMapPlatformIdByIndex(size_t index) const { @@ -623,7 +687,7 @@ fxge::FontEncoding CFX_Face::GetCharMapEncodingByIndex(size_t index) const { CHECK_LT(index, GetCharMapCount()); - return static_cast<fxge::FontEncoding>(GetRec()->charmaps[index]->encoding); + return ToFontEncoding(GetRec()->charmaps[index]->encoding); } size_t CFX_Face::GetCharMapCount() const { @@ -642,8 +706,7 @@ } bool CFX_Face::SelectCharMap(fxge::FontEncoding encoding) { - FT_Error error = - FT_Select_Charmap(GetRec(), static_cast<FT_Encoding>(encoding)); + FT_Error error = FT_Select_Charmap(GetRec(), ToFTEncoding(encoding)); return !error; }
diff --git a/core/fxge/fx_fontencoding.cpp b/core/fxge/fx_fontencoding.cpp deleted file mode 100644 index 46b3e5b..0000000 --- a/core/fxge/fx_fontencoding.cpp +++ /dev/null
@@ -1,47 +0,0 @@ -// Copyright 2023 The PDFium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "core/fxge/fx_fontencoding.h" - -#include "core/fxge/freetype/fx_freetype.h" - -namespace fxge { - -static_assert(static_cast<uint32_t>(FontEncoding::kAdobeCustom) == - FT_ENCODING_ADOBE_CUSTOM, - "wrong encoding"); -static_assert(static_cast<uint32_t>(FontEncoding::kAdobeExpert) == - FT_ENCODING_ADOBE_EXPERT, - "wrong encoding"); -static_assert(static_cast<uint32_t>(FontEncoding::kAdobeStandard) == - FT_ENCODING_ADOBE_STANDARD, - "wrong encoding"); -static_assert(static_cast<uint32_t>(FontEncoding::kAppleRoman) == - FT_ENCODING_APPLE_ROMAN, - "wrong encoding"); -static_assert(static_cast<uint32_t>(FontEncoding::kBig5) == FT_ENCODING_BIG5, - "wrong encoding"); -static_assert(static_cast<uint32_t>(FontEncoding::kGB2312) == FT_ENCODING_PRC, - "wrong encoding"); -static_assert(static_cast<uint32_t>(FontEncoding::kJohab) == FT_ENCODING_JOHAB, - "wrong encoding"); -static_assert(static_cast<uint32_t>(FontEncoding::kLatin1) == - FT_ENCODING_ADOBE_LATIN_1, - "wrong encoding"); -static_assert(static_cast<uint32_t>(FontEncoding::kOldLatin2) == - FT_ENCODING_OLD_LATIN_2, - "wrong encoding"); -static_assert(static_cast<uint32_t>(FontEncoding::kSjis) == FT_ENCODING_SJIS, - "wrong encoding"); -static_assert(static_cast<uint32_t>(FontEncoding::kSymbol) == - FT_ENCODING_MS_SYMBOL, - "wrong encoding"); -static_assert(static_cast<uint32_t>(FontEncoding::kUnicode) == - FT_ENCODING_UNICODE, - "wrong encoding"); -static_assert(static_cast<uint32_t>(FontEncoding::kWansung) == - FT_ENCODING_WANSUNG, - "wrong encoding"); - -} // namespace fxge
diff --git a/core/fxge/fx_fontencoding.h b/core/fxge/fx_fontencoding.h index d81ae8b..a1de368 100644 --- a/core/fxge/fx_fontencoding.h +++ b/core/fxge/fx_fontencoding.h
@@ -7,25 +7,22 @@ #include <stdint.h> -#include "core/fxcrt/fx_string.h" - namespace fxge { -// The values here match FreeType FT_Encoding values with similar names. enum class FontEncoding : uint32_t { - kAdobeCustom = FXBSTR_ID('A', 'D', 'B', 'C'), - kAdobeExpert = FXBSTR_ID('A', 'D', 'B', 'E'), - kAdobeStandard = FXBSTR_ID('A', 'D', 'O', 'B'), - kAppleRoman = FXBSTR_ID('a', 'r', 'm', 'n'), - kBig5 = FXBSTR_ID('b', 'i', 'g', '5'), - kGB2312 = FXBSTR_ID('g', 'b', ' ', ' '), - kJohab = FXBSTR_ID('j', 'o', 'h', 'a'), - kLatin1 = FXBSTR_ID('l', 'a', 't', '1'), - kOldLatin2 = FXBSTR_ID('l', 'a', 't', '2'), - kSjis = FXBSTR_ID('s', 'j', 'i', 's'), - kSymbol = FXBSTR_ID('s', 'y', 'm', 'b'), - kUnicode = FXBSTR_ID('u', 'n', 'i', 'c'), - kWansung = FXBSTR_ID('w', 'a', 'n', 's'), + kAdobeCustom, + kAdobeExpert, + kAdobeStandard, + kAppleRoman, + kBig5, + kGB2312, + kJohab, + kLatin1, + kOldLatin2, + kSjis, + kSymbol, + kUnicode, + kWansung, }; } // namespace fxge