diff --git a/core/fpdfdoc/cpdf_apsettings.cpp b/core/fpdfdoc/cpdf_apsettings.cpp
index 0374e93..121d516 100644
--- a/core/fpdfdoc/cpdf_apsettings.cpp
+++ b/core/fpdfdoc/cpdf_apsettings.cpp
@@ -26,7 +26,7 @@
   return m_pDict ? m_pDict->GetIntegerFor("R") : 0;
 }
 
-std::pair<CFX_Color::Type, FX_ARGB> CPDF_ApSettings::GetColorARGB(
+CFX_Color::TypeAndARGB CPDF_ApSettings::GetColorARGB(
     const ByteString& csEntry) const {
   if (!m_pDict)
     return {CFX_Color::Type::kTransparent, 0};
diff --git a/core/fpdfdoc/cpdf_apsettings.h b/core/fpdfdoc/cpdf_apsettings.h
index b96ffe6..e141366 100644
--- a/core/fpdfdoc/cpdf_apsettings.h
+++ b/core/fpdfdoc/cpdf_apsettings.h
@@ -7,8 +7,6 @@
 #ifndef CORE_FPDFDOC_CPDF_APSETTINGS_H_
 #define CORE_FPDFDOC_CPDF_APSETTINGS_H_
 
-#include <utility>
-
 #include "core/fpdfdoc/cpdf_iconfit.h"
 #include "core/fxcrt/fx_string.h"
 #include "core/fxcrt/fx_system.h"
@@ -43,8 +41,7 @@
   // Returns one of the TEXTPOS_* values above.
   int GetTextPosition() const;
 
-  std::pair<CFX_Color::Type, FX_ARGB> GetColorARGB(
-      const ByteString& csEntry) const;
+  CFX_Color::TypeAndARGB GetColorARGB(const ByteString& csEntry) const;
 
   float GetOriginalColorComponent(int index, const ByteString& csEntry) const;
   CFX_Color GetOriginalColor(const ByteString& csEntry) const;
diff --git a/core/fpdfdoc/cpdf_defaultappearance.cpp b/core/fpdfdoc/cpdf_defaultappearance.cpp
index 95763d9..f5b4356 100644
--- a/core/fpdfdoc/cpdf_defaultappearance.cpp
+++ b/core/fpdfdoc/cpdf_defaultappearance.cpp
@@ -105,8 +105,7 @@
   return pdfium::nullopt;
 }
 
-Optional<std::pair<CFX_Color::Type, FX_ARGB>>
-CPDF_DefaultAppearance::GetColorARGB() const {
+Optional<CFX_Color::TypeAndARGB> CPDF_DefaultAppearance::GetColorARGB() const {
   Optional<CFX_Color> maybe_color = GetColor();
   if (!maybe_color.has_value())
     return pdfium::nullopt;
@@ -114,21 +113,21 @@
   const CFX_Color& color = maybe_color.value();
   if (color.nColorType == CFX_Color::Type::kGray) {
     int g = static_cast<int>(color.fColor1 * 255 + 0.5f);
-    return std::pair<CFX_Color::Type, FX_ARGB>(CFX_Color::Type::kGray,
-                                               ArgbEncode(255, g, g, g));
+    return CFX_Color::TypeAndARGB(CFX_Color::Type::kGray,
+                                  ArgbEncode(255, g, g, g));
   }
   if (color.nColorType == CFX_Color::Type::kRGB) {
     int r = static_cast<int>(color.fColor1 * 255 + 0.5f);
     int g = static_cast<int>(color.fColor2 * 255 + 0.5f);
     int b = static_cast<int>(color.fColor3 * 255 + 0.5f);
-    return std::pair<CFX_Color::Type, FX_ARGB>(CFX_Color::Type::kRGB,
-                                               ArgbEncode(255, r, g, b));
+    return CFX_Color::TypeAndARGB(CFX_Color::Type::kRGB,
+                                  ArgbEncode(255, r, g, b));
   }
   if (color.nColorType == CFX_Color::Type::kCMYK) {
     float r = 1.0f - std::min(1.0f, color.fColor1 + color.fColor4);
     float g = 1.0f - std::min(1.0f, color.fColor2 + color.fColor4);
     float b = 1.0f - std::min(1.0f, color.fColor3 + color.fColor4);
-    return std::pair<CFX_Color::Type, FX_ARGB>(
+    return CFX_Color::TypeAndARGB(
         CFX_Color::Type::kCMYK,
         ArgbEncode(255, static_cast<int>(r * 255 + 0.5f),
                    static_cast<int>(g * 255 + 0.5f),
diff --git a/core/fpdfdoc/cpdf_defaultappearance.h b/core/fpdfdoc/cpdf_defaultappearance.h
index 319da71..7c30d2b 100644
--- a/core/fpdfdoc/cpdf_defaultappearance.h
+++ b/core/fpdfdoc/cpdf_defaultappearance.h
@@ -25,7 +25,7 @@
   Optional<ByteString> GetFont(float* fFontSize);
 
   Optional<CFX_Color> GetColor() const;
-  Optional<std::pair<CFX_Color::Type, FX_ARGB>> GetColorARGB() const;
+  Optional<CFX_Color::TypeAndARGB> GetColorARGB() const;
 
   bool FindTagParamFromStartForTesting(CPDF_SimpleParser* parser,
                                        ByteStringView token,
diff --git a/core/fpdfdoc/cpdf_formcontrol.cpp b/core/fpdfdoc/cpdf_formcontrol.cpp
index 699d439..d181bab 100644
--- a/core/fpdfdoc/cpdf_formcontrol.cpp
+++ b/core/fpdfdoc/cpdf_formcontrol.cpp
@@ -147,7 +147,7 @@
   return GetMK().GetRotation();
 }
 
-std::pair<CFX_Color::Type, FX_ARGB> CPDF_FormControl::GetColorARGB(
+CFX_Color::TypeAndARGB CPDF_FormControl::GetColorARGB(
     const ByteString& csEntry) {
   return GetMK().GetColorARGB(csEntry);
 }
diff --git a/core/fpdfdoc/cpdf_formcontrol.h b/core/fpdfdoc/cpdf_formcontrol.h
index 1e82e36..a9c1706 100644
--- a/core/fpdfdoc/cpdf_formcontrol.h
+++ b/core/fpdfdoc/cpdf_formcontrol.h
@@ -7,8 +7,6 @@
 #ifndef CORE_FPDFDOC_CPDF_FORMCONTROL_H_
 #define CORE_FPDFDOC_CPDF_FORMCONTROL_H_
 
-#include <utility>
-
 #include "core/fpdfdoc/cpdf_aaction.h"
 #include "core/fpdfdoc/cpdf_action.h"
 #include "core/fpdfdoc/cpdf_annot.h"
@@ -56,9 +54,7 @@
   bool HasMKEntry(const ByteString& csEntry) const;
   int GetRotation() const;
 
-  std::pair<CFX_Color::Type, FX_ARGB> GetBorderColorARGB() {
-    return GetColorARGB("BC");
-  }
+  CFX_Color::TypeAndARGB GetBorderColorARGB() { return GetColorARGB("BC"); }
 
   float GetOriginalBorderColorComponent(int index) {
     return GetOriginalColorComponent(index, "BC");
@@ -66,9 +62,7 @@
 
   CFX_Color GetOriginalBorderColor() { return GetOriginalColor("BC"); }
 
-  std::pair<CFX_Color::Type, FX_ARGB> GetBackgroundColor() {
-    return GetColorARGB("BG");
-  }
+  CFX_Color::TypeAndARGB GetBackgroundColor() { return GetColorARGB("BG"); }
 
   float GetOriginalBackgroundColorComponent(int index) {
     return GetOriginalColorComponent(index, "BG");
@@ -96,7 +90,7 @@
 
  private:
   RetainPtr<CPDF_Font> GetDefaultControlFont() const;
-  std::pair<CFX_Color::Type, FX_ARGB> GetColorARGB(const ByteString& csEntry);
+  CFX_Color::TypeAndARGB GetColorARGB(const ByteString& csEntry);
   float GetOriginalColorComponent(int index, const ByteString& csEntry);
   CFX_Color GetOriginalColor(const ByteString& csEntry);
 
diff --git a/core/fxge/cfx_color.h b/core/fxge/cfx_color.h
index a386d2b..01dd5d7 100644
--- a/core/fxge/cfx_color.h
+++ b/core/fxge/cfx_color.h
@@ -13,6 +13,14 @@
   // Ordered by increasing number of components.
   enum class Type { kTransparent = 0, kGray, kRGB, kCMYK };
 
+  struct TypeAndARGB {
+    TypeAndARGB(CFX_Color::Type type_in, FX_ARGB argb_in)
+        : color_type(type_in), argb(argb_in) {}
+
+    CFX_Color::Type color_type;
+    FX_ARGB argb;
+  };
+
   explicit CFX_Color(FX_COLORREF ref)
       : CFX_Color(FXARGB_R(ref), FXARGB_G(ref), FXARGB_B(ref)) {}
 
diff --git a/fpdfsdk/cpdfsdk_widget.cpp b/fpdfsdk/cpdfsdk_widget.cpp
index efc56df..4934fc3 100644
--- a/fpdfsdk/cpdfsdk_widget.cpp
+++ b/fpdfsdk/cpdfsdk_widget.cpp
@@ -427,36 +427,35 @@
 #endif  // PDF_ENABLE_XFA
 
 Optional<FX_COLORREF> CPDFSDK_Widget::GetFillColor() const {
-  std::pair<CFX_Color::Type, FX_ARGB> type_argb_pair =
+  CFX_Color::TypeAndARGB type_argb_pair =
       GetFormControl()->GetBackgroundColor();
 
-  if (type_argb_pair.first == CFX_Color::Type::kTransparent)
+  if (type_argb_pair.color_type == CFX_Color::Type::kTransparent)
     return pdfium::nullopt;
 
-  return ArgbToColorRef(type_argb_pair.second);
+  return ArgbToColorRef(type_argb_pair.argb);
 }
 
 Optional<FX_COLORREF> CPDFSDK_Widget::GetBorderColor() const {
-  std::pair<CFX_Color::Type, FX_ARGB> type_argb_pair =
+  CFX_Color::TypeAndARGB type_argb_pair =
       GetFormControl()->GetBorderColorARGB();
-  if (type_argb_pair.first == CFX_Color::Type::kTransparent)
+  if (type_argb_pair.color_type == CFX_Color::Type::kTransparent)
     return pdfium::nullopt;
 
-  return ArgbToColorRef(type_argb_pair.second);
+  return ArgbToColorRef(type_argb_pair.argb);
 }
 
 Optional<FX_COLORREF> CPDFSDK_Widget::GetTextColor() const {
   CPDF_DefaultAppearance da = GetFormControl()->GetDefaultAppearance();
-  Optional<std::pair<CFX_Color::Type, FX_ARGB>> maybe_type_argb_pair =
-      da.GetColorARGB();
+  Optional<CFX_Color::TypeAndARGB> maybe_type_argb_pair = da.GetColorARGB();
 
   if (!maybe_type_argb_pair.has_value())
     return pdfium::nullopt;
 
-  if (maybe_type_argb_pair.value().first == CFX_Color::Type::kTransparent)
+  if (maybe_type_argb_pair.value().color_type == CFX_Color::Type::kTransparent)
     return pdfium::nullopt;
 
-  return ArgbToColorRef(maybe_type_argb_pair.value().second);
+  return ArgbToColorRef(maybe_type_argb_pair.value().argb);
 }
 
 float CPDFSDK_Widget::GetFontSize() const {
diff --git a/fxjs/cjs_field.cpp b/fxjs/cjs_field.cpp
index aea1dd8..d0bfc76 100644
--- a/fxjs/cjs_field.cpp
+++ b/fxjs/cjs_field.cpp
@@ -1293,7 +1293,7 @@
     return CJS_Result::Failure(JSMessage::kBadObjectError);
 
   CFX_Color color;
-  CFX_Color::Type iColorType = pFormControl->GetBackgroundColor().first;
+  CFX_Color::Type iColorType = pFormControl->GetBackgroundColor().color_type;
   if (iColorType == CFX_Color::Type::kTransparent) {
     color = CFX_Color(CFX_Color::Type::kTransparent);
   } else if (iColorType == CFX_Color::Type::kGray) {
@@ -1830,7 +1830,7 @@
     return CJS_Result::Failure(JSMessage::kBadObjectError);
 
   CFX_Color color;
-  CFX_Color::Type iColorType = pFormControl->GetBorderColorARGB().first;
+  CFX_Color::Type iColorType = pFormControl->GetBorderColorARGB().color_type;
   if (iColorType == CFX_Color::Type::kTransparent) {
     color = CFX_Color(CFX_Color::Type::kTransparent);
   } else if (iColorType == CFX_Color::Type::kGray) {
@@ -1936,17 +1936,18 @@
     return CJS_Result::Failure(JSMessage::kBadObjectError);
 
   CPDF_DefaultAppearance FieldAppearance = pFormControl->GetDefaultAppearance();
-  Optional<std::pair<CFX_Color::Type, FX_ARGB>> maybe_type_argb_pair =
+  Optional<CFX_Color::TypeAndARGB> maybe_type_argb_pair =
       FieldAppearance.GetColorARGB();
 
   CFX_Color crRet;
   if (maybe_type_argb_pair.has_value() &&
-      maybe_type_argb_pair.value().first != CFX_Color::Type::kTransparent) {
+      maybe_type_argb_pair.value().color_type !=
+          CFX_Color::Type::kTransparent) {
     int32_t a;
     int32_t r;
     int32_t g;
     int32_t b;
-    std::tie(a, r, g, b) = ArgbDecode(maybe_type_argb_pair.value().second);
+    std::tie(a, r, g, b) = ArgbDecode(maybe_type_argb_pair.value().argb);
     crRet =
         CFX_Color(CFX_Color::Type::kRGB, r / 255.0f, g / 255.0f, b / 255.0f);
   }
