Index: core/fpdfapi/fpdf_page/cpdf_contentmarkitem.cpp |
diff --git a/core/fpdfapi/fpdf_page/cpdf_contentmarkitem.cpp b/core/fpdfapi/fpdf_page/cpdf_contentmarkitem.cpp |
index f44972568d37a81290f6581a7d7bd5d03eda3ca0..5e2d21f850bad5e19f6af414ce464cbfec19eb11 100644 |
--- a/core/fpdfapi/fpdf_page/cpdf_contentmarkitem.cpp |
+++ b/core/fpdfapi/fpdf_page/cpdf_contentmarkitem.cpp |
@@ -9,27 +9,42 @@ |
#include "core/fpdfapi/fpdf_parser/include/cpdf_dictionary.h" |
CPDF_ContentMarkItem::CPDF_ContentMarkItem() |
- : m_ParamType(None), m_pParam(nullptr) {} |
- |
-CPDF_ContentMarkItem::CPDF_ContentMarkItem(const CPDF_ContentMarkItem& src) { |
- m_MarkName = src.m_MarkName; |
- m_ParamType = src.m_ParamType; |
- if (m_ParamType == DirectDict) { |
- m_pParam = ToDictionary(src.m_pParam->Clone()); |
- } else { |
- m_pParam = src.m_pParam; |
- } |
+ : m_ParamType(None), m_pPropertiesDict(nullptr) {} |
+ |
+CPDF_ContentMarkItem::CPDF_ContentMarkItem(const CPDF_ContentMarkItem& that) |
+ : m_MarkName(that.m_MarkName), |
+ m_ParamType(that.m_ParamType), |
+ m_pPropertiesDict(that.m_pPropertiesDict) { |
+ if (that.m_pDirectDict) |
+ m_pDirectDict.reset(that.m_pDirectDict->Clone()->AsDictionary()); |
} |
-CPDF_ContentMarkItem::~CPDF_ContentMarkItem() { |
- if (m_ParamType == DirectDict && m_pParam) |
- m_pParam->Release(); |
+CPDF_ContentMarkItem::~CPDF_ContentMarkItem() {} |
+ |
+CPDF_Dictionary* CPDF_ContentMarkItem::GetParam() const { |
+ switch (m_ParamType) { |
+ case PropertiesDict: |
+ return m_pPropertiesDict; |
+ case DirectDict: |
+ return m_pDirectDict.get(); |
+ case None: |
+ default: |
+ return nullptr; |
+ } |
} |
FX_BOOL CPDF_ContentMarkItem::HasMCID() const { |
- if (m_pParam && |
- (m_ParamType == DirectDict || m_ParamType == PropertiesDict)) { |
- return m_pParam->KeyExist("MCID"); |
- } |
- return FALSE; |
+ CPDF_Dictionary* pDict = GetParam(); |
+ return pDict && pDict->KeyExist("MCID"); |
+} |
+ |
+void CPDF_ContentMarkItem::SetDirectDict( |
+ std::unique_ptr<CPDF_Dictionary, ReleaseDeleter<CPDF_Dictionary>> pDict) { |
+ m_ParamType = DirectDict; |
+ m_pDirectDict = std::move(pDict); |
+} |
+ |
+void CPDF_ContentMarkItem::SetPropertiesDict(CPDF_Dictionary* pDict) { |
+ m_ParamType = PropertiesDict; |
+ m_pPropertiesDict = pDict; |
} |