Chromium Code Reviews| Index: fpdfsdk/src/fpdfdoc.cpp |
| diff --git a/fpdfsdk/src/fpdfdoc.cpp b/fpdfsdk/src/fpdfdoc.cpp |
| index 0006094f1afa85e5c00fcda06db67880392ff862..87bdc008618eed5e31cefebaa54debb672be3e41 100644 |
| --- a/fpdfsdk/src/fpdfdoc.cpp |
| +++ b/fpdfsdk/src/fpdfdoc.cpp |
| @@ -9,11 +9,13 @@ |
| #include "../include/fpdfxfa/fpdfxfa_doc.h" |
| #include "../include/fpdfxfa/fpdfxfa_page.h" |
| -static int THISMODULE = 0; |
| +namespace { |
| -static CPDF_Bookmark FindBookmark(const CPDF_BookmarkTree& tree, |
| - CPDF_Bookmark bookmark, |
| - const CFX_WideString& title) { |
| +int THISMODULE = 0; |
| + |
| +CPDF_Bookmark FindBookmark(const CPDF_BookmarkTree& tree, |
| + CPDF_Bookmark bookmark, |
| + const CFX_WideString& title) { |
| if (bookmark && bookmark.GetTitle().CompareNoCase(title.c_str()) == 0) { |
| // First check this item |
| return bookmark; |
| @@ -30,6 +32,26 @@ static CPDF_Bookmark FindBookmark(const CPDF_BookmarkTree& tree, |
| return CPDF_Bookmark(); |
| } |
| +void ReleaseLinkList(void* data) { |
| + delete (CPDF_LinkList*)data; |
| +} |
| + |
| +CPDF_LinkList* GetLinkList(CPDF_Page* page) { |
| + if (!page) |
| + return nullptr; |
| + |
| + // Link list is stored with the document |
| + CPDF_Document* pDoc = page->m_pDocument; |
| + CPDF_LinkList* pLinkList = (CPDF_LinkList*)pDoc->GetPrivateData(&THISMODULE); |
| + if (!pLinkList) { |
| + pLinkList = new CPDF_LinkList; |
| + pDoc->SetPrivateData(&THISMODULE, pLinkList, ReleaseLinkList); |
| + } |
| + return pLinkList; |
| +} |
| + |
| +} // namespace |
| + |
| DLLEXPORT FPDF_BOOKMARK STDCALL |
| FPDFBookmark_GetFirstChild(FPDF_DOCUMENT document, FPDF_BOOKMARK pDict) { |
| if (!document || !pDict) |
| @@ -163,26 +185,36 @@ DLLEXPORT unsigned long STDCALL FPDFDest_GetPageIndex(FPDF_DOCUMENT document, |
| return dest.GetPageIndex(pDoc); |
| } |
| -static void ReleaseLinkList(void* data) { |
| - delete (CPDF_LinkList*)data; |
| -} |
| - |
| DLLEXPORT FPDF_LINK STDCALL FPDFLink_GetLinkAtPoint(FPDF_PAGE page, |
| double x, |
| double y) { |
| - if (!page) |
| - return NULL; |
| - CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); |
| + CPDFXFA_Page* pXFAPage = (CPDFXFA_Page*)page; |
|
Lei Zhang
2015/08/15 02:23:58
conflicted here.
|
| + CPDF_Page* pPage = pXFAPage->GetPDFPage(); |
| if (!pPage) |
| - return NULL; |
| - // Link list is stored with the document |
| - CPDF_Document* pDoc = pPage->m_pDocument; |
| - CPDF_LinkList* pLinkList = (CPDF_LinkList*)pDoc->GetPrivateData(&THISMODULE); |
| - if (!pLinkList) { |
| - pLinkList = new CPDF_LinkList(pDoc); |
| - pDoc->SetPrivateData(&THISMODULE, pLinkList, ReleaseLinkList); |
| - } |
| - return pLinkList->GetLinkAtPoint(pPage, (FX_FLOAT)x, (FX_FLOAT)y).GetDict(); |
| + return nullptr; |
| + |
| + CPDF_LinkList* pLinkList = GetLinkList(pPage); |
| + if (!pLinkList) |
| + return nullptr; |
| + |
| + return pLinkList->GetLinkAtPoint(pPage, (FX_FLOAT)x, (FX_FLOAT)y, nullptr) |
| + .GetDict(); |
| +} |
| + |
| +DLLEXPORT int STDCALL |
| +FPDFLink_GetLinkZOrderAtPoint(FPDF_PAGE page, double x, double y) { |
| + CPDFXFA_Page* pXFAPage = (CPDFXFA_Page*)page; |
| + CPDF_Page* pPage = pXFAPage->GetPDFPage(); |
| + if (!pPage) |
| + return -1; |
| + |
| + CPDF_LinkList* pLinkList = GetLinkList(pPage); |
| + if (!pLinkList) |
| + return -1; |
| + |
| + int z_order = -1; |
| + pLinkList->GetLinkAtPoint(pPage, (FX_FLOAT)x, (FX_FLOAT)y, &z_order); |
| + return z_order; |
| } |
| DLLEXPORT FPDF_DEST STDCALL FPDFLink_GetDest(FPDF_DOCUMENT document, |