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