bool CPDFSDK_XFAWidgetHandler::HitTest(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot, const CFX_FloatPoint& point) { if (!pPageView || !pAnnot) return false; CPDFSDK_FormFillEnvironment* pFormFillEnv = pPageView->GetFormFillEnv(); if (!pFormFillEnv) return false; CPDFXFA_Context* pContext = pFormFillEnv->GetXFAContext(); if (!pContext) return false; CXFA_FFDocView* pDocView = pContext->GetXFADocView(); if (!pDocView) return false; CXFA_FFWidgetHandler* pWidgetHandler = pDocView->GetWidgetHandler(); if (!pWidgetHandler) return false; FWL_WidgetHit dwHitTest = pWidgetHandler->OnHitTest(pAnnot->GetXFAWidget(), point.x, point.y); return dwHitTest != FWL_WidgetHit::Unknown; }
FX_BOOL CPDFSDK_XFAAnnotHandler::HitTest(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot, const CFX_FloatPoint& point) { if (!pPageView || !pAnnot) return FALSE; CPDFSDK_Document* pSDKDoc = pPageView->GetSDKDocument(); if (!pSDKDoc) return FALSE; CPDFXFA_Document* pDoc = pSDKDoc->GetXFADocument(); if (!pDoc) return FALSE; CXFA_FFDocView* pDocView = pDoc->GetXFADocView(); if (!pDocView) return FALSE; CXFA_FFWidgetHandler* pWidgetHandler = pDocView->GetWidgetHandler(); if (!pWidgetHandler) return FALSE; FWL_WidgetHit dwHitTest = pWidgetHandler->OnHitTest(pAnnot->GetXFAWidget(), point.x, point.y); return dwHitTest != FWL_WidgetHit::Unknown; }
CXFA_FFWidgetHandler* CPDFSDK_XFAWidgetHandler::GetXFAWidgetHandler( CPDFSDK_Annot* pAnnot) { if (!pAnnot) return nullptr; CPDFSDK_PageView* pPageView = pAnnot->GetPageView(); if (!pPageView) return nullptr; CPDFSDK_FormFillEnvironment* pFormFillEnv = pPageView->GetFormFillEnv(); if (!pFormFillEnv) return nullptr; CPDFXFA_Context* pDoc = pFormFillEnv->GetXFAContext(); if (!pDoc) return nullptr; CXFA_FFDocView* pDocView = pDoc->GetXFADocView(); if (!pDocView) return nullptr; return pDocView->GetWidgetHandler(); }
CXFA_FFWidgetHandler* CPDFSDK_XFAAnnotHandler::GetXFAWidgetHandler( CPDFSDK_Annot* pAnnot) { if (!pAnnot) return nullptr; CPDFSDK_PageView* pPageView = pAnnot->GetPageView(); if (!pPageView) return nullptr; CPDFSDK_Document* pSDKDoc = pPageView->GetSDKDocument(); if (!pSDKDoc) return nullptr; CPDFXFA_Document* pDoc = pSDKDoc->GetXFADocument(); if (!pDoc) return nullptr; CXFA_FFDocView* pDocView = pDoc->GetXFADocView(); if (!pDocView) return nullptr; return pDocView->GetWidgetHandler(); }
DLLEXPORT int STDCALL FPDFPage_HasFormFieldAtPoint(FPDF_FORMHANDLE hHandle, FPDF_PAGE page, double page_x, double page_y) { if (!hHandle) return -1; CPDF_Page* pPage = CPDFPageFromFPDFPage(page); if (pPage) { CPDF_InterForm interform(pPage->m_pDocument); CPDF_FormControl* pFormCtrl = interform.GetControlAtPoint(pPage, static_cast<FX_FLOAT>(page_x), static_cast<FX_FLOAT>(page_y), nullptr); if (!pFormCtrl) return -1; CPDF_FormField* pFormField = pFormCtrl->GetField(); return pFormField ? pFormField->GetFieldType() : -1; } #ifdef PDF_ENABLE_XFA CPDFXFA_Page* pXFAPage = UnderlyingFromFPDFPage(page); if (!pXFAPage) return -1; CXFA_FFPageView* pPageView = pXFAPage->GetXFAPageView(); if (!pPageView) return -1; CXFA_FFDocView* pDocView = pPageView->GetDocView(); if (!pDocView) return -1; CXFA_FFWidgetHandler* pWidgetHandler = pDocView->GetWidgetHandler(); if (!pWidgetHandler) return -1; std::unique_ptr<IXFA_WidgetIterator> pWidgetIterator( pPageView->CreateWidgetIterator(XFA_TRAVERSEWAY_Form, XFA_WidgetStatus_Viewable)); if (!pWidgetIterator) return -1; CXFA_FFWidget* pXFAAnnot = pWidgetIterator->MoveToNext(); while (pXFAAnnot) { CFX_RectF rcBBox; pXFAAnnot->GetBBox(rcBBox, 0); CFX_FloatRect rcWidget(rcBBox.left, rcBBox.top, rcBBox.left + rcBBox.width, rcBBox.top + rcBBox.height); rcWidget.left -= 1.0f; rcWidget.right += 1.0f; rcWidget.bottom -= 1.0f; rcWidget.top += 1.0f; if (rcWidget.Contains(static_cast<FX_FLOAT>(page_x), static_cast<FX_FLOAT>(page_y))) { return FPDF_FORMFIELD_XFA; } pXFAAnnot = pWidgetIterator->MoveToNext(); } #endif // PDF_ENABLE_XFA return -1; }
CXFA_FFWidgetHandler* CXFA_FFNotify::GetWidgetHandler() { CXFA_FFDocView* pDocView = m_pDoc->GetDocView(); return pDocView ? pDocView->GetWidgetHandler() : nullptr; }