Index: fpdfsdk/cpdfsdk_baannot.cpp |
diff --git a/fpdfsdk/cpdfsdk_baannot.cpp b/fpdfsdk/cpdfsdk_baannot.cpp |
index ee4b55d290a8999065977335d380e9293c5cd845..9fb1e88a84b2900b45cf7e829f5abb4b1435a037 100644 |
--- a/fpdfsdk/cpdfsdk_baannot.cpp |
+++ b/fpdfsdk/cpdfsdk_baannot.cpp |
@@ -6,10 +6,15 @@ |
#include "fpdfsdk/cpdfsdk_baannot.h" |
+#include <algorithm> |
+ |
#include "core/fpdfapi/parser/cpdf_array.h" |
#include "core/fpdfapi/parser/cpdf_document.h" |
+#include "core/fpdfapi/parser/cpdf_name.h" |
#include "core/fpdfapi/parser/cpdf_number.h" |
+#include "core/fpdfapi/parser/cpdf_reference.h" |
#include "core/fpdfapi/parser/cpdf_stream.h" |
+#include "core/fpdfapi/parser/cpdf_string.h" |
#include "core/fpdfapi/parser/fpdf_parser_decode.h" |
#include "fpdfsdk/cpdfsdk_datetime.h" |
#include "fpdfsdk/cpdfsdk_pageview.h" |
@@ -89,11 +94,12 @@ void CPDFSDK_BAAnnot::ClearCachedAP() { |
} |
void CPDFSDK_BAAnnot::SetContents(const CFX_WideString& sContents) { |
- if (sContents.IsEmpty()) |
+ if (sContents.IsEmpty()) { |
m_pAnnot->GetAnnotDict()->RemoveFor("Contents"); |
- else |
- m_pAnnot->GetAnnotDict()->SetStringFor("Contents", |
- PDF_EncodeText(sContents)); |
+ } else { |
+ m_pAnnot->GetAnnotDict()->SetNewFor<CPDF_String>( |
+ "Contents", PDF_EncodeText(sContents), false); |
+ } |
} |
CFX_WideString CPDFSDK_BAAnnot::GetContents() const { |
@@ -101,10 +107,12 @@ CFX_WideString CPDFSDK_BAAnnot::GetContents() const { |
} |
void CPDFSDK_BAAnnot::SetAnnotName(const CFX_WideString& sName) { |
- if (sName.IsEmpty()) |
+ if (sName.IsEmpty()) { |
m_pAnnot->GetAnnotDict()->RemoveFor("NM"); |
- else |
- m_pAnnot->GetAnnotDict()->SetStringFor("NM", PDF_EncodeText(sName)); |
+ } else { |
+ m_pAnnot->GetAnnotDict()->SetNewFor<CPDF_String>( |
+ "NM", PDF_EncodeText(sName), false); |
+ } |
} |
CFX_WideString CPDFSDK_BAAnnot::GetAnnotName() const { |
@@ -114,25 +122,23 @@ CFX_WideString CPDFSDK_BAAnnot::GetAnnotName() const { |
void CPDFSDK_BAAnnot::SetModifiedDate(const FX_SYSTEMTIME& st) { |
CPDFSDK_DateTime dt(st); |
CFX_ByteString str = dt.ToPDFDateTimeString(); |
- |
if (str.IsEmpty()) |
m_pAnnot->GetAnnotDict()->RemoveFor("M"); |
else |
- m_pAnnot->GetAnnotDict()->SetStringFor("M", str); |
+ m_pAnnot->GetAnnotDict()->SetNewFor<CPDF_String>("M", str, false); |
} |
FX_SYSTEMTIME CPDFSDK_BAAnnot::GetModifiedDate() const { |
FX_SYSTEMTIME systime; |
CFX_ByteString str = m_pAnnot->GetAnnotDict()->GetStringFor("M"); |
- |
CPDFSDK_DateTime dt(str); |
dt.ToSystemTime(systime); |
- |
return systime; |
} |
void CPDFSDK_BAAnnot::SetFlags(uint32_t nFlags) { |
- m_pAnnot->GetAnnotDict()->SetIntegerFor("F", nFlags); |
+ m_pAnnot->GetAnnotDict()->SetNewFor<CPDF_Number>("F", |
+ static_cast<int>(nFlags)); |
} |
uint32_t CPDFSDK_BAAnnot::GetFlags() const { |
@@ -143,7 +149,7 @@ void CPDFSDK_BAAnnot::SetAppState(const CFX_ByteString& str) { |
if (str.IsEmpty()) |
m_pAnnot->GetAnnotDict()->RemoveFor("AS"); |
else |
- m_pAnnot->GetAnnotDict()->SetStringFor("AS", str); |
+ m_pAnnot->GetAnnotDict()->SetNewFor<CPDF_String>("AS", str, false); |
} |
CFX_ByteString CPDFSDK_BAAnnot::GetAppState() const { |
@@ -151,7 +157,7 @@ CFX_ByteString CPDFSDK_BAAnnot::GetAppState() const { |
} |
void CPDFSDK_BAAnnot::SetStructParent(int key) { |
- m_pAnnot->GetAnnotDict()->SetIntegerFor("StructParent", key); |
+ m_pAnnot->GetAnnotDict()->SetNewFor<CPDF_Number>("StructParent", key); |
} |
int CPDFSDK_BAAnnot::GetStructParent() const { |
@@ -165,12 +171,10 @@ void CPDFSDK_BAAnnot::SetBorderWidth(int nWidth) { |
pBorder->SetNewAt<CPDF_Number>(2, nWidth); |
} else { |
CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDictFor("BS"); |
- if (!pBSDict) { |
- pBSDict = |
- new CPDF_Dictionary(m_pAnnot->GetDocument()->GetByteStringPool()); |
- m_pAnnot->GetAnnotDict()->SetFor("BS", pBSDict); |
- } |
- pBSDict->SetIntegerFor("W", nWidth); |
+ if (!pBSDict) |
+ pBSDict = m_pAnnot->GetAnnotDict()->SetNewFor<CPDF_Dictionary>("BS"); |
+ |
+ pBSDict->SetNewFor<CPDF_Number>("W", nWidth); |
} |
} |
@@ -186,26 +190,24 @@ int CPDFSDK_BAAnnot::GetBorderWidth() const { |
void CPDFSDK_BAAnnot::SetBorderStyle(BorderStyle nStyle) { |
CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDictFor("BS"); |
- if (!pBSDict) { |
- pBSDict = new CPDF_Dictionary(m_pAnnot->GetDocument()->GetByteStringPool()); |
- m_pAnnot->GetAnnotDict()->SetFor("BS", pBSDict); |
- } |
+ if (!pBSDict) |
+ pBSDict = m_pAnnot->GetAnnotDict()->SetNewFor<CPDF_Dictionary>("BS"); |
switch (nStyle) { |
case BorderStyle::SOLID: |
- pBSDict->SetNameFor("S", "S"); |
+ pBSDict->SetNewFor<CPDF_Name>("S", "S"); |
break; |
case BorderStyle::DASH: |
- pBSDict->SetNameFor("S", "D"); |
+ pBSDict->SetNewFor<CPDF_Name>("S", "D"); |
break; |
case BorderStyle::BEVELED: |
- pBSDict->SetNameFor("S", "B"); |
+ pBSDict->SetNewFor<CPDF_Name>("S", "B"); |
break; |
case BorderStyle::INSET: |
- pBSDict->SetNameFor("S", "I"); |
+ pBSDict->SetNewFor<CPDF_Name>("S", "I"); |
break; |
case BorderStyle::UNDERLINE: |
- pBSDict->SetNameFor("S", "U"); |
+ pBSDict->SetNewFor<CPDF_Name>("S", "U"); |
break; |
default: |
break; |
@@ -241,14 +243,13 @@ BorderStyle CPDFSDK_BAAnnot::GetBorderStyle() const { |
} |
void CPDFSDK_BAAnnot::SetColor(FX_COLORREF color) { |
- CPDF_Array* pArray = new CPDF_Array; |
+ CPDF_Array* pArray = m_pAnnot->GetAnnotDict()->SetNewFor<CPDF_Array>("C"); |
pArray->AddNew<CPDF_Number>(static_cast<FX_FLOAT>(FXSYS_GetRValue(color)) / |
255.0f); |
pArray->AddNew<CPDF_Number>(static_cast<FX_FLOAT>(FXSYS_GetGValue(color)) / |
255.0f); |
pArray->AddNew<CPDF_Number>(static_cast<FX_FLOAT>(FXSYS_GetBValue(color)) / |
255.0f); |
- m_pAnnot->GetAnnotDict()->SetFor("C", pArray); |
} |
void CPDFSDK_BAAnnot::RemoveColor() { |
@@ -297,10 +298,8 @@ void CPDFSDK_BAAnnot::WriteAppearance(const CFX_ByteString& sAPType, |
const CFX_ByteString& sContents, |
const CFX_ByteString& sAPState) { |
CPDF_Dictionary* pAPDict = m_pAnnot->GetAnnotDict()->GetDictFor("AP"); |
- if (!pAPDict) { |
- pAPDict = new CPDF_Dictionary(m_pAnnot->GetDocument()->GetByteStringPool()); |
- m_pAnnot->GetAnnotDict()->SetFor("AP", pAPDict); |
- } |
+ if (!pAPDict) |
+ pAPDict = m_pAnnot->GetAnnotDict()->SetNewFor<CPDF_Dictionary>("AP"); |
CPDF_Stream* pStream = nullptr; |
CPDF_Dictionary* pParentDict = nullptr; |
@@ -309,11 +308,9 @@ void CPDFSDK_BAAnnot::WriteAppearance(const CFX_ByteString& sAPType, |
pStream = pAPDict->GetStreamFor(sAPType); |
} else { |
CPDF_Dictionary* pAPTypeDict = pAPDict->GetDictFor(sAPType); |
- if (!pAPTypeDict) { |
- pAPTypeDict = |
- new CPDF_Dictionary(m_pAnnot->GetDocument()->GetByteStringPool()); |
- pAPDict->SetFor(sAPType, pAPTypeDict); |
- } |
+ if (!pAPTypeDict) |
+ pAPTypeDict = pAPDict->SetNewFor<CPDF_Dictionary>(sAPType); |
+ |
pParentDict = pAPTypeDict; |
pStream = pAPTypeDict->GetStreamFor(sAPState); |
} |
@@ -321,16 +318,16 @@ void CPDFSDK_BAAnnot::WriteAppearance(const CFX_ByteString& sAPType, |
if (!pStream) { |
CPDF_Document* pDoc = m_pPageView->GetPDFDocument(); |
pStream = pDoc->NewIndirect<CPDF_Stream>(); |
- pParentDict->SetReferenceFor(sAPType, pDoc, pStream); |
+ pParentDict->SetNewFor<CPDF_Reference>(sAPType, pDoc, pStream->GetObjNum()); |
} |
CPDF_Dictionary* pStreamDict = pStream->GetDict(); |
if (!pStreamDict) { |
pStreamDict = |
new CPDF_Dictionary(m_pAnnot->GetDocument()->GetByteStringPool()); |
- pStreamDict->SetNameFor("Type", "XObject"); |
- pStreamDict->SetNameFor("Subtype", "Form"); |
- pStreamDict->SetIntegerFor("FormType", 1); |
+ pStreamDict->SetNewFor<CPDF_Name>("Type", "XObject"); |
+ pStreamDict->SetNewFor<CPDF_Name>("Subtype", "Form"); |
+ pStreamDict->SetNewFor<CPDF_Number>("FormType", 1); |
pStream->InitStream(nullptr, 0, pStreamDict); |
} |
@@ -358,7 +355,8 @@ void CPDFSDK_BAAnnot::SetAction(const CPDF_Action& action) { |
CPDF_Document* pDoc = m_pPageView->GetPDFDocument(); |
if (pDict->IsInline()) |
pDict = pDoc->AddIndirectObject(pDict->Clone())->AsDictionary(); |
- m_pAnnot->GetAnnotDict()->SetReferenceFor("A", pDoc, pDict); |
+ m_pAnnot->GetAnnotDict()->SetNewFor<CPDF_Reference>("A", pDoc, |
+ pDict->GetObjNum()); |
} |
} |
@@ -372,7 +370,7 @@ CPDF_AAction CPDFSDK_BAAnnot::GetAAction() const { |
void CPDFSDK_BAAnnot::SetAAction(const CPDF_AAction& aa) { |
if (aa.GetDict() != m_pAnnot->GetAnnotDict()->GetDictFor("AA")) |
- m_pAnnot->GetAnnotDict()->SetFor("AA", aa.GetDict()); |
+ m_pAnnot->GetAnnotDict()->SetFor("AA", pdfium::WrapUnique(aa.GetDict())); |
} |
void CPDFSDK_BAAnnot::RemoveAAction() { |
@@ -381,7 +379,6 @@ void CPDFSDK_BAAnnot::RemoveAAction() { |
CPDF_Action CPDFSDK_BAAnnot::GetAAction(CPDF_AAction::AActionType eAAT) { |
CPDF_AAction AAction = GetAAction(); |
- |
if (AAction.ActionExist(eAAT)) |
return AAction.GetAction(eAAT); |