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);