Cleanup some javascript color code

This CL changes the color conversion methods to return their result
instead of taking an out param.

Change-Id: I19ca2b395145866533c7f93cbad80cdf4d7df05d
Reviewed-on: https://pdfium-review.googlesource.com/16530
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: dsinclair <dsinclair@chromium.org>
diff --git a/fpdfsdk/javascript/Field.cpp b/fpdfsdk/javascript/Field.cpp
index b6c32b5..155e7ce 100644
--- a/fpdfsdk/javascript/Field.cpp
+++ b/fpdfsdk/javascript/Field.cpp
@@ -1229,7 +1229,6 @@
 bool Field::get_fill_color(CJS_Runtime* pRuntime,
                            CJS_Value* vp,
                            WideString* sError) {
-  CJS_Array crArray;
   std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
   if (FieldArray.empty())
     return false;
@@ -1264,8 +1263,7 @@
     return false;
   }
 
-  color::ConvertPWLColorToArray(pRuntime, color, &crArray);
-  vp->Set(pRuntime, crArray);
+  vp->Set(pRuntime, color::ConvertPWLColorToArray(pRuntime, color));
   return true;
 }
 
@@ -1963,9 +1961,7 @@
     return false;
   }
 
-  CJS_Array crArray;
-  color::ConvertPWLColorToArray(pRuntime, color, &crArray);
-  vp->Set(pRuntime, crArray);
+  vp->Set(pRuntime, color::ConvertPWLColorToArray(pRuntime, color));
   return true;
 }
 
@@ -2073,9 +2069,7 @@
   if (iColorType == CFX_Color::kTransparent)
     crRet = CFX_Color(CFX_Color::kTransparent);
 
-  CJS_Array crArray;
-  color::ConvertPWLColorToArray(pRuntime, crRet, &crArray);
-  vp->Set(pRuntime, crArray);
+  vp->Set(pRuntime, color::ConvertPWLColorToArray(pRuntime, crRet));
   return true;
 }
 
diff --git a/fpdfsdk/javascript/PublicMethods.cpp b/fpdfsdk/javascript/PublicMethods.cpp
index 2e7387e..5e42800 100644
--- a/fpdfsdk/javascript/PublicMethods.cpp
+++ b/fpdfsdk/javascript/PublicMethods.cpp
@@ -924,16 +924,12 @@
         CJS_Value vProp(pRuntime);
         fTarget->get_text_color(pRuntime, &vProp, &sError);
 
-        CJS_Array aProp = vProp.ToArray(pRuntime);
-        CFX_Color crProp;
-        CFX_Color crColor;
-        color::ConvertArrayToPWLColor(pRuntime, aProp, &crProp);
-        color::ConvertArrayToPWLColor(pRuntime, arColor, &crColor);
-
+        CFX_Color crProp =
+            color::ConvertArrayToPWLColor(pRuntime, vProp.ToArray(pRuntime));
+        CFX_Color crColor = color::ConvertArrayToPWLColor(pRuntime, arColor);
         if (crColor != crProp) {
-          CJS_Value vProp2(pRuntime, arColor);
-
-          fTarget->set_text_color(pRuntime, vProp2, &sError);
+          fTarget->set_text_color(pRuntime, CJS_Value(pRuntime, arColor),
+                                  &sError);
         }
       }
     }
diff --git a/fpdfsdk/javascript/color.cpp b/fpdfsdk/javascript/color.cpp
index 09a6a09..2eccdae 100644
--- a/fpdfsdk/javascript/color.cpp
+++ b/fpdfsdk/javascript/color.cpp
@@ -38,6 +38,73 @@
 
 IMPLEMENT_JS_CLASS(CJS_Color, color, color)
 
+// static
+CJS_Array color::ConvertPWLColorToArray(CJS_Runtime* pRuntime,
+                                        const CFX_Color& color) {
+  CJS_Array array;
+  switch (color.nColorType) {
+    case CFX_Color::kTransparent:
+      array.SetElement(pRuntime, 0, CJS_Value(pRuntime, "T"));
+      break;
+    case CFX_Color::kGray:
+      array.SetElement(pRuntime, 0, CJS_Value(pRuntime, "G"));
+      array.SetElement(pRuntime, 1, CJS_Value(pRuntime, color.fColor1));
+      break;
+    case CFX_Color::kRGB:
+      array.SetElement(pRuntime, 0, CJS_Value(pRuntime, "RGB"));
+      array.SetElement(pRuntime, 1, CJS_Value(pRuntime, color.fColor1));
+      array.SetElement(pRuntime, 2, CJS_Value(pRuntime, color.fColor2));
+      array.SetElement(pRuntime, 3, CJS_Value(pRuntime, color.fColor3));
+      break;
+    case CFX_Color::kCMYK:
+      array.SetElement(pRuntime, 0, CJS_Value(pRuntime, "CMYK"));
+      array.SetElement(pRuntime, 1, CJS_Value(pRuntime, color.fColor1));
+      array.SetElement(pRuntime, 2, CJS_Value(pRuntime, color.fColor2));
+      array.SetElement(pRuntime, 3, CJS_Value(pRuntime, color.fColor3));
+      array.SetElement(pRuntime, 4, CJS_Value(pRuntime, color.fColor4));
+      break;
+  }
+  return array;
+}
+
+// static
+CFX_Color color::ConvertArrayToPWLColor(CJS_Runtime* pRuntime,
+                                        const CJS_Array& array) {
+  int nArrayLen = array.GetLength(pRuntime);
+  if (nArrayLen < 1)
+    return CFX_Color();
+
+  ByteString sSpace = array.GetElement(pRuntime, 0).ToByteString(pRuntime);
+  if (sSpace == "T")
+    return CFX_Color(CFX_Color::kTransparent);
+
+  float d1 = 0;
+  if (nArrayLen > 1)
+    d1 = array.GetElement(pRuntime, 1).ToFloat(pRuntime);
+
+  if (sSpace == "G")
+    return CFX_Color(CFX_Color::kGray, d1);
+
+  float d2 = 0;
+  float d3 = 0;
+  if (nArrayLen > 2)
+    d2 = array.GetElement(pRuntime, 2).ToFloat(pRuntime);
+  if (nArrayLen > 3)
+    d3 = array.GetElement(pRuntime, 3).ToFloat(pRuntime);
+
+  if (sSpace == "RGB")
+    return CFX_Color(CFX_Color::kRGB, d1, d2, d3);
+
+  float d4 = 0;
+  if (nArrayLen > 4)
+    d4 = array.GetElement(pRuntime, 4).ToFloat(pRuntime);
+
+  if (sSpace == "CMYK")
+    return CFX_Color(CFX_Color::kCMYK, d1, d2, d3, d4);
+
+  return CFX_Color();
+}
+
 color::color(CJS_Object* pJSObject) : CJS_EmbedObj(pJSObject) {
   m_crTransparent = CFX_Color(CFX_Color::kTransparent);
   m_crBlack = CFX_Color(CFX_Color::kGray, 0);
@@ -55,65 +122,6 @@
 
 color::~color() {}
 
-void color::ConvertPWLColorToArray(CJS_Runtime* pRuntime,
-                                   const CFX_Color& color,
-                                   CJS_Array* array) {
-  switch (color.nColorType) {
-    case CFX_Color::kTransparent:
-      array->SetElement(pRuntime, 0, CJS_Value(pRuntime, "T"));
-      break;
-    case CFX_Color::kGray:
-      array->SetElement(pRuntime, 0, CJS_Value(pRuntime, "G"));
-      array->SetElement(pRuntime, 1, CJS_Value(pRuntime, color.fColor1));
-      break;
-    case CFX_Color::kRGB:
-      array->SetElement(pRuntime, 0, CJS_Value(pRuntime, "RGB"));
-      array->SetElement(pRuntime, 1, CJS_Value(pRuntime, color.fColor1));
-      array->SetElement(pRuntime, 2, CJS_Value(pRuntime, color.fColor2));
-      array->SetElement(pRuntime, 3, CJS_Value(pRuntime, color.fColor3));
-      break;
-    case CFX_Color::kCMYK:
-      array->SetElement(pRuntime, 0, CJS_Value(pRuntime, "CMYK"));
-      array->SetElement(pRuntime, 1, CJS_Value(pRuntime, color.fColor1));
-      array->SetElement(pRuntime, 2, CJS_Value(pRuntime, color.fColor2));
-      array->SetElement(pRuntime, 3, CJS_Value(pRuntime, color.fColor3));
-      array->SetElement(pRuntime, 4, CJS_Value(pRuntime, color.fColor4));
-      break;
-  }
-}
-
-void color::ConvertArrayToPWLColor(CJS_Runtime* pRuntime,
-                                   const CJS_Array& array,
-                                   CFX_Color* color) {
-  int nArrayLen = array.GetLength(pRuntime);
-  if (nArrayLen < 1)
-    return;
-
-  float d1 = 0;
-  float d2 = 0;
-  float d3 = 0;
-  float d4 = 0;
-
-  if (nArrayLen > 1)
-    d1 = array.GetElement(pRuntime, 1).ToFloat(pRuntime);
-  if (nArrayLen > 2)
-    d2 = array.GetElement(pRuntime, 2).ToFloat(pRuntime);
-  if (nArrayLen > 3)
-    d3 = array.GetElement(pRuntime, 3).ToFloat(pRuntime);
-  if (nArrayLen > 4)
-    d4 = array.GetElement(pRuntime, 4).ToFloat(pRuntime);
-
-  ByteString sSpace = array.GetElement(pRuntime, 0).ToByteString(pRuntime);
-  if (sSpace == "T")
-    *color = CFX_Color(CFX_Color::kTransparent);
-  else if (sSpace == "G")
-    *color = CFX_Color(CFX_Color::kGray, d1);
-  else if (sSpace == "RGB")
-    *color = CFX_Color(CFX_Color::kRGB, d1, d2, d3);
-  else if (sSpace == "CMYK")
-    *color = CFX_Color(CFX_Color::kCMYK, d1, d2, d3, d4);
-}
-
 bool color::get_transparent(CJS_Runtime* pRuntime,
                             CJS_Value* vp,
                             WideString* sError) {
@@ -253,9 +261,7 @@
 bool color::GetPropertyHelper(CJS_Runtime* pRuntime,
                               CJS_Value* vp,
                               CFX_Color* var) {
-  CJS_Array array;
-  ConvertPWLColorToArray(pRuntime, *var, &array);
-  vp->Set(pRuntime, array);
+  vp->Set(pRuntime, ConvertPWLColorToArray(pRuntime, *var));
   return true;
 }
 
@@ -265,7 +271,7 @@
   if (!vp.IsArrayObject())
     return false;
 
-  ConvertArrayToPWLColor(pRuntime, vp.ToArray(pRuntime), var);
+  *var = ConvertArrayToPWLColor(pRuntime, vp.ToArray(pRuntime));
   return true;
 }
 
@@ -280,8 +286,6 @@
   if (!params[0].IsArrayObject())
     return false;
 
-  CFX_Color crSource;
-  ConvertArrayToPWLColor(pRuntime, params[0].ToArray(pRuntime), &crSource);
 
   ByteString sDestSpace = params[1].ToByteString(pRuntime);
   int nColorType = CFX_Color::kTransparent;
@@ -294,10 +298,10 @@
   else if (sDestSpace == "CMYK")
     nColorType = CFX_Color::kCMYK;
 
-  CJS_Array aDest;
-  CFX_Color crDest = crSource.ConvertColorType(nColorType);
-  ConvertPWLColorToArray(pRuntime, crDest, &aDest);
-  vRet = CJS_Value(pRuntime, aDest);
+  CFX_Color color =
+      ConvertArrayToPWLColor(pRuntime, params[0].ToArray(pRuntime));
+  vRet = CJS_Value(pRuntime, ConvertPWLColorToArray(
+                                 pRuntime, color.ConvertColorType(nColorType)));
 
   return true;
 }
@@ -311,10 +315,10 @@
   if (!params[0].IsArrayObject() || !params[1].IsArrayObject())
     return false;
 
-  CFX_Color color1;
-  CFX_Color color2;
-  ConvertArrayToPWLColor(pRuntime, params[0].ToArray(pRuntime), &color1);
-  ConvertArrayToPWLColor(pRuntime, params[1].ToArray(pRuntime), &color2);
+  CFX_Color color1 =
+      ConvertArrayToPWLColor(pRuntime, params[0].ToArray(pRuntime));
+  CFX_Color color2 =
+      ConvertArrayToPWLColor(pRuntime, params[1].ToArray(pRuntime));
 
   color1 = color1.ConvertColorType(color2.nColorType);
   vRet = CJS_Value(pRuntime, color1 == color2);
diff --git a/fpdfsdk/javascript/color.h b/fpdfsdk/javascript/color.h
index 08da346..851f05b 100644
--- a/fpdfsdk/javascript/color.h
+++ b/fpdfsdk/javascript/color.h
@@ -14,6 +14,11 @@
 
 class color : public CJS_EmbedObj {
  public:
+  static CJS_Array ConvertPWLColorToArray(CJS_Runtime* pRuntime,
+                                          const CFX_Color& color);
+  static CFX_Color ConvertArrayToPWLColor(CJS_Runtime* pRuntime,
+                                          const CJS_Array& array);
+
   explicit color(CJS_Object* pJSObject);
   ~color() override;
 
@@ -80,13 +85,6 @@
              CJS_Value& vRet,
              WideString& sError);
 
-  static void ConvertPWLColorToArray(CJS_Runtime* pRuntime,
-                                     const CFX_Color& color,
-                                     CJS_Array* array);
-  static void ConvertArrayToPWLColor(CJS_Runtime* pRuntime,
-                                     const CJS_Array& array,
-                                     CFX_Color* color);
-
  private:
   bool GetPropertyHelper(CJS_Runtime* pRuntime, CJS_Value* vp, CFX_Color* val);
   bool SetPropertyHelper(CJS_Runtime* pRuntime,