CPDF_FormControl* CPDF_InterForm::GetControlAtPoint(CPDF_Page* pPage, const CFX_PointF& point, int* z_order) const { CPDF_Array* pAnnotList = pPage->m_pFormDict->GetArrayFor("Annots"); if (!pAnnotList) return nullptr; for (size_t i = pAnnotList->GetCount(); i > 0; --i) { size_t annot_index = i - 1; CPDF_Dictionary* pAnnot = pAnnotList->GetDictAt(annot_index); if (!pAnnot) continue; const auto it = m_ControlMap.find(pAnnot); if (it == m_ControlMap.end()) continue; CPDF_FormControl* pControl = it->second.get(); if (!pControl->GetRect().Contains(point)) continue; if (z_order) *z_order = static_cast<int>(annot_index); return pControl; } return nullptr; }
CPDF_FormControl* CPDF_InterForm::GetControlAtPoint(CPDF_Page* pPage, FX_FLOAT pdf_x, FX_FLOAT pdf_y, int* z_order) const { CPDF_Array* pAnnotList = pPage->m_pFormDict->GetArray("Annots"); if (!pAnnotList) return nullptr; for (FX_DWORD i = pAnnotList->GetCount(); i > 0; --i) { FX_DWORD annot_index = i - 1; CPDF_Dictionary* pAnnot = pAnnotList->GetDict(annot_index); if (!pAnnot) continue; const auto it = m_ControlMap.find(pAnnot); if (it == m_ControlMap.end()) continue; CPDF_FormControl* pControl = it->second; CFX_FloatRect rect = pControl->GetRect(); if (!rect.Contains(pdf_x, pdf_y)) continue; if (z_order) *z_order = annot_index; return pControl; } return nullptr; }