void CFFL_InteractiveFormFiller::QueryWherePopup( const CPWL_Wnd::PrivateData* pAttached, float fPopupMin, float fPopupMax, bool* bBottom, float* fPopupRet) { auto* pData = static_cast<const CFFL_PrivateData*>(pAttached); CPDFSDK_Widget* pWidget = pData->pWidget; CPDF_Page* pPage = pWidget->GetPDFPage(); CFX_FloatRect rcPageView(0, pPage->GetPageHeight(), pPage->GetPageWidth(), 0); rcPageView.Normalize(); CFX_FloatRect rcAnnot = pWidget->GetRect(); float fTop = 0.0f; float fBottom = 0.0f; switch (pWidget->GetRotate() / 90) { default: case 0: fTop = rcPageView.top - rcAnnot.top; fBottom = rcAnnot.bottom - rcPageView.bottom; break; case 1: fTop = rcAnnot.left - rcPageView.left; fBottom = rcPageView.right - rcAnnot.right; break; case 2: fTop = rcAnnot.bottom - rcPageView.bottom; fBottom = rcPageView.top - rcAnnot.top; break; case 3: fTop = rcPageView.right - rcAnnot.right; fBottom = rcAnnot.left - rcPageView.left; break; } constexpr float kMaxListBoxHeight = 140; const float fMaxListBoxHeight = pdfium::clamp(kMaxListBoxHeight, fPopupMin, fPopupMax); if (fBottom > fMaxListBoxHeight) { *fPopupRet = fMaxListBoxHeight; *bBottom = true; return; } if (fTop > fMaxListBoxHeight) { *fPopupRet = fMaxListBoxHeight; *bBottom = false; return; } if (fTop > fBottom) { *fPopupRet = fTop; *bBottom = false; } else { *fPopupRet = fBottom; *bBottom = true; } }
void CFFL_IFormFiller::QueryWherePopup(void* pPrivateData, FX_FLOAT fPopupMin,FX_FLOAT fPopupMax, FX_INT32 & nRet, FX_FLOAT & fPopupRet) { ASSERT(pPrivateData != NULL); CFFL_PrivateData* pData = (CFFL_PrivateData*)pPrivateData; CPDF_Rect rcPageView(0,0,0,0); rcPageView.right = pData->pWidget->GetPDFPage()->GetPageWidth(); rcPageView.bottom = pData->pWidget->GetPDFPage()->GetPageHeight(); rcPageView.Normalize(); ASSERT(pData->pWidget != NULL); CPDF_Rect rcAnnot = pData->pWidget->GetRect(); FX_FLOAT fTop = 0.0f; FX_FLOAT fBottom = 0.0f; CPDFSDK_Widget * pWidget = (CPDFSDK_Widget*)pData->pWidget; switch (pWidget->GetRotate() / 90) { default: case 0: fTop = rcPageView.top - rcAnnot.top; fBottom = rcAnnot.bottom - rcPageView.bottom; break; case 1: fTop = rcAnnot.left - rcPageView.left; fBottom = rcPageView.right - rcAnnot.right; break; case 2: fTop = rcAnnot.bottom - rcPageView.bottom; fBottom = rcPageView.top - rcAnnot.top; break; case 3: fTop = rcPageView.right - rcAnnot.right; fBottom = rcAnnot.left - rcPageView.left; break; } FX_FLOAT fFactHeight = 0; FX_BOOL bBottom = TRUE; FX_FLOAT fMaxListBoxHeight = 0; if (fPopupMax > FFL_MAXLISTBOXHEIGHT) { if (fPopupMin > FFL_MAXLISTBOXHEIGHT) { fMaxListBoxHeight = fPopupMin; } else { fMaxListBoxHeight = FFL_MAXLISTBOXHEIGHT; } } else fMaxListBoxHeight = fPopupMax; if (fBottom > fMaxListBoxHeight) { fFactHeight = fMaxListBoxHeight; bBottom = TRUE; } else { if (fTop > fMaxListBoxHeight) { fFactHeight = fMaxListBoxHeight; bBottom = FALSE; } else { if (fTop > fBottom) { fFactHeight = fTop; bBottom = FALSE; } else { fFactHeight = fBottom; bBottom = TRUE; } } } nRet = bBottom ? 0 : 1; fPopupRet = fFactHeight; }