| Index: fpdfsdk/src/fpdfdoc.cpp
|
| diff --git a/fpdfsdk/src/fpdfdoc.cpp b/fpdfsdk/src/fpdfdoc.cpp
|
| index 0006094f1afa85e5c00fcda06db67880392ff862..47225dd2b182fff057c8842fb116aa9bb0d83851 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,35 @@ 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) {
|
| + CPDFXFA_Page* pXFAPage = (CPDFXFA_Page*)page;
|
| + CPDF_Page* pPage = pXFAPage->GetPDFPage();
|
| + if (!pPage)
|
| + return nullptr;
|
| +
|
| + CPDF_LinkList* pLinkList = GetLinkList(pPage);
|
| + if (!pLinkList)
|
| + return nullptr;
|
| +
|
| + return pLinkList->GetLinkAtPoint(pPage, (FX_FLOAT)x, (FX_FLOAT)y, nullptr)
|
| + .GetDict();
|
| }
|
|
|
| -DLLEXPORT FPDF_LINK STDCALL FPDFLink_GetLinkAtPoint(FPDF_PAGE page,
|
| - double x,
|
| - double y) {
|
| - if (!page)
|
| - return NULL;
|
| - CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage();
|
| +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 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 -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,
|
|
|