Stop using CPDF_Array in CFX_GraphState.

Remove a dependency from core/fxge to core/fpdfapi/parser. The two
targets currently have a circular dependency.

Fix some nits along the way.

Change-Id: I5bb91661f3b197a2f66a1adf23a2d87083207a3b
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/54852
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/page/cpdf_allstates.cpp b/core/fpdfapi/page/cpdf_allstates.cpp
index f0c7359..fd5eaa3 100644
--- a/core/fpdfapi/page/cpdf_allstates.cpp
+++ b/core/fpdfapi/page/cpdf_allstates.cpp
@@ -7,6 +7,8 @@
 #include "core/fpdfapi/page/cpdf_allstates.h"
 
 #include <algorithm>
+#include <utility>
+#include <vector>
 
 #include "core/fpdfapi/page/cpdf_pageobjectholder.h"
 #include "core/fpdfapi/page/cpdf_streamcontentparser.h"
@@ -16,10 +18,9 @@
 #include "third_party/base/compiler_specific.h"
 #include "third_party/base/stl_util.h"
 
-CPDF_AllStates::CPDF_AllStates()
-    : m_TextLeading(0), m_TextRise(0), m_TextHorzScale(1.0f) {}
+CPDF_AllStates::CPDF_AllStates() = default;
 
-CPDF_AllStates::~CPDF_AllStates() {}
+CPDF_AllStates::~CPDF_AllStates() = default;
 
 void CPDF_AllStates::Copy(const CPDF_AllStates& src) {
   CopyStates(src);
@@ -33,8 +34,13 @@
   m_TextHorzScale = src.m_TextHorzScale;
 }
 
-void CPDF_AllStates::SetLineDash(CPDF_Array* pArray, float phase, float scale) {
-  m_GraphState.SetLineDash(pArray, phase, scale);
+void CPDF_AllStates::SetLineDash(const CPDF_Array* pArray,
+                                 float phase,
+                                 float scale) {
+  std::vector<float> dashes(pArray->size());
+  for (size_t i = 0; i < pArray->size(); ++i)
+    dashes[i] = pArray->GetNumberAt(i);
+  m_GraphState.SetLineDash(std::move(dashes), phase, scale);
 }
 
 void CPDF_AllStates::ProcessExtGS(CPDF_Dictionary* pGS,
diff --git a/core/fpdfapi/page/cpdf_allstates.h b/core/fpdfapi/page/cpdf_allstates.h
index e388b94..dc6f17f 100644
--- a/core/fpdfapi/page/cpdf_allstates.h
+++ b/core/fpdfapi/page/cpdf_allstates.h
@@ -22,16 +22,16 @@
 
   void Copy(const CPDF_AllStates& src);
   void ProcessExtGS(CPDF_Dictionary* pGS, CPDF_StreamContentParser* pParser);
-  void SetLineDash(CPDF_Array*, float, float scale);
+  void SetLineDash(const CPDF_Array* pArray, float phase, float scale);
 
   CFX_Matrix m_TextMatrix;
   CFX_Matrix m_CTM;
   CFX_Matrix m_ParentMatrix;
   CFX_PointF m_TextPos;
   CFX_PointF m_TextLinePos;
-  float m_TextLeading;
-  float m_TextRise;
-  float m_TextHorzScale;
+  float m_TextLeading = 0.0f;
+  float m_TextRise = 0.0f;
+  float m_TextHorzScale = 1.0f;
 };
 
 #endif  // CORE_FPDFAPI_PAGE_CPDF_ALLSTATES_H_
diff --git a/core/fxge/cfx_graphstate.cpp b/core/fxge/cfx_graphstate.cpp
index 929abe1..726c0c6 100644
--- a/core/fxge/cfx_graphstate.cpp
+++ b/core/fxge/cfx_graphstate.cpp
@@ -6,25 +6,27 @@
 
 #include "core/fxge/cfx_graphstate.h"
 
-#include "core/fpdfapi/parser/cpdf_array.h"
+#include <utility>
 
-CFX_GraphState::CFX_GraphState() {}
+CFX_GraphState::CFX_GraphState() = default;
 
 CFX_GraphState::CFX_GraphState(const CFX_GraphState& that)
     : m_Ref(that.m_Ref) {}
 
-CFX_GraphState::~CFX_GraphState() {}
+CFX_GraphState::~CFX_GraphState() = default;
 
 void CFX_GraphState::Emplace() {
   m_Ref.Emplace();
 }
 
-void CFX_GraphState::SetLineDash(CPDF_Array* pArray, float phase, float scale) {
+void CFX_GraphState::SetLineDash(std::vector<float> dashes,
+                                 float phase,
+                                 float scale) {
   CFX_GraphStateData* pData = m_Ref.GetPrivateCopy();
   pData->m_DashPhase = phase * scale;
-  pData->m_DashArray.resize(pArray->size());
-  for (size_t i = 0; i < pArray->size(); i++)
-    pData->m_DashArray[i] = pArray->GetNumberAt(i) * scale;
+  for (float& val : dashes)
+    val *= scale;
+  pData->m_DashArray = std::move(dashes);
 }
 
 float CFX_GraphState::GetLineWidth() const {
diff --git a/core/fxge/cfx_graphstate.h b/core/fxge/cfx_graphstate.h
index 05da326..20955f8 100644
--- a/core/fxge/cfx_graphstate.h
+++ b/core/fxge/cfx_graphstate.h
@@ -7,11 +7,11 @@
 #ifndef CORE_FXGE_CFX_GRAPHSTATE_H_
 #define CORE_FXGE_CFX_GRAPHSTATE_H_
 
+#include <vector>
+
 #include "core/fxcrt/shared_copy_on_write.h"
 #include "core/fxge/cfx_graphstatedata.h"
 
-class CPDF_Array;
-
 class CFX_GraphState {
  public:
   CFX_GraphState();
@@ -20,7 +20,7 @@
 
   void Emplace();
 
-  void SetLineDash(CPDF_Array* pArray, float phase, float scale);
+  void SetLineDash(std::vector<float> dashes, float phase, float scale);
 
   float GetLineWidth() const;
   void SetLineWidth(float width);