Index: fpdfsdk/src/fsdk_mgr.cpp |
diff --git a/fpdfsdk/src/fsdk_mgr.cpp b/fpdfsdk/src/fsdk_mgr.cpp |
index ed2ac1a971cb16b3efb06dec266f2d42e2547b02..2e03989d6c3ec0cf76158a55999b758bd44e3936 100644 |
--- a/fpdfsdk/src/fsdk_mgr.cpp |
+++ b/fpdfsdk/src/fsdk_mgr.cpp |
@@ -14,11 +14,13 @@ |
#include "public/fpdf_ext.h" |
#include "third_party/base/nonstd_unique_ptr.h" |
+#ifdef PDF_ENABLE_XFA |
#include "../include/fpdfxfa/fpdfxfa_app.h" |
#include "../include/fpdfxfa/fpdfxfa_doc.h" |
#include "../include/fpdfxfa/fpdfxfa_page.h" |
#include "../include/fpdfxfa/fpdfxfa_util.h" |
+#endif |
#if _FX_OS_ == _FX_ANDROID_ |
#include "time.h" |
#else |
@@ -212,9 +214,11 @@ CPDFDoc_Environment::CPDFDoc_Environment(UnderlyingDocumentType* pDoc, |
} |
CPDFDoc_Environment::~CPDFDoc_Environment() { |
+#ifdef PDF_ENABLE_XFA |
CPDFXFA_App* pProvider = CPDFXFA_App::GetInstance(); |
if (pProvider->m_pEnvList.GetSize() == 0) |
pProvider->SetJavaScriptInitialized(FALSE); |
+#endif |
} |
int CPDFDoc_Environment::JS_appAlert(const FX_WCHAR* Msg, |
@@ -538,14 +542,18 @@ FX_BOOL CPDFSDK_Document::SetFocusAnnot(CPDFSDK_Annot* pAnnot, FX_UINT nFlag) { |
if (!pAnnot) |
return FALSE; |
+#ifdef PDF_ENABLE_XFA |
CPDFSDK_Annot* pLastFocusAnnot = m_pFocusAnnot; |
+#endif |
CPDFSDK_PageView* pPageView = pAnnot->GetPageView(); |
if (pPageView && pPageView->IsValid()) { |
CPDFSDK_AnnotHandlerMgr* pAnnotHandler = m_pEnv->GetAnnotHandlerMgr(); |
if (!m_pFocusAnnot) { |
+#ifdef PDF_ENABLE_XFA |
if (!pAnnotHandler->Annot_OnChangeFocus(pAnnot, pLastFocusAnnot)) |
return FALSE; |
+#endif |
if (!pAnnotHandler->Annot_OnSetFocus(pAnnot, nFlag)) |
return FALSE; |
if (!m_pFocusAnnot) { |
@@ -562,10 +570,12 @@ FX_BOOL CPDFSDK_Document::KillFocusAnnot(FX_UINT nFlag) { |
CPDFSDK_AnnotHandlerMgr* pAnnotHandler = m_pEnv->GetAnnotHandlerMgr(); |
CPDFSDK_Annot* pFocusAnnot = m_pFocusAnnot; |
m_pFocusAnnot = nullptr; |
+#ifdef PDF_ENABLE_XFA |
if (!pAnnotHandler->Annot_OnChangeFocus(nullptr, pFocusAnnot)) |
return FALSE; |
+#endif |
if (pAnnotHandler->Annot_OnKillFocus(pFocusAnnot, nFlag)) { |
if (pFocusAnnot->GetType() == FX_BSTRC("Widget")) { |
CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pFocusAnnot; |
@@ -612,13 +622,25 @@ CPDFSDK_PageView::CPDFSDK_PageView(CPDFSDK_Document* pSDKDoc, |
m_bExitWidget(FALSE), |
m_bOnWidget(FALSE), |
m_bValid(FALSE), |
+#ifndef PDF_ENABLE_XFA |
+ m_bLocked(FALSE), |
+ m_bTakeOverPage(FALSE) { |
+#else |
m_bLocked(FALSE) { |
+#endif |
CPDFSDK_InterForm* pInterForm = pSDKDoc->GetInterForm(); |
if (pInterForm) { |
CPDF_InterForm* pPDFInterForm = pInterForm->GetInterForm(); |
+#ifndef PDF_ENABLE_XFA |
+ pPDFInterForm->FixPageFields(page); |
+#else |
if (page->GetPDFPage()) |
pPDFInterForm->FixPageFields(page->GetPDFPage()); |
+#endif |
} |
+#ifndef PDF_ENABLE_XFA |
+ m_page->SetPrivateData((void*)m_page, (void*)this, nullptr); |
+#endif |
} |
CPDFSDK_PageView::~CPDFSDK_PageView() { |
@@ -629,14 +651,26 @@ CPDFSDK_PageView::~CPDFSDK_PageView() { |
m_fxAnnotArray.clear(); |
m_pAnnotList.reset(); |
+#ifndef PDF_ENABLE_XFA |
+ |
+ m_page->RemovePrivateData((void*)m_page); |
+ if (m_bTakeOverPage) { |
+ delete m_page; |
+ } |
+#endif |
} |
void CPDFSDK_PageView::PageView_OnDraw(CFX_RenderDevice* pDevice, |
CPDF_Matrix* pUser2Device, |
+#ifndef PDF_ENABLE_XFA |
+ CPDF_RenderOptions* pOptions) { |
+#else |
CPDF_RenderOptions* pOptions, |
const FX_RECT& pClip) { |
+#endif |
m_curMatrix = *pUser2Device; |
CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); |
+#ifdef PDF_ENABLE_XFA |
CPDFXFA_Page* pPage = GetPDFXFAPage(); |
if (pPage == NULL) |
return; |
@@ -666,6 +700,7 @@ void CPDFSDK_PageView::PageView_OnDraw(CFX_RenderDevice* pDevice, |
#endif // PDF_ENABLE_XFA |
// for pdf/static xfa. |
+#endif |
CPDFSDK_AnnotIterator annotIterator(this, true); |
while (CPDFSDK_Annot* pSDKAnnot = annotIterator.Next()) { |
CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr(); |
@@ -717,9 +752,13 @@ CPDFSDK_Annot* CPDFSDK_PageView::GetFXWidgetAtPoint(FX_FLOAT pageX, |
CPDFSDK_AnnotHandlerMgr* pAnnotMgr = pEnv->GetAnnotHandlerMgr(); |
CPDFSDK_AnnotIterator annotIterator(this, false); |
while (CPDFSDK_Annot* pSDKAnnot = annotIterator.Next()) { |
+#ifndef PDF_ENABLE_XFA |
+ if (pSDKAnnot->GetType() == "Widget") { |
+#else |
bool bHitTest = pSDKAnnot->GetType() == "Widget"; |
bHitTest = bHitTest || pSDKAnnot->GetType() == FSDK_XFAWIDGET_TYPENAME; |
if (bHitTest) { |
+#endif |
pAnnotMgr->Annot_OnGetViewBBox(this, pSDKAnnot); |
CPDF_Point point(pageX, pageY); |
if (pAnnotMgr->Annot_OnHitTest(this, pSDKAnnot, point)) |
@@ -760,6 +799,7 @@ CPDFSDK_Annot* CPDFSDK_PageView::AddAnnot(CPDF_Annot* pPDFAnnot) { |
return pSDKAnnot; |
} |
+#ifdef PDF_ENABLE_XFA |
CPDFSDK_Annot* CPDFSDK_PageView::AddAnnot(IXFA_Widget* pPDFAnnot) { |
if (!pPDFAnnot) |
return nullptr; |
@@ -778,6 +818,7 @@ CPDFSDK_Annot* CPDFSDK_PageView::AddAnnot(IXFA_Widget* pPDFAnnot) { |
return pSDKAnnot; |
} |
+#endif |
CPDFSDK_Annot* CPDFSDK_PageView::AddAnnot(CPDF_Dictionary* pDict) { |
return pDict ? AddAnnot(pDict->GetString("Subtype"), pDict) : nullptr; |
} |
@@ -788,6 +829,9 @@ CPDFSDK_Annot* CPDFSDK_PageView::AddAnnot(const FX_CHAR* lpSubType, |
} |
FX_BOOL CPDFSDK_PageView::DeleteAnnot(CPDFSDK_Annot* pAnnot) { |
+#ifndef PDF_ENABLE_XFA |
+ return FALSE; |
+#else |
if (!pAnnot) |
return FALSE; |
CPDFXFA_Page* pPage = pAnnot->GetPDFXFAPage(); |
@@ -802,10 +846,14 @@ FX_BOOL CPDFSDK_PageView::DeleteAnnot(CPDFSDK_Annot* pAnnot) { |
m_CaptureWidget = nullptr; |
return TRUE; |
+#endif |
} |
CPDF_Document* CPDFSDK_PageView::GetPDFDocument() { |
if (m_page) { |
+#ifndef PDF_ENABLE_XFA |
+ return m_page->m_pDocument; |
+#else |
return m_page->GetDocument()->GetPDFDoc(); |
} |
return NULL; |
@@ -814,6 +862,7 @@ CPDF_Document* CPDFSDK_PageView::GetPDFDocument() { |
CPDF_Page* CPDFSDK_PageView::GetPDFPage() { |
if (m_page) { |
return m_page->GetPDFPage(); |
+#endif |
} |
return NULL; |
} |
@@ -833,6 +882,7 @@ CPDFSDK_Annot* CPDFSDK_PageView::GetAnnotByDict(CPDF_Dictionary* pDict) { |
} |
return nullptr; |
} |
+#ifdef PDF_ENABLE_XFA |
CPDFSDK_Annot* CPDFSDK_PageView::GetAnnotByXFAWidget(IXFA_Widget* hWidget) { |
if (!hWidget) |
return nullptr; |
@@ -843,6 +893,7 @@ CPDFSDK_Annot* CPDFSDK_PageView::GetAnnotByXFAWidget(IXFA_Widget* hWidget) { |
} |
return nullptr; |
} |
+#endif |
FX_BOOL CPDFSDK_PageView::OnLButtonDown(const CPDF_Point& point, |
FX_UINT nFlag) { |
@@ -862,6 +913,7 @@ FX_BOOL CPDFSDK_PageView::OnLButtonDown(const CPDF_Point& point, |
return bRet; |
} |
+#ifdef PDF_ENABLE_XFA |
FX_BOOL CPDFSDK_PageView::OnRButtonDown(const CPDF_Point& point, |
FX_UINT nFlag) { |
CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); |
@@ -900,6 +952,7 @@ FX_BOOL CPDFSDK_PageView::OnRButtonUp(const CPDF_Point& point, FX_UINT nFlag) { |
return TRUE; |
} |
+#endif |
FX_BOOL CPDFSDK_PageView::OnLButtonUp(const CPDF_Point& point, FX_UINT nFlag) { |
CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); |
ASSERT(pEnv); |
@@ -985,9 +1038,24 @@ FX_BOOL CPDFSDK_PageView::OnKeyUp(int nKeyCode, int nFlag) { |
void CPDFSDK_PageView::LoadFXAnnots() { |
CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); |
+#ifdef PDF_ENABLE_XFA |
CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr(); |
+#endif |
+#ifndef PDF_ENABLE_XFA |
+ FX_BOOL enableAPUpdate = CPDF_InterForm::UpdatingAPEnabled(); |
+ // Disable the default AP construction. |
+ CPDF_InterForm::EnableUpdateAP(FALSE); |
+ m_pAnnotList.reset(new CPDF_AnnotList(m_page)); |
+ CPDF_InterForm::EnableUpdateAP(enableAPUpdate); |
+ const size_t nCount = m_pAnnotList->Count(); |
+#endif |
SetLock(TRUE); |
+#ifndef PDF_ENABLE_XFA |
+ for (size_t i = 0; i < nCount; ++i) { |
+ CPDF_Annot* pPDFAnnot = m_pAnnotList->GetAt(i); |
+ CPDF_Document* pDoc = GetPDFDocument(); |
+#else |
m_page->AddRef(); |
if (m_pSDKDoc->GetXFADocument()->GetDocType() == DOCTYPE_DYNAMIC_XFA) { |
IXFA_PageView* pageView = NULL; |
@@ -1012,12 +1080,24 @@ void CPDFSDK_PageView::LoadFXAnnots() { |
m_fxAnnotArray.push_back(pAnnot); |
pAnnotHandlerMgr->Annot_OnLoad(pAnnot); |
} |
+#endif |
+#ifndef PDF_ENABLE_XFA |
+ CheckUnSupportAnnot(pDoc, pPDFAnnot); |
+#else |
pWidgetHander->Release(); |
} else { |
CPDF_Page* pPage = m_page->GetPDFPage(); |
ASSERT(pPage != NULL); |
+#endif |
+#ifndef PDF_ENABLE_XFA |
+ CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr(); |
+ CPDFSDK_Annot* pAnnot = pAnnotHandlerMgr->NewAnnot(pPDFAnnot, this); |
+ if (!pAnnot) |
+ continue; |
+ m_fxAnnotArray.push_back(pAnnot); |
+#else |
FX_BOOL enableAPUpdate = CPDF_InterForm::UpdatingAPEnabled(); |
// Disable the default AP construction. |
CPDF_InterForm::EnableUpdateAP(FALSE); |
@@ -1033,11 +1113,18 @@ void CPDFSDK_PageView::LoadFXAnnots() { |
if (!pAnnot) |
continue; |
m_fxAnnotArray.push_back(pAnnot); |
+#endif |
+#ifndef PDF_ENABLE_XFA |
+ pAnnotHandlerMgr->Annot_OnLoad(pAnnot); |
+#else |
pAnnotHandlerMgr->Annot_OnLoad(pAnnot); |
} |
+#endif |
} |
+#ifdef PDF_ENABLE_XFA |
m_page->Release(); |
+#endif |
SetLock(FALSE); |
} |
@@ -1058,7 +1145,11 @@ void CPDFSDK_PageView::UpdateView(CPDFSDK_Annot* pAnnot) { |
int CPDFSDK_PageView::GetPageIndex() { |
if (m_page) { |
+#ifndef PDF_ENABLE_XFA |
+ CPDF_Dictionary* pDic = m_page->m_pFormDict; |
+#else |
CPDF_Dictionary* pDic = m_page->GetPDFPage()->m_pFormDict; |
+#endif |
CPDF_Document* pDoc = m_pSDKDoc->GetPDFDocument(); |
if (pDoc && pDic) { |
return pDoc->GetPageIndex(pDic->GetObjNum()); |