diff --git a/fxjs/xfa/cjx_object.cpp b/fxjs/xfa/cjx_object.cpp
index 7a47c1a..d4082d1 100644
--- a/fxjs/xfa/cjx_object.cpp
+++ b/fxjs/xfa/cjx_object.cpp
@@ -1110,7 +1110,7 @@
     return;
   }
 
-  FX_ARGB color = borderfill->GetColor(false);
+  FX_ARGB color = borderfill->GetFillColor();
   int32_t a;
   int32_t r;
   int32_t g;
diff --git a/xfa/fxfa/parser/cxfa_fill.cpp b/xfa/fxfa/parser/cxfa_fill.cpp
index 7a4801e..13b691b 100644
--- a/xfa/fxfa/parser/cxfa_fill.cpp
+++ b/xfa/fxfa/parser/cxfa_fill.cpp
@@ -70,11 +70,14 @@
   pColor->SetValue(color);
 }
 
-FX_ARGB CXFA_Fill::GetColor(bool bText) const {
+FX_ARGB CXFA_Fill::GetFillColor() const {
   const auto* pColor = GetChild<CXFA_Color>(0, XFA_Element::Color, false);
-  if (!pColor)
-    return bText ? 0xFF000000 : 0xFFFFFFFF;
-  return pColor->GetValueOrDefault(bText ? 0xFF000000 : 0xFFFFFFFF);
+  return pColor ? pColor->GetValueOrDefault(0xFFFFFFFF) : 0xFFFFFFFF;
+}
+
+FX_ARGB CXFA_Fill::GetTextColor() const {
+  const auto* pColor = GetChild<CXFA_Color>(0, XFA_Element::Color, false);
+  return pColor ? pColor->GetValueOrDefault(0xFF000000) : 0xFF000000;
 }
 
 XFA_Element CXFA_Fill::GetType() const {
@@ -109,7 +112,7 @@
       DrawStipple(pGS, fillPath, rtWidget, matrix);
       break;
     default:
-      pGS->SetFillColor(CFGAS_GEColor(GetColor(false)));
+      pGS->SetFillColor(CFGAS_GEColor(GetFillColor()));
       pGS->FillPath(fillPath, CFX_FillRenderOptions::FillType::kWinding,
                     matrix);
       break;
@@ -135,7 +138,7 @@
   CXFA_Radial* radial =
       JSObject()->GetOrCreateProperty<CXFA_Radial>(0, XFA_Element::Radial);
   if (radial)
-    radial->Draw(pGS, fillPath, GetColor(false), rtWidget, matrix);
+    radial->Draw(pGS, fillPath, GetFillColor(), rtWidget, matrix);
 }
 
 void CXFA_Fill::DrawLinear(CFGAS_GEGraphics* pGS,
@@ -145,7 +148,7 @@
   CXFA_Linear* linear =
       JSObject()->GetOrCreateProperty<CXFA_Linear>(0, XFA_Element::Linear);
   if (linear)
-    linear->Draw(pGS, fillPath, GetColor(false), rtWidget, matrix);
+    linear->Draw(pGS, fillPath, GetFillColor(), rtWidget, matrix);
 }
 
 void CXFA_Fill::DrawPattern(CFGAS_GEGraphics* pGS,
@@ -155,5 +158,5 @@
   CXFA_Pattern* pattern =
       JSObject()->GetOrCreateProperty<CXFA_Pattern>(0, XFA_Element::Pattern);
   if (pattern)
-    pattern->Draw(pGS, fillPath, GetColor(false), rtWidget, matrix);
+    pattern->Draw(pGS, fillPath, GetFillColor(), rtWidget, matrix);
 }
diff --git a/xfa/fxfa/parser/cxfa_fill.h b/xfa/fxfa/parser/cxfa_fill.h
index 168543a..4191522 100644
--- a/xfa/fxfa/parser/cxfa_fill.h
+++ b/xfa/fxfa/parser/cxfa_fill.h
@@ -21,7 +21,8 @@
 
   bool IsVisible();
 
-  FX_ARGB GetColor(bool bText) const;
+  FX_ARGB GetFillColor() const;
+  FX_ARGB GetTextColor() const;
   void SetColor(FX_ARGB color);
 
   void Draw(CFGAS_GEGraphics* pGS,
diff --git a/xfa/fxfa/parser/cxfa_font.cpp b/xfa/fxfa/parser/cxfa_font.cpp
index 0e40097..8952639 100644
--- a/xfa/fxfa/parser/cxfa_font.cpp
+++ b/xfa/fxfa/parser/cxfa_font.cpp
@@ -134,5 +134,5 @@
 
 FX_ARGB CXFA_Font::GetColor() {
   CXFA_Fill* fill = GetChild<CXFA_Fill>(0, XFA_Element::Fill, false);
-  return fill ? fill->GetColor(true) : 0xFF000000;
+  return fill ? fill->GetTextColor() : 0xFF000000;
 }
