| Index: fpdfsdk/src/fsdk_mgr.cpp
|
| diff --git a/fpdfsdk/src/fsdk_mgr.cpp b/fpdfsdk/src/fsdk_mgr.cpp
|
| index f43a45b1f7efa746fe3582d7df5a9c4e78c05899..53a774edcd11bdd5f76ec63ab5a72d04791b2d92 100644
|
| --- a/fpdfsdk/src/fsdk_mgr.cpp
|
| +++ b/fpdfsdk/src/fsdk_mgr.cpp
|
| @@ -4,6 +4,8 @@
|
|
|
| // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
|
|
|
| +#include <algorithm>
|
| +
|
| #include "../../public/fpdf_ext.h"
|
| #include "../../third_party/base/nonstd_unique_ptr.h"
|
| #include "../include/formfiller/FFL_FormFiller.h"
|
| @@ -19,7 +21,8 @@
|
|
|
| class CFX_SystemHandler : public IFX_SystemHandler {
|
| public:
|
| - CFX_SystemHandler(CPDFDoc_Environment* pEnv) : m_pEnv(pEnv), m_nCharSet(-1) {}
|
| + explicit CFX_SystemHandler(CPDFDoc_Environment* pEnv)
|
| + : m_pEnv(pEnv), m_nCharSet(-1) {}
|
| ~CFX_SystemHandler() override {}
|
|
|
| public:
|
| @@ -606,47 +609,39 @@ CFX_WideString CPDFSDK_Document::GetPath() {
|
| }
|
|
|
| CPDFSDK_PageView::CPDFSDK_PageView(CPDFSDK_Document* pSDKDoc, CPDF_Page* page)
|
| - : m_page(page), m_pSDKDoc(pSDKDoc) {
|
| + : m_page(page),
|
| + m_pSDKDoc(pSDKDoc),
|
| + m_CaptureWidget(nullptr),
|
| + m_bEnterWidget(FALSE),
|
| + m_bExitWidget(FALSE),
|
| + m_bOnWidget(FALSE),
|
| + m_bValid(FALSE),
|
| + m_bLocked(FALSE),
|
| + m_bTakeOverPage(FALSE) {
|
| CPDFSDK_InterForm* pInterForm = pSDKDoc->GetInterForm();
|
| if (pInterForm) {
|
| CPDF_InterForm* pPDFInterForm = pInterForm->GetInterForm();
|
| pPDFInterForm->FixPageFields(page);
|
| }
|
| - m_page->SetPrivateData((void*)m_page, (void*)this, NULL);
|
| - m_fxAnnotArray.RemoveAll();
|
| -
|
| - m_bEnterWidget = FALSE;
|
| - m_bExitWidget = FALSE;
|
| - m_bOnWidget = FALSE;
|
| - m_CaptureWidget = NULL;
|
| - m_bValid = FALSE;
|
| - m_bLocked = FALSE;
|
| - m_bTakeOverPage = FALSE;
|
| + m_page->SetPrivateData((void*)m_page, (void*)this, nullptr);
|
| }
|
|
|
| CPDFSDK_PageView::~CPDFSDK_PageView() {
|
| // if there is a focused annot on the page, we should kill the focus first.
|
| if (CPDFSDK_Annot* focusedAnnot = m_pSDKDoc->GetFocusAnnot()) {
|
| - for (int i = 0, count = m_fxAnnotArray.GetSize(); i < count; i++) {
|
| - CPDFSDK_Annot* pAnnot = (CPDFSDK_Annot*)m_fxAnnotArray.GetAt(i);
|
| - if (pAnnot == focusedAnnot) {
|
| - KillFocusAnnot();
|
| - break;
|
| - }
|
| - }
|
| + auto it =
|
| + std::find(m_fxAnnotArray.begin(), m_fxAnnotArray.end(), focusedAnnot);
|
| + if (it != m_fxAnnotArray.end())
|
| + KillFocusAnnot();
|
| }
|
|
|
| CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
|
| CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr();
|
| - ASSERT(pAnnotHandlerMgr);
|
| - for (int i = 0, count = m_fxAnnotArray.GetSize(); i < count; i++) {
|
| - CPDFSDK_Annot* pAnnot = (CPDFSDK_Annot*)m_fxAnnotArray.GetAt(i);
|
| + for (CPDFSDK_Annot* pAnnot : m_fxAnnotArray)
|
| pAnnotHandlerMgr->ReleaseAnnot(pAnnot);
|
| - }
|
| - m_fxAnnotArray.RemoveAll();
|
| + m_fxAnnotArray.clear();
|
|
|
| - delete m_pAnnotList;
|
| - m_pAnnotList = NULL;
|
| + m_pAnnotList.reset();
|
|
|
| m_page->RemovePrivateData((void*)m_page);
|
| if (m_bTakeOverPage) {
|
| @@ -660,9 +655,8 @@ void CPDFSDK_PageView::PageView_OnDraw(CFX_RenderDevice* pDevice,
|
| m_curMatrix = *pUser2Device;
|
|
|
| CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
|
| - CPDFSDK_AnnotIterator annotIterator(this, TRUE);
|
| - int index = -1;
|
| - while (CPDFSDK_Annot* pSDKAnnot = annotIterator.Next(index)) {
|
| + CPDFSDK_AnnotIterator annotIterator(this, true);
|
| + while (CPDFSDK_Annot* pSDKAnnot = annotIterator.Next()) {
|
| CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr();
|
| pAnnotHandlerMgr->Annot_OnDraw(this, pSDKAnnot, pDevice, pUser2Device, 0);
|
| }
|
| @@ -670,7 +664,7 @@ void CPDFSDK_PageView::PageView_OnDraw(CFX_RenderDevice* pDevice,
|
|
|
| CPDF_Annot* CPDFSDK_PageView::GetPDFAnnotAtPoint(FX_FLOAT pageX,
|
| FX_FLOAT pageY) {
|
| - int nCount = m_pAnnotList->Count();
|
| + int nCount = CountAnnots();
|
| for (int i = 0; i < nCount; i++) {
|
| CPDF_Annot* pAnnot = m_pAnnotList->GetAt(i);
|
| CFX_FloatRect annotRect;
|
| @@ -678,13 +672,13 @@ CPDF_Annot* CPDFSDK_PageView::GetPDFAnnotAtPoint(FX_FLOAT pageX,
|
| if (annotRect.Contains(pageX, pageY))
|
| return pAnnot;
|
| }
|
| - return NULL;
|
| + return nullptr;
|
| }
|
|
|
| CPDF_Annot* CPDFSDK_PageView::GetPDFWidgetAtPoint(FX_FLOAT pageX,
|
| FX_FLOAT pageY) {
|
| - int nCount = m_pAnnotList->Count();
|
| - for (int i = 0; i < nCount; i++) {
|
| + int nCount = CountAnnots();
|
| + for (int i = 0; i < nCount; ++i) {
|
| CPDF_Annot* pAnnot = m_pAnnotList->GetAt(i);
|
| if (pAnnot->GetSubType() == "Widget") {
|
| CFX_FloatRect annotRect;
|
| @@ -693,33 +687,29 @@ CPDF_Annot* CPDFSDK_PageView::GetPDFWidgetAtPoint(FX_FLOAT pageX,
|
| return pAnnot;
|
| }
|
| }
|
| - return NULL;
|
| + return nullptr;
|
| }
|
|
|
| CPDFSDK_Annot* CPDFSDK_PageView::GetFXAnnotAtPoint(FX_FLOAT pageX,
|
| FX_FLOAT pageY) {
|
| - CPDFSDK_AnnotIterator annotIterator(this, FALSE);
|
| CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
|
| CPDFSDK_AnnotHandlerMgr* pAnnotMgr = pEnv->GetAnnotHandlerMgr();
|
| - CPDFSDK_Annot* pSDKAnnot = NULL;
|
| - int index = -1;
|
| - while ((pSDKAnnot = annotIterator.Next(index))) {
|
| + CPDFSDK_AnnotIterator annotIterator(this, false);
|
| + while (CPDFSDK_Annot* pSDKAnnot = annotIterator.Next()) {
|
| CPDF_Rect rc = pAnnotMgr->Annot_OnGetViewBBox(this, pSDKAnnot);
|
| if (rc.Contains(pageX, pageY))
|
| return pSDKAnnot;
|
| }
|
|
|
| - return NULL;
|
| + return nullptr;
|
| }
|
|
|
| CPDFSDK_Annot* CPDFSDK_PageView::GetFXWidgetAtPoint(FX_FLOAT pageX,
|
| FX_FLOAT pageY) {
|
| - CPDFSDK_AnnotIterator annotIterator(this, FALSE);
|
| CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
|
| CPDFSDK_AnnotHandlerMgr* pAnnotMgr = pEnv->GetAnnotHandlerMgr();
|
| - CPDFSDK_Annot* pSDKAnnot = NULL;
|
| - int index = -1;
|
| - while ((pSDKAnnot = annotIterator.Next(index))) {
|
| + CPDFSDK_AnnotIterator annotIterator(this, false);
|
| + while (CPDFSDK_Annot* pSDKAnnot = annotIterator.Next()) {
|
| if (pSDKAnnot->GetType() == "Widget") {
|
| pAnnotMgr->Annot_OnGetViewBBox(this, pSDKAnnot);
|
| CPDF_Point point(pageX, pageY);
|
| @@ -728,7 +718,7 @@ CPDFSDK_Annot* CPDFSDK_PageView::GetFXWidgetAtPoint(FX_FLOAT pageX,
|
| }
|
| }
|
|
|
| - return NULL;
|
| + return nullptr;
|
| }
|
|
|
| FX_BOOL CPDFSDK_PageView::Annot_HasAppearance(CPDF_Annot* pAnnot) {
|
| @@ -742,21 +732,15 @@ CPDFSDK_Annot* CPDFSDK_PageView::AddAnnot(CPDF_Annot* pPDFAnnot) {
|
| CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
|
| ASSERT(pEnv);
|
| CPDFSDK_AnnotHandlerMgr* pAnnotHandler = pEnv->GetAnnotHandlerMgr();
|
| + if (!pAnnotHandler)
|
| + return nullptr;
|
|
|
| - CPDFSDK_Annot* pSDKAnnot = NULL;
|
| -
|
| - if (pAnnotHandler) {
|
| - pSDKAnnot = pAnnotHandler->NewAnnot(pPDFAnnot, this);
|
| - }
|
| + CPDFSDK_Annot* pSDKAnnot = pAnnotHandler->NewAnnot(pPDFAnnot, this);
|
| if (!pSDKAnnot)
|
| - return NULL;
|
| -
|
| - m_fxAnnotArray.Add(pSDKAnnot);
|
| -
|
| - if (pAnnotHandler) {
|
| - pAnnotHandler->Annot_OnCreate(pSDKAnnot);
|
| - }
|
| + return nullptr;
|
|
|
| + m_fxAnnotArray.push_back(pSDKAnnot);
|
| + pAnnotHandler->Annot_OnCreate(pSDKAnnot);
|
| return pSDKAnnot;
|
| }
|
|
|
| @@ -780,27 +764,20 @@ CPDF_Document* CPDFSDK_PageView::GetPDFDocument() {
|
| return NULL;
|
| }
|
|
|
| -int CPDFSDK_PageView::CountAnnots() {
|
| +int CPDFSDK_PageView::CountAnnots() const {
|
| return m_pAnnotList->Count();
|
| }
|
|
|
| -CPDFSDK_Annot* CPDFSDK_PageView::GetAnnot(int nIndex) {
|
| - int nCount = m_fxAnnotArray.GetSize();
|
| - if (nIndex < 0 || nIndex >= nCount) {
|
| - return NULL;
|
| - }
|
| -
|
| - return (CPDFSDK_Annot*)m_fxAnnotArray.GetAt(nIndex);
|
| +CPDFSDK_Annot* CPDFSDK_PageView::GetAnnot(size_t nIndex) {
|
| + return nIndex < m_fxAnnotArray.size() ? m_fxAnnotArray[nIndex] : nullptr;
|
| }
|
|
|
| CPDFSDK_Annot* CPDFSDK_PageView::GetAnnotByDict(CPDF_Dictionary* pDict) {
|
| - int nCount = m_fxAnnotArray.GetSize();
|
| - for (int i = 0; i < nCount; i++) {
|
| - CPDFSDK_Annot* pAnnot = (CPDFSDK_Annot*)m_fxAnnotArray.GetAt(i);
|
| - if (pDict == pAnnot->GetPDFAnnot()->GetAnnotDict())
|
| + for (CPDFSDK_Annot* pAnnot : m_fxAnnotArray) {
|
| + if (pAnnot->GetPDFAnnot()->GetAnnotDict() == pDict)
|
| return pAnnot;
|
| }
|
| - return NULL;
|
| + return nullptr;
|
| }
|
|
|
| FX_BOOL CPDFSDK_PageView::OnLButtonDown(const CPDF_Point& point,
|
| @@ -920,11 +897,11 @@ void CPDFSDK_PageView::LoadFXAnnots() {
|
| FX_BOOL enableAPUpdate = CPDF_InterForm::UpdatingAPEnabled();
|
| // Disable the default AP construction.
|
| CPDF_InterForm::EnableUpdateAP(FALSE);
|
| - m_pAnnotList = new CPDF_AnnotList(m_page);
|
| + m_pAnnotList.reset(new CPDF_AnnotList(m_page));
|
| CPDF_InterForm::EnableUpdateAP(enableAPUpdate);
|
| - int nCount = m_pAnnotList->Count();
|
| + int nCount = CountAnnots();
|
| SetLock(TRUE);
|
| - for (int i = 0; i < nCount; i++) {
|
| + for (int i = 0; i < nCount; ++i) {
|
| CPDF_Annot* pPDFAnnot = m_pAnnotList->GetAt(i);
|
| CPDF_Document* pDoc = GetPDFDocument();
|
|
|
| @@ -937,7 +914,7 @@ void CPDFSDK_PageView::LoadFXAnnots() {
|
| CPDFSDK_Annot* pAnnot = pAnnotHandlerMgr->NewAnnot(pPDFAnnot, this);
|
| if (!pAnnot)
|
| continue;
|
| - m_fxAnnotArray.Add(pAnnot);
|
| + m_fxAnnotArray.push_back(pAnnot);
|
|
|
| pAnnotHandlerMgr->Annot_OnLoad(pAnnot);
|
| }
|
| @@ -971,11 +948,12 @@ int CPDFSDK_PageView::GetPageIndex() {
|
| return -1;
|
| }
|
|
|
| -FX_BOOL CPDFSDK_PageView::IsValidAnnot(void* p) {
|
| - if (p == NULL)
|
| +FX_BOOL CPDFSDK_PageView::IsValidAnnot(CPDF_Annot* p) const {
|
| + if (!p)
|
| return FALSE;
|
| - int iCount = m_pAnnotList->Count();
|
| - for (int i = 0; i < iCount; i++) {
|
| +
|
| + int nCount = CountAnnots();
|
| + for (int i = 0; i < nCount; ++i) {
|
| if (m_pAnnotList->GetAt(i) == p)
|
| return TRUE;
|
| }
|
| @@ -985,12 +963,11 @@ FX_BOOL CPDFSDK_PageView::IsValidAnnot(void* p) {
|
| CPDFSDK_Annot* CPDFSDK_PageView::GetFocusAnnot() {
|
| CPDFSDK_Annot* pFocusAnnot = m_pSDKDoc->GetFocusAnnot();
|
| if (!pFocusAnnot)
|
| - return NULL;
|
| + return nullptr;
|
|
|
| - for (int i = 0; i < m_fxAnnotArray.GetSize(); i++) {
|
| - CPDFSDK_Annot* pAnnot = (CPDFSDK_Annot*)m_fxAnnotArray.GetAt(i);
|
| + for (CPDFSDK_Annot* pAnnot : m_fxAnnotArray) {
|
| if (pAnnot == pFocusAnnot)
|
| return pAnnot;
|
| }
|
| - return NULL;
|
| + return nullptr;
|
| }
|
|
|