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);
