diff --git a/xfa/fgas/layout/cfx_break.cpp b/xfa/fgas/layout/cfx_break.cpp
index 73fafc8..6330a51 100644
--- a/xfa/fgas/layout/cfx_break.cpp
+++ b/xfa/fgas/layout/cfx_break.cpp
@@ -58,7 +58,6 @@
 
   SetBreakStatus();
   m_pFont = pFont;
-  FontChanged();
 }
 
 void CFX_Break::SetFontSize(float fFontSize) {
@@ -68,7 +67,6 @@
 
   SetBreakStatus();
   m_iFontSize = iFontSize;
-  FontChanged();
 }
 
 void CFX_Break::SetBreakStatus() {
@@ -91,15 +89,6 @@
   return chartype >= FX_CHARTYPE::kArabicAlef ? FX_CHARTYPE::kArabic : chartype;
 }
 
-void CFX_Break::FontChanged() {
-  m_iDefChar = 0;
-  if (!m_pFont || m_wDefChar == 0xFEFF)
-    return;
-
-  m_pFont->GetCharWidth(m_wDefChar, &m_iDefChar);
-  m_iDefChar *= m_iFontSize;
-}
-
 void CFX_Break::SetTabWidth(float fTabWidth) {
   // Note, the use of max here was only done in the TxtBreak code. Leaving this
   // in for the RTFBreak code for consistency. If we see issues with tab widths
@@ -108,19 +97,6 @@
       std::max(FXSYS_roundf(fTabWidth * kConversionFactor), kMinimumTabWidth);
 }
 
-void CFX_Break::SetDefaultChar(wchar_t wch) {
-  m_wDefChar = wch;
-  m_iDefChar = 0;
-  if (m_wDefChar == 0xFEFF || !m_pFont)
-    return;
-
-  m_pFont->GetCharWidth(m_wDefChar, &m_iDefChar);
-  if (m_iDefChar < 0)
-    m_iDefChar = 0;
-  else
-    m_iDefChar *= m_iFontSize;
-}
-
 void CFX_Break::SetParagraphBreakChar(wchar_t wch) {
   if (wch != L'\r' && wch != L'\n')
     return;
diff --git a/xfa/fgas/layout/cfx_break.h b/xfa/fgas/layout/cfx_break.h
index c611abf..4f0dcb3 100644
--- a/xfa/fgas/layout/cfx_break.h
+++ b/xfa/fgas/layout/cfx_break.h
@@ -51,7 +51,6 @@
 
   void SetCharSpace(float fCharSpace);
   void SetParagraphBreakChar(wchar_t wch);
-  void SetDefaultChar(wchar_t wch);
 
   int32_t CountBreakPieces() const;
   const CFX_BreakPiece* GetBreakPieceUnstable(int32_t index) const;
@@ -87,15 +86,10 @@
   int32_t m_iVerticalScale = 100;
   int32_t m_iTolerance = 0;
   int32_t m_iCharSpace = 0;
-  int32_t m_iDefChar = 0;
-  wchar_t m_wDefChar = 0xFEFF;
   RetainPtr<CFGAS_GEFont> m_pFont;
   UnownedPtr<CFX_BreakLine> m_pCurLine;
   int8_t m_iReadyLineIndex = -1;
   CFX_BreakLine m_Lines[2];
-
- private:
-  void FontChanged();
 };
 
 #endif  // XFA_FGAS_LAYOUT_CFX_BREAK_H_
diff --git a/xfa/fgas/layout/cfx_rtfbreak.cpp b/xfa/fgas/layout/cfx_rtfbreak.cpp
index 71f79ed..cba0ba3 100644
--- a/xfa/fgas/layout/cfx_rtfbreak.cpp
+++ b/xfa/fgas/layout/cfx_rtfbreak.cpp
@@ -216,7 +216,7 @@
            m_pFont->GetCharWidth(pLastChar->char_code(), &iCharWidthOut))) {
         iCharWidth = iCharWidthOut;
       } else {
-        iCharWidth = m_iDefChar;
+        iCharWidth = 0;
       }
 
       iCharWidth *= m_iFontSize;
@@ -246,7 +246,7 @@
        m_pFont->GetCharWidth(pCurChar->char_code(), &iCharWidthOut))) {
     iCharWidth = iCharWidthOut;
   } else {
-    iCharWidth = m_iDefChar;
+    iCharWidth = 0;
   }
 
   iCharWidth *= m_iFontSize;
@@ -276,7 +276,7 @@
   if (m_pFont && m_pFont->GetCharWidth(wForm, &iCharWidthOut))
     iCharWidth = iCharWidthOut;
   else
-    iCharWidth = m_iDefChar;
+    iCharWidth = 0;
 
   iCharWidth *= m_iFontSize;
   iCharWidth *= m_iHorizontalScale;
diff --git a/xfa/fgas/layout/cfx_txtbreak.cpp b/xfa/fgas/layout/cfx_txtbreak.cpp
index 392b422..4b87728 100644
--- a/xfa/fgas/layout/cfx_txtbreak.cpp
+++ b/xfa/fgas/layout/cfx_txtbreak.cpp
@@ -150,7 +150,7 @@
         iCharWidth = iCharWidthOut;
       }
       if (wForm == 0xFEFF)
-        iCharWidth = m_iDefChar;
+        iCharWidth = 0;
 
       iCharWidth *= m_iFontSize;
       iCharWidth *= m_iHorizontalScale;
@@ -175,7 +175,7 @@
       iCharWidth = iCharWidthOut;
     }
     if (wForm == 0xFEFF)
-      iCharWidth = m_iDefChar;
+      iCharWidth = 0;
 
     iCharWidth *= m_iFontSize;
     iCharWidth *= m_iHorizontalScale;
@@ -207,7 +207,7 @@
     if (m_pFont && m_pFont->GetCharWidth(wForm, &iCharWidthOut))
       iCharWidth = iCharWidthOut;
     else
-      iCharWidth = m_iDefChar;
+      iCharWidth = 0;
 
     iCharWidth *= m_iFontSize;
     iCharWidth *= m_iHorizontalScale;
