Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3520)

Unified Diff: fpdfsdk/cpdfsdk_baannot.cpp

Issue 2510223002: Make CPDF_Dictionary use unique pointers. (Closed)
Patch Set: rebase Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « fpdfsdk/cpdfsdk_annothandlermgr.cpp ('k') | fpdfsdk/cpdfsdk_widget.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
« no previous file with comments | « fpdfsdk/cpdfsdk_annothandlermgr.cpp ('k') | fpdfsdk/cpdfsdk_widget.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698