summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Sepez <tsepez@chromium.org>2015-03-06 12:28:34 -0800
committerTom Sepez <tsepez@chromium.org>2015-03-06 12:28:34 -0800
commit0700106e13b84781c86398bb5e2b5dd3ed894007 (patch)
tree4037c37f3bfb07279ec7547a009641a3e4754eb3
parent8842c6214cf70fa4237d17684cc9f609536c0240 (diff)
downloadpdfium-0700106e13b84781c86398bb5e2b5dd3ed894007.tar.xz
Make conversions for CPDF_Link explicit.
Precursor to taking a second shot at cleaning up the FPDF_* APIs. A FPDF_LINK is a CPDF_Dictionary, and a CPDF_Link is a structure holding a FPDF_LINK. 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. R=thestig@chromium.org Review URL: https://codereview.chromium.org/985503005
-rw-r--r--core/include/fpdfdoc/fpdf_doc.h18
-rw-r--r--core/src/fpdfdoc/doc_link.cpp18
-rw-r--r--fpdfsdk/src/fpdfdoc.cpp9
3 files changed, 17 insertions, 28 deletions
diff --git a/core/include/fpdfdoc/fpdf_doc.h b/core/include/fpdfdoc/fpdf_doc.h
index dac215e711..002f7ea1f4 100644
--- a/core/include/fpdfdoc/fpdf_doc.h
+++ b/core/include/fpdfdoc/fpdf_doc.h
@@ -545,26 +545,16 @@ protected:
class CPDF_Link : public CFX_Object
{
public:
+ CPDF_Link() : m_pDict(nullptr) { }
+ explicit CPDF_Link(CPDF_Dictionary* pDict) : m_pDict(pDict) { }
- CPDF_Link(CPDF_Dictionary* pDict = NULL)
- {
- m_pDict = pDict;
- }
-
- operator CPDF_Dictionary*() const
- {
- return m_pDict;
- }
+ CPDF_Dictionary* GetDict() const { return m_pDict; }
CFX_FloatRect GetRect();
-
-
-
CPDF_Dest GetDest(CPDF_Document* pDoc);
-
CPDF_Action GetAction();
-
+protected:
CPDF_Dictionary* m_pDict;
};
#define ANNOTFLAG_INVISIBLE 1
diff --git a/core/src/fpdfdoc/doc_link.cpp b/core/src/fpdfdoc/doc_link.cpp
index b7c640af5e..4a42e21388 100644
--- a/core/src/fpdfdoc/doc_link.cpp
+++ b/core/src/fpdfdoc/doc_link.cpp
@@ -44,26 +44,26 @@ int CPDF_LinkList::CountLinks(CPDF_Page* pPage)
CPDF_Link CPDF_LinkList::GetLink(CPDF_Page* pPage, int index)
{
CFX_PtrArray* pPageLinkList = GetPageLinks(pPage);
- if (pPageLinkList == NULL) {
- return NULL;
+ if (!pPageLinkList) {
+ return CPDF_Link();
}
- return (CPDF_Dictionary*)pPageLinkList->GetAt(index);
+ return CPDF_Link((CPDF_Dictionary*)pPageLinkList->GetAt(index));
}
CPDF_Link CPDF_LinkList::GetLinkAtPoint(CPDF_Page* pPage, FX_FLOAT pdf_x, FX_FLOAT pdf_y)
{
CFX_PtrArray* pPageLinkList = GetPageLinks(pPage);
- if (pPageLinkList == NULL) {
- return NULL;
+ if (!pPageLinkList) {
+ return CPDF_Link();
}
int size = pPageLinkList->GetSize();
for (int i = size - 1; i >= 0; --i) {
- CPDF_Link Link = (CPDF_Dictionary*)pPageLinkList->GetAt(i);
- CPDF_Rect rect = Link.GetRect();
+ CPDF_Link link((CPDF_Dictionary*)pPageLinkList->GetAt(i));
+ CPDF_Rect rect = link.GetRect();
if (rect.Contains(pdf_x, pdf_y)) {
- return Link;
+ return link;
}
}
- return NULL;
+ return CPDF_Link();
}
void CPDF_LinkList::LoadPageLinks(CPDF_Page* pPage, CFX_PtrArray* pList)
{
diff --git a/fpdfsdk/src/fpdfdoc.cpp b/fpdfsdk/src/fpdfdoc.cpp
index ab3dd2c5b8..d1f741bca9 100644
--- a/fpdfsdk/src/fpdfdoc.cpp
+++ b/fpdfsdk/src/fpdfdoc.cpp
@@ -176,18 +176,17 @@ DLLEXPORT FPDF_LINK STDCALL FPDFLink_GetLinkAtPoint(FPDF_PAGE page, double x, do
pLinkList = FX_NEW CPDF_LinkList(pDoc);
pDoc->SetPrivateData(&THISMODULE, pLinkList, ReleaseLinkList);
}
- return pLinkList->GetLinkAtPoint(pPage, (FX_FLOAT)x, (FX_FLOAT)y);
+ return pLinkList->GetLinkAtPoint(pPage, (FX_FLOAT)x, (FX_FLOAT)y).GetDict();
}
DLLEXPORT FPDF_DEST STDCALL FPDFLink_GetDest(FPDF_DOCUMENT document, FPDF_LINK pDict)
{
if (!document)
return NULL;
- CPDF_Document* pDoc = (CPDF_Document*)document;
if (!pDict)
return NULL;
- CPDF_Link link = (CPDF_Dictionary*)pDict;
-
+ CPDF_Document* pDoc = (CPDF_Document*)document;
+ CPDF_Link link((CPDF_Dictionary*)pDict);
FPDF_DEST dest = link.GetDest(pDoc).GetObject();
if (dest)
return dest;
@@ -202,7 +201,7 @@ DLLEXPORT FPDF_ACTION STDCALL FPDFLink_GetAction(FPDF_LINK pDict)
{
if (!pDict)
return NULL;
- CPDF_Link link = (CPDF_Dictionary*)pDict;
+ CPDF_Link link((CPDF_Dictionary*)pDict);
return link.GetAction().GetDict();
}