Add enum FontPitchFamily
Replace a set of #defines with an enum. This avoids a potential conflict
with #defines in public/fpdf_sysfontinfo.h. Add checks to make sure the
enum values and the public #defines match. Simplify static_asserts()
along the way.
Bug: 42270078
Change-Id: I81dd0c6b0e5a58e8b308c1c5af35c2adbf937334
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/126894
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Thomas Sepez <tsepez@google.com>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fxge/cfx_folderfontinfo_unittest.cpp b/core/fxge/cfx_folderfontinfo_unittest.cpp
index 9b67f57..9093c86 100644
--- a/core/fxge/cfx_folderfontinfo_unittest.cpp
+++ b/core/fxge/cfx_folderfontinfo_unittest.cpp
@@ -74,61 +74,70 @@
TEST_F(CFXFolderFontInfoTest, TestFindFont) {
// Find "Symbol" font
void* font = FindFont(/*weight=*/0, /*bItalic=*/false, FX_Charset::kSymbol,
- FXFONT_FF_ROMAN, kSymbol, /*bMatchName=*/true);
+ pdfium::kFontPitchFamilyRoman, kSymbol,
+ /*bMatchName=*/true);
ASSERT_TRUE(font);
EXPECT_EQ(GetFaceName(font), kSymbol);
// Find "Calibri" font that is not present in the installed fonts
EXPECT_FALSE(FindFont(/*weight=*/0, /*bItalic=*/false, FX_Charset::kSymbol,
- FXFONT_FF_ROMAN, kCalibri, /*bMatchName=*/true));
+ pdfium::kFontPitchFamilyRoman, kCalibri,
+ /*bMatchName=*/true));
// Find the closest matching font to "Bookshelf" font that is present in the
// installed fonts
font = FindFont(/*weight=*/0, /*bItalic=*/false, FX_Charset::kSymbol,
- FXFONT_FF_ROMAN, kBookshelf, /*bMatchName=*/true);
+ pdfium::kFontPitchFamilyRoman, kBookshelf,
+ /*bMatchName=*/true);
ASSERT_TRUE(font);
EXPECT_EQ(GetFaceName(font), kBookshelfSymbol7);
// Find "Book" font is expected to fail, because none of the installed fonts
// is in the same font family.
EXPECT_FALSE(FindFont(/*weight=*/0, /*bItalic=*/false, FX_Charset::kSymbol,
- FXFONT_FF_ROMAN, kBook, /*bMatchName=*/true));
+ pdfium::kFontPitchFamilyRoman, kBook,
+ /*bMatchName=*/true));
// Find the closest matching font for "Tofu" in the installed fonts, which
// has "," following the string "Tofu".
font = FindFont(/*weight=*/0, /*bItalic=*/false, FX_Charset::kSymbol,
- FXFONT_FF_ROMAN, kTofu, /*bMatchName=*/true);
+ pdfium::kFontPitchFamilyRoman, kTofu,
+ /*bMatchName=*/true);
ASSERT_TRUE(font);
EXPECT_EQ(GetFaceName(font), kTofuBold);
// Find the closest matching font for "Lato" in the installed fonts, which
// has a space character following the string "Lato".
font = FindFont(/*weight=*/0, /*bItalic=*/false, FX_Charset::kANSI,
- FXFONT_FF_ROMAN, kLato, /*bMatchName=*/true);
+ pdfium::kFontPitchFamilyRoman, kLato,
+ /*bMatchName=*/true);
ASSERT_TRUE(font);
EXPECT_EQ(GetFaceName(font), kLatoUltraBold);
// Find the closest matching font for "Oxygen" in the installed fonts,
// which has "-" following the string "Oxygen".
font = FindFont(/*weight=*/0, /*bItalic=*/false, FX_Charset::kANSI,
- FXFONT_FF_ROMAN, kOxygen, /*bMatchName=*/true);
+ pdfium::kFontPitchFamilyRoman, kOxygen,
+ /*bMatchName=*/true);
ASSERT_TRUE(font);
EXPECT_EQ(GetFaceName(font), kOxygenSansSansBold);
// Find the closest matching font for "Oxygen-Sans" in the installed fonts,
// to test matching a family name with "-".
font = FindFont(/*weight=*/0, /*bItalic=*/false, FX_Charset::kANSI,
- FXFONT_FF_ROMAN, kOxygenSans, /*bMatchName=*/true);
+ pdfium::kFontPitchFamilyRoman, kOxygenSans,
+ /*bMatchName=*/true);
ASSERT_TRUE(font);
EXPECT_EQ(GetFaceName(font), kOxygenSansSansBold);
// Find "Symbol" font when name matching is false
font = FindFont(/*weight=*/0, /*bItalic=*/false, FX_Charset::kSymbol,
- FXFONT_FF_ROMAN, kSymbol, /*bMatchName=*/false);
+ pdfium::kFontPitchFamilyRoman, kSymbol,
+ /*bMatchName=*/false);
ASSERT_TRUE(font);
EXPECT_EQ(GetFaceName(font), kBookshelfSymbol7);
- font = FindFont(700, false, FX_Charset::kANSI, FXFONT_FF_FIXEDPITCH,
+ font = FindFont(700, false, FX_Charset::kANSI, pdfium::kFontPitchFamilyFixed,
kComicSansMS, true);
ASSERT_TRUE(font);
EXPECT_EQ(GetFaceName(font), kComicSansMS);
diff --git a/core/fxge/cfx_fontmapper.cpp b/core/fxge/cfx_fontmapper.cpp
index 83e8c95..cf8c736 100644
--- a/core/fxge/cfx_fontmapper.cpp
+++ b/core/fxge/cfx_fontmapper.cpp
@@ -287,7 +287,7 @@
bool CheckSupportThirdPartFont(const ByteString& name, int* pitch_family) {
if (name != "MyriadPro")
return false;
- *pitch_family &= ~FXFONT_FF_ROMAN;
+ *pitch_family &= ~pdfium::kFontPitchFamilyRoman;
return true;
}
@@ -304,21 +304,26 @@
}
int GetPitchFamilyFromBaseFont(int base_font) {
- if (base_font < 4)
- return FXFONT_FF_FIXEDPITCH;
- if (base_font >= 8)
- return FXFONT_FF_ROMAN;
+ if (base_font < 4) {
+ return pdfium::kFontPitchFamilyFixed;
+ }
+ if (base_font >= 8) {
+ return pdfium::kFontPitchFamilyRoman;
+ }
return 0;
}
int GetPitchFamilyFromFlags(uint32_t flags) {
int pitch_family = 0;
- if (FontStyleIsSerif(flags))
- pitch_family |= FXFONT_FF_ROMAN;
- if (FontStyleIsScript(flags))
- pitch_family |= FXFONT_FF_SCRIPT;
- if (FontStyleIsFixedPitch(flags))
- pitch_family |= FXFONT_FF_FIXEDPITCH;
+ if (FontStyleIsSerif(flags)) {
+ pitch_family |= pdfium::kFontPitchFamilyRoman;
+ }
+ if (FontStyleIsScript(flags)) {
+ pitch_family |= pdfium::kFontPitchFamilyScript;
+ }
+ if (FontStyleIsFixedPitch(flags)) {
+ pitch_family |= pdfium::kFontPitchFamilyFixed;
+ }
return pitch_family;
}
diff --git a/core/fxge/fx_font.h b/core/fxge/fx_font.h
index e892731..bf7a10d 100644
--- a/core/fxge/fx_font.h
+++ b/core/fxge/fx_font.h
@@ -17,6 +17,13 @@
namespace pdfium {
+// Font pitch and family flags.
+enum FontPitchFamily {
+ kFontPitchFamilyFixed = 1 << 0,
+ kFontPitchFamilyRoman = 1 << 4,
+ kFontPitchFamilyScript = 1 << 6,
+};
+
// Defined in ISO 32000-1:2008 spec, table 123.
// Defined in ISO 32000-2:2020 spec, table 121.
enum FontStyle {
@@ -42,11 +49,6 @@
} // namespace pdfium
-/* Font pitch and family flags */
-#define FXFONT_FF_FIXEDPITCH (1 << 0)
-#define FXFONT_FF_ROMAN (1 << 4)
-#define FXFONT_FF_SCRIPT (4 << 4)
-
/* Other font flags */
#define FXFONT_USEEXTERNATTR 0x80000
@@ -94,13 +96,13 @@
}
inline bool FontFamilyIsFixedPitch(uint32_t family) {
- return !!(family & FXFONT_FF_FIXEDPITCH);
+ return !!(family & pdfium::kFontPitchFamilyFixed);
}
inline bool FontFamilyIsRoman(uint32_t family) {
- return !!(family & FXFONT_FF_ROMAN);
+ return !!(family & pdfium::kFontPitchFamilyRoman);
}
inline bool FontFamilyIsScript(int32_t family) {
- return !!(family & FXFONT_FF_SCRIPT);
+ return !!(family & pdfium::kFontPitchFamilyScript);
}
wchar_t UnicodeFromAdobeName(const char* name);
diff --git a/fpdfsdk/fpdf_sysfontinfo.cpp b/fpdfsdk/fpdf_sysfontinfo.cpp
index 15b9845..6aca358 100644
--- a/fpdfsdk/fpdf_sysfontinfo.cpp
+++ b/fpdfsdk/fpdf_sysfontinfo.cpp
@@ -29,51 +29,37 @@
#include "xfa/fgas/font/cfgas_gemodule.h"
#endif
-static_assert(FXFONT_ANSI_CHARSET == static_cast<int>(FX_Charset::kANSI),
- "Charset must match");
-static_assert(FXFONT_DEFAULT_CHARSET == static_cast<int>(FX_Charset::kDefault),
- "Charset must match");
-static_assert(FXFONT_SYMBOL_CHARSET == static_cast<int>(FX_Charset::kSymbol),
- "Charset must match");
+static_assert(FXFONT_ANSI_CHARSET == static_cast<int>(FX_Charset::kANSI));
+static_assert(FXFONT_DEFAULT_CHARSET == static_cast<int>(FX_Charset::kDefault));
+static_assert(FXFONT_SYMBOL_CHARSET == static_cast<int>(FX_Charset::kSymbol));
static_assert(FXFONT_SHIFTJIS_CHARSET ==
- static_cast<int>(FX_Charset::kShiftJIS),
- "Charset must match");
-static_assert(FXFONT_HANGEUL_CHARSET == static_cast<int>(FX_Charset::kHangul),
- "Charset must match");
+ static_cast<int>(FX_Charset::kShiftJIS));
+static_assert(FXFONT_HANGEUL_CHARSET == static_cast<int>(FX_Charset::kHangul));
static_assert(FXFONT_GB2312_CHARSET ==
- static_cast<int>(FX_Charset::kChineseSimplified),
- "Charset must match");
+ static_cast<int>(FX_Charset::kChineseSimplified));
static_assert(FXFONT_CHINESEBIG5_CHARSET ==
- static_cast<int>(FX_Charset::kChineseTraditional),
- "Charset must match");
+ static_cast<int>(FX_Charset::kChineseTraditional));
static_assert(FXFONT_GREEK_CHARSET ==
- static_cast<int>(FX_Charset::kMSWin_Greek),
- "Charset must match");
+ static_cast<int>(FX_Charset::kMSWin_Greek));
static_assert(FXFONT_VIETNAMESE_CHARSET ==
- static_cast<int>(FX_Charset::kMSWin_Vietnamese),
- "Charset must match");
+ static_cast<int>(FX_Charset::kMSWin_Vietnamese));
static_assert(FXFONT_HEBREW_CHARSET ==
- static_cast<int>(FX_Charset::kMSWin_Hebrew),
- "Charset must match");
+ static_cast<int>(FX_Charset::kMSWin_Hebrew));
static_assert(FXFONT_ARABIC_CHARSET ==
- static_cast<int>(FX_Charset::kMSWin_Arabic),
- "Charset must match");
+ static_cast<int>(FX_Charset::kMSWin_Arabic));
static_assert(FXFONT_CYRILLIC_CHARSET ==
- static_cast<int>(FX_Charset::kMSWin_Cyrillic),
- "Charset must match");
-static_assert(FXFONT_THAI_CHARSET == static_cast<int>(FX_Charset::kThai),
- "Charset must match");
+ static_cast<int>(FX_Charset::kMSWin_Cyrillic));
+static_assert(FXFONT_THAI_CHARSET == static_cast<int>(FX_Charset::kThai));
static_assert(FXFONT_EASTERNEUROPEAN_CHARSET ==
- static_cast<int>(FX_Charset::kMSWin_EasternEuropean),
- "Charset must match");
+ static_cast<int>(FX_Charset::kMSWin_EasternEuropean));
+static_assert(pdfium::kFontPitchFamilyFixed == FXFONT_FF_FIXEDPITCH);
+static_assert(pdfium::kFontPitchFamilyRoman == FXFONT_FF_ROMAN);
+static_assert(pdfium::kFontPitchFamilyScript == FXFONT_FF_SCRIPT);
static_assert(offsetof(CFX_Font::CharsetFontMap, charset) ==
- offsetof(FPDF_CharsetFontMap, charset),
- "CFX_Font::CharsetFontMap must be same as FPDF_CharsetFontMap");
+ offsetof(FPDF_CharsetFontMap, charset));
static_assert(offsetof(CFX_Font::CharsetFontMap, fontname) ==
- offsetof(FPDF_CharsetFontMap, fontname),
- "CFX_Font::CharsetFontMap must be same as FPDF_CharsetFontMap");
-static_assert(sizeof(CFX_Font::CharsetFontMap) == sizeof(FPDF_CharsetFontMap),
- "CFX_Font::CharsetFontMap must be same as FPDF_CharsetFontMap");
+ offsetof(FPDF_CharsetFontMap, fontname));
+static_assert(sizeof(CFX_Font::CharsetFontMap) == sizeof(FPDF_CharsetFontMap));
static_assert(FXFONT_FW_NORMAL == pdfium::kFontWeightNormal);
static_assert(FXFONT_FW_BOLD == pdfium::kFontWeightBold);