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