summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Sepez <tsepez@chromium.org>2015-03-06 10:34:48 -0800
committerTom Sepez <tsepez@chromium.org>2015-03-06 10:34:48 -0800
commit5a370d77d0db7550e91888f0ff50ee305f0f9f3d (patch)
tree8904d0b898864938c5ad8b4eb26c0ae9fbcb21b4
parent7348faecc70ca3bff5aa3715da32032f0c897c23 (diff)
downloadpdfium-5a370d77d0db7550e91888f0ff50ee305f0f9f3d.tar.xz
Make conversion between CPDF_Dest and its object explicit.
Precursor to taking a second shot at cleaning up the FPDF_* APIs. A FPDF_Dest is a CPDF_Array, and a CPDF_Dest is a structure holding a FPDF_Dest. This goes against the convention that FPDF_ types get cast to CPDF_* types, so we want to make it clear where objects are getting constructed, etc. R=thestig@chromium.org Review URL: https://codereview.chromium.org/984703004
-rw-r--r--core/include/fpdfdoc/fpdf_doc.h19
-rw-r--r--core/src/fpdfdoc/doc_action.cpp19
-rw-r--r--core/src/fpdfdoc/doc_bookmark.cpp13
-rw-r--r--core/src/fpdfdoc/doc_link.cpp11
-rw-r--r--fpdfsdk/src/fpdfdoc.cpp12
-rw-r--r--fpdfsdk/src/fsdk_actionhandler.cpp2
6 files changed, 35 insertions, 41 deletions
diff --git a/core/include/fpdfdoc/fpdf_doc.h b/core/include/fpdfdoc/fpdf_doc.h
index dbcc7f433e..dac215e711 100644
--- a/core/include/fpdfdoc/fpdf_doc.h
+++ b/core/include/fpdfdoc/fpdf_doc.h
@@ -124,28 +124,19 @@ public:
class CPDF_Dest : public CFX_Object
{
public:
+ CPDF_Dest() : m_pObj(nullptr) { }
+ explicit CPDF_Dest(CPDF_Object* pObj) : m_pObj(pObj) { }
- CPDF_Dest(CPDF_Object* pObj = NULL)
- {
- m_pObj = pObj;
- }
-
- operator CPDF_Object* () const
- {
- return m_pObj;
- }
+ operator bool () const { return m_pObj != NULL; }
+ CPDF_Object* GetObject() const { return m_pObj; }
CFX_ByteString GetRemoteName();
-
int GetPageIndex(CPDF_Document* pDoc);
-
FX_DWORD GetPageObjNum();
-
int GetZoomMode();
-
FX_FLOAT GetParam(int index);
-
+protected:
CPDF_Object* m_pObj;
};
class CPDF_OCContext : public CFX_Object, public IPDF_OCContext
diff --git a/core/src/fpdfdoc/doc_action.cpp b/core/src/fpdfdoc/doc_action.cpp
index 324153563a..ac40335a4c 100644
--- a/core/src/fpdfdoc/doc_action.cpp
+++ b/core/src/fpdfdoc/doc_action.cpp
@@ -7,25 +7,26 @@
#include "../../include/fpdfdoc/fpdf_doc.h"
CPDF_Dest CPDF_Action::GetDest(CPDF_Document* pDoc) const
{
- if (m_pDict == NULL) {
- return NULL;
+ if (!m_pDict) {
+ return CPDF_Dest();
}
CFX_ByteString type = m_pDict->GetString("S");
if (type != "GoTo" && type != "GoToR") {
- return NULL;
+ return CPDF_Dest();
}
CPDF_Object* pDest = m_pDict->GetElementValue("D");
- if (pDest == NULL) {
- return NULL;
+ if (!pDest) {
+ return CPDF_Dest();
}
if (pDest->GetType() == PDFOBJ_STRING || pDest->GetType() == PDFOBJ_NAME) {
CPDF_NameTree name_tree(pDoc, FX_BSTRC("Dests"));
CFX_ByteStringC name = pDest->GetString();
- return name_tree.LookupNamedDest(pDoc, name);
- } else if (pDest->GetType() == PDFOBJ_ARRAY) {
- return (CPDF_Array*)pDest;
+ return CPDF_Dest(name_tree.LookupNamedDest(pDoc, name));
}
- return NULL;
+ if (pDest->GetType() == PDFOBJ_ARRAY) {
+ return CPDF_Dest((CPDF_Array*)pDest);
+ }
+ return CPDF_Dest();
}
const FX_CHAR* g_sATypes[] = {"Unknown", "GoTo", "GoToR", "GoToE", "Launch", "Thread", "URI", "Sound", "Movie",
"Hide", "Named", "SubmitForm", "ResetForm", "ImportData", "JavaScript", "SetOCGState",
diff --git a/core/src/fpdfdoc/doc_bookmark.cpp b/core/src/fpdfdoc/doc_bookmark.cpp
index a3a194337e..9814de61bf 100644
--- a/core/src/fpdfdoc/doc_bookmark.cpp
+++ b/core/src/fpdfdoc/doc_bookmark.cpp
@@ -68,20 +68,21 @@ CFX_WideString CPDF_Bookmark::GetTitle() const
CPDF_Dest CPDF_Bookmark::GetDest(CPDF_Document* pDocument) const
{
if (!m_pDict) {
- return NULL;
+ return CPDF_Dest();
}
CPDF_Object* pDest = m_pDict->GetElementValue("Dest");
if (!pDest) {
- return NULL;
+ return CPDF_Dest();
}
if (pDest->GetType() == PDFOBJ_STRING || pDest->GetType() == PDFOBJ_NAME) {
CPDF_NameTree name_tree(pDocument, FX_BSTRC("Dests"));
CFX_ByteStringC name = pDest->GetString();
- return name_tree.LookupNamedDest(pDocument, name);
- } else if (pDest->GetType() == PDFOBJ_ARRAY) {
- return (CPDF_Array*)pDest;
+ return CPDF_Dest(name_tree.LookupNamedDest(pDocument, name));
}
- return NULL;
+ if (pDest->GetType() == PDFOBJ_ARRAY) {
+ return CPDF_Dest((CPDF_Array*)pDest);
+ }
+ return CPDF_Dest();
}
CPDF_Action CPDF_Bookmark::GetAction() const
{
diff --git a/core/src/fpdfdoc/doc_link.cpp b/core/src/fpdfdoc/doc_link.cpp
index e7b6be5ca4..b7c640af5e 100644
--- a/core/src/fpdfdoc/doc_link.cpp
+++ b/core/src/fpdfdoc/doc_link.cpp
@@ -90,16 +90,17 @@ CPDF_Dest CPDF_Link::GetDest(CPDF_Document* pDoc)
{
CPDF_Object* pDest = m_pDict->GetElementValue("Dest");
if (pDest == NULL) {
- return NULL;
+ return CPDF_Dest();
}
if (pDest->GetType() == PDFOBJ_STRING || pDest->GetType() == PDFOBJ_NAME) {
CPDF_NameTree name_tree(pDoc, FX_BSTRC("Dests"));
CFX_ByteStringC name = pDest->GetString();
- return name_tree.LookupNamedDest(pDoc, name);
- } else if (pDest->GetType() == PDFOBJ_ARRAY) {
- return (CPDF_Array*)pDest;
+ return CPDF_Dest(name_tree.LookupNamedDest(pDoc, name));
}
- return NULL;
+ if (pDest->GetType() == PDFOBJ_ARRAY) {
+ return CPDF_Dest((CPDF_Array*)pDest);
+ }
+ return CPDF_Dest();
}
CPDF_Action CPDF_Link::GetAction()
{
diff --git a/fpdfsdk/src/fpdfdoc.cpp b/fpdfsdk/src/fpdfdoc.cpp
index f21d5cf938..ab3dd2c5b8 100644
--- a/fpdfsdk/src/fpdfdoc.cpp
+++ b/fpdfsdk/src/fpdfdoc.cpp
@@ -84,12 +84,12 @@ DLLEXPORT FPDF_DEST STDCALL FPDFBookmark_GetDest(FPDF_DOCUMENT document, FPDF_BO
CPDF_Document* pDoc = (CPDF_Document*)document;
CPDF_Dest dest = bookmark.GetDest(pDoc);
if (dest)
- return dest;
+ return dest.GetObject();
// If this bookmark is not directly associated with a dest, we try to get action
CPDF_Action action = bookmark.GetAction();
if (!action)
return NULL;
- return action.GetDest(pDoc);
+ return action.GetDest(pDoc).GetObject();
}
DLLEXPORT FPDF_ACTION STDCALL FPDFBookmark_GetAction(FPDF_BOOKMARK pDict)
@@ -129,7 +129,7 @@ DLLEXPORT FPDF_DEST STDCALL FPDFAction_GetDest(FPDF_DOCUMENT document, FPDF_ACTI
return NULL;
CPDF_Document* pDoc = (CPDF_Document*)document;
CPDF_Action action((CPDF_Dictionary*)pDict);
- return action.GetDest(pDoc);
+ return action.GetDest(pDoc).GetObject();
}
DLLEXPORT unsigned long STDCALL FPDFAction_GetURIPath(FPDF_DOCUMENT document, FPDF_ACTION pDict,
@@ -155,7 +155,7 @@ DLLEXPORT unsigned long STDCALL FPDFDest_GetPageIndex(FPDF_DOCUMENT document, FP
if (!pDict)
return 0;
CPDF_Document* pDoc = (CPDF_Document*)document;
- CPDF_Dest dest = (CPDF_Array*)pDict;
+ CPDF_Dest dest((CPDF_Array*)pDict);
return dest.GetPageIndex(pDoc);
}
@@ -188,14 +188,14 @@ DLLEXPORT FPDF_DEST STDCALL FPDFLink_GetDest(FPDF_DOCUMENT document, FPDF_LINK p
return NULL;
CPDF_Link link = (CPDF_Dictionary*)pDict;
- FPDF_DEST dest = link.GetDest(pDoc);
+ FPDF_DEST dest = link.GetDest(pDoc).GetObject();
if (dest)
return dest;
// If this link is not directly associated with a dest, we try to get action
CPDF_Action action = link.GetAction();
if (!action)
return NULL;
- return action.GetDest(pDoc);
+ return action.GetDest(pDoc).GetObject();
}
DLLEXPORT FPDF_ACTION STDCALL FPDFLink_GetAction(FPDF_LINK pDict)
diff --git a/fpdfsdk/src/fsdk_actionhandler.cpp b/fpdfsdk/src/fsdk_actionhandler.cpp
index e3fdad393d..fb8bcb2cb7 100644
--- a/fpdfsdk/src/fsdk_actionhandler.cpp
+++ b/fpdfsdk/src/fsdk_actionhandler.cpp
@@ -564,7 +564,7 @@ void CPDFSDK_ActionHandler::DoAction_GoTo(CPDFSDK_Document* pDocument,
CPDF_Dest MyDest = action.GetDest(pPDFDocument);
int nPageIndex = MyDest.GetPageIndex(pPDFDocument);
int nFitType = MyDest.GetZoomMode();
- const CPDF_Array * pMyArray = (CPDF_Array*)MyDest.m_pObj;
+ const CPDF_Array * pMyArray = (CPDF_Array*)MyDest.GetObject();
float* pPosAry = NULL;
int sizeOfAry = 0;
if (pMyArray != NULL)