Replace a std::pair with struct CFX_Color::TypeAndARGB.

The struct has members with more meaningful names.

Change-Id: Ieeb4238de1353e56cbd62bae94ba24c2d2c9a9fb
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/81510
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
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);
   }