| Index: fpdfsdk/src/fpdfformfill.cpp
|
| diff --git a/fpdfsdk/src/fpdfformfill.cpp b/fpdfsdk/src/fpdfformfill.cpp
|
| index 0798c4e1908f4df0eea5806bace56d2bc3baa691..95defc5da4034d6940dc5939f3b03c6f246ebe74 100644
|
| --- a/fpdfsdk/src/fpdfformfill.cpp
|
| +++ b/fpdfsdk/src/fpdfformfill.cpp
|
| @@ -6,9 +6,11 @@
|
|
|
| #include "public/fpdf_formfill.h"
|
|
|
| +#ifdef PDF_ENABLE_XFA
|
| #include "../include/fpdfxfa/fpdfxfa_app.h"
|
| #include "../include/fpdfxfa/fpdfxfa_doc.h"
|
| #include "../include/fpdfxfa/fpdfxfa_page.h"
|
| +#endif
|
| #include "fpdfsdk/include/fsdk_define.h"
|
| #include "fpdfsdk/include/fsdk_mgr.h"
|
| #include "public/fpdfview.h"
|
| @@ -45,6 +47,15 @@ DLLEXPORT int STDCALL FPDFPage_HasFormFieldAtPoint(FPDF_FORMHANDLE hHandle,
|
| if (!hHandle)
|
| return -1;
|
| CPDF_Page* pPage = CPDFPageFromFPDFPage(page);
|
| +#ifndef PDF_ENABLE_XFA
|
| + if (!pPage)
|
| + return -1;
|
| + CPDF_InterForm interform(pPage->m_pDocument, FALSE);
|
| + CPDF_FormControl* pFormCtrl = interform.GetControlAtPoint(
|
| + pPage, (FX_FLOAT)page_x, (FX_FLOAT)page_y, nullptr);
|
| + if (!pFormCtrl)
|
| + return -1;
|
| +#else
|
| if (pPage) {
|
| CPDF_InterForm interform(pPage->m_pDocument, FALSE);
|
| CPDF_FormControl* pFormCtrl = interform.GetControlAtPoint(
|
| @@ -99,8 +110,14 @@ DLLEXPORT int STDCALL FPDFPage_HasFormFieldAtPoint(FPDF_FORMHANDLE hHandle,
|
|
|
| pWidgetIterator->Release();
|
| }
|
| +#endif
|
|
|
| +#ifndef PDF_ENABLE_XFA
|
| + CPDF_FormField* pFormField = pFormCtrl->GetField();
|
| + return pFormField ? pFormField->GetFieldType() : -1;
|
| +#else
|
| return -1;
|
| +#endif
|
| }
|
|
|
| DLLEXPORT int STDCALL FPDPage_HasFormFieldAtPoint(FPDF_FORMHANDLE hHandle,
|
| @@ -129,7 +146,11 @@ DLLEXPORT int STDCALL FPDFPage_FormFieldZOrderAtPoint(FPDF_FORMHANDLE hHandle,
|
| DLLEXPORT FPDF_FORMHANDLE STDCALL
|
| FPDFDOC_InitFormFillEnvironment(FPDF_DOCUMENT document,
|
| FPDF_FORMFILLINFO* formInfo) {
|
| +#ifndef PDF_ENABLE_XFA
|
| + const int kRequiredVersion = 1;
|
| +#else
|
| const int kRequiredVersion = 2;
|
| +#endif
|
| if (!formInfo || formInfo->version != kRequiredVersion)
|
| return nullptr;
|
|
|
| @@ -138,10 +159,14 @@ FPDFDOC_InitFormFillEnvironment(FPDF_DOCUMENT document,
|
| return nullptr;
|
|
|
| CPDFDoc_Environment* pEnv = new CPDFDoc_Environment(pDocument, formInfo);
|
| +#ifndef PDF_ENABLE_XFA
|
| + pEnv->SetSDKDocument(new CPDFSDK_Document(pDocument, pEnv));
|
| +#else
|
| pEnv->SetSDKDocument(pDocument->GetSDKDocument(pEnv));
|
|
|
| CPDFXFA_App* pApp = CPDFXFA_App::GetInstance();
|
| pApp->AddFormFillEnv(pEnv);
|
| +#endif
|
| return pEnv;
|
| }
|
|
|
| @@ -149,9 +174,19 @@ DLLEXPORT void STDCALL
|
| FPDFDOC_ExitFormFillEnvironment(FPDF_FORMHANDLE hHandle) {
|
| if (!hHandle)
|
| return;
|
| +#ifndef PDF_ENABLE_XFA
|
| +
|
| + CPDFDoc_Environment* pEnv = (CPDFDoc_Environment*)hHandle;
|
| + if (CPDFSDK_Document* pSDKDoc = pEnv->GetSDKDocument()) {
|
| + pEnv->SetSDKDocument(NULL);
|
| + delete pSDKDoc;
|
| + }
|
| + delete pEnv;
|
| +#else
|
| CPDFXFA_App* pApp = CPDFXFA_App::GetInstance();
|
| pApp->RemoveFormFillEnv((CPDFDoc_Environment*)hHandle);
|
| delete (CPDFDoc_Environment*)hHandle;
|
| +#endif
|
| }
|
|
|
| DLLEXPORT FPDF_BOOL STDCALL FORM_OnMouseMove(FPDF_FORMHANDLE hHandle,
|
| @@ -193,6 +228,7 @@ DLLEXPORT FPDF_BOOL STDCALL FORM_OnLButtonUp(FPDF_FORMHANDLE hHandle,
|
| return pPageView->OnLButtonUp(pt, modifier);
|
| }
|
|
|
| +#ifdef PDF_ENABLE_XFA
|
| DLLEXPORT FPDF_BOOL STDCALL FORM_OnRButtonDown(FPDF_FORMHANDLE hHandle,
|
| FPDF_PAGE page,
|
| int modifier,
|
| @@ -219,6 +255,7 @@ DLLEXPORT FPDF_BOOL STDCALL FORM_OnRButtonUp(FPDF_FORMHANDLE hHandle,
|
| return pPageView->OnRButtonUp(pt, modifier);
|
| }
|
|
|
| +#endif
|
| DLLEXPORT FPDF_BOOL STDCALL FORM_OnKeyDown(FPDF_FORMHANDLE hHandle,
|
| FPDF_PAGE page,
|
| int nKeyCode,
|
| @@ -276,18 +313,40 @@ DLLEXPORT void STDCALL FPDF_FFLDraw(FPDF_FORMHANDLE hHandle,
|
| if (!pPage)
|
| return;
|
|
|
| +#ifndef PDF_ENABLE_XFA
|
| + CPDF_RenderOptions options;
|
| + if (flags & FPDF_LCD_TEXT)
|
| + options.m_Flags |= RENDER_CLEARTYPE;
|
| + else
|
| + options.m_Flags &= ~RENDER_CLEARTYPE;
|
| +#else
|
| CPDFXFA_Document* pDocument = pPage->GetDocument();
|
| if (!pDocument)
|
| return;
|
| +#endif
|
|
|
| +#ifndef PDF_ENABLE_XFA
|
| + // Grayscale output
|
| + if (flags & FPDF_GRAYSCALE) {
|
| + options.m_ColorMode = RENDER_COLOR_GRAY;
|
| + options.m_ForeColor = 0;
|
| + options.m_BackColor = 0xffffff;
|
| + }
|
| +#else
|
| CPDF_Document* pPDFDoc = pDocument->GetPDFDoc();
|
| if (!pPDFDoc)
|
| return;
|
| +#endif
|
|
|
| +#ifndef PDF_ENABLE_XFA
|
| + options.m_AddFlags = flags >> 8;
|
| + options.m_pOCContext = new CPDF_OCContext(pPage->m_pDocument);
|
| +#else
|
| CPDFDoc_Environment* pEnv = (CPDFDoc_Environment*)hHandle;
|
| CPDFSDK_Document* pFXDoc = pEnv->GetSDKDocument();
|
| if (!pFXDoc)
|
| return;
|
| +#endif
|
|
|
| CFX_AffineMatrix matrix;
|
| pPage->GetDisplayMatrix(matrix, start_x, start_y, size_x, size_y, rotate);
|
| @@ -303,13 +362,19 @@ DLLEXPORT void STDCALL FPDF_FFLDraw(FPDF_FORMHANDLE hHandle,
|
| #else
|
| nonstd::unique_ptr<CFX_FxgeDevice> pDevice(new CFX_FxgeDevice);
|
| #endif
|
| +#ifdef PDF_ENABLE_XFA
|
|
|
| if (!pDevice)
|
| return;
|
| +#endif
|
| pDevice->Attach((CFX_DIBitmap*)bitmap);
|
| pDevice->SaveState();
|
| pDevice->SetClip_Rect(&clip);
|
|
|
| +#ifndef PDF_ENABLE_XFA
|
| + if (CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, pPage))
|
| + pPageView->PageView_OnDraw(pDevice.get(), &matrix, &options);
|
| +#else
|
| CPDF_RenderOptions options;
|
| if (flags & FPDF_LCD_TEXT)
|
| options.m_Flags |= RENDER_CLEARTYPE;
|
| @@ -327,9 +392,11 @@ DLLEXPORT void STDCALL FPDF_FFLDraw(FPDF_FORMHANDLE hHandle,
|
|
|
| if (CPDFSDK_PageView* pPageView = pFXDoc->GetPageView(pPage))
|
| pPageView->PageView_OnDraw(pDevice.get(), &matrix, &options, clip);
|
| +#endif
|
|
|
| pDevice->RestoreState();
|
| delete options.m_pOCContext;
|
| +#ifdef PDF_ENABLE_XFA
|
| options.m_pOCContext = NULL;
|
| }
|
| DLLEXPORT void STDCALL FPDF_Widget_Undo(FPDF_DOCUMENT document,
|
| @@ -580,6 +647,7 @@ FPDF_StringHandleAddString(FPDF_STRINGHANDLE stringHandle,
|
|
|
| stringArr->Add(bsStr);
|
| return TRUE;
|
| +#endif
|
| }
|
|
|
| DLLEXPORT void STDCALL FPDF_SetFormFieldHighlightColor(FPDF_FORMHANDLE hHandle,
|
|
|