diff options
Diffstat (limited to 'fpdfsdk/fpdfxfa/cxfa_fwladaptertimermgr.cpp')
-rw-r--r-- | fpdfsdk/fpdfxfa/cxfa_fwladaptertimermgr.cpp | 46 |
1 files changed, 33 insertions, 13 deletions
diff --git a/fpdfsdk/fpdfxfa/cxfa_fwladaptertimermgr.cpp b/fpdfsdk/fpdfxfa/cxfa_fwladaptertimermgr.cpp index 5a9ae95be7..39aa72be87 100644 --- a/fpdfsdk/fpdfxfa/cxfa_fwladaptertimermgr.cpp +++ b/fpdfsdk/fpdfxfa/cxfa_fwladaptertimermgr.cpp @@ -6,17 +6,33 @@ #include "fpdfsdk/fpdfxfa/cxfa_fwladaptertimermgr.h" +#include <utility> #include <vector> #include "fpdfsdk/cpdfsdk_formfillenvironment.h" #include "fpdfsdk/fsdk_define.h" +namespace { + +class CFWL_FWLAdapterTimerInfo : public CFWL_TimerInfo { + public: + CFWL_FWLAdapterTimerInfo(IFWL_AdapterTimerMgr* mgr, + int32_t event, + CFWL_Timer* timer) + : CFWL_TimerInfo(mgr), idEvent(event), pTimer(timer) {} + + int32_t idEvent; + CFWL_Timer* pTimer; +}; + +} // namespace + std::vector<CFWL_TimerInfo*>* CXFA_FWLAdapterTimerMgr::s_TimerArray = nullptr; -void CXFA_FWLAdapterTimerMgr::Start(IFWL_Timer* pTimer, +void CXFA_FWLAdapterTimerMgr::Start(CFWL_Timer* pTimer, uint32_t dwElapse, bool bImmediately, - IFWL_TimerInfo** pTimerInfo) { + CFWL_TimerInfo** pTimerInfo) { if (!m_pFormFillEnv) return; @@ -24,22 +40,24 @@ void CXFA_FWLAdapterTimerMgr::Start(IFWL_Timer* pTimer, if (!s_TimerArray) s_TimerArray = new std::vector<CFWL_TimerInfo*>; - s_TimerArray->push_back(new CFWL_TimerInfo(this, id_event, pTimer)); - *pTimerInfo = s_TimerArray->back(); + *pTimerInfo = new CFWL_FWLAdapterTimerInfo(this, id_event, pTimer); + s_TimerArray->push_back(*pTimerInfo); } -void CXFA_FWLAdapterTimerMgr::Stop(IFWL_TimerInfo* pTimerInfo) { +void CXFA_FWLAdapterTimerMgr::Stop(CFWL_TimerInfo* pTimerInfo) { if (!pTimerInfo || !m_pFormFillEnv) return; - CFWL_TimerInfo* pInfo = static_cast<CFWL_TimerInfo*>(pTimerInfo); + CFWL_FWLAdapterTimerInfo* pInfo = + static_cast<CFWL_FWLAdapterTimerInfo*>(pTimerInfo); m_pFormFillEnv->KillTimer(pInfo->idEvent); - if (s_TimerArray) { - auto it = std::find(s_TimerArray->begin(), s_TimerArray->end(), pInfo); - if (it != s_TimerArray->end()) { - s_TimerArray->erase(it); - delete pInfo; - } + if (!s_TimerArray) + return; + + auto it = std::find(s_TimerArray->begin(), s_TimerArray->end(), pInfo); + if (it != s_TimerArray->end()) { + s_TimerArray->erase(it); + delete pInfo; } } @@ -48,7 +66,9 @@ void CXFA_FWLAdapterTimerMgr::TimerProc(int32_t idEvent) { if (!s_TimerArray) return; - for (CFWL_TimerInfo* pInfo : *s_TimerArray) { + for (const auto info : *s_TimerArray) { + CFWL_FWLAdapterTimerInfo* pInfo = + static_cast<CFWL_FWLAdapterTimerInfo*>(info); if (pInfo->idEvent == idEvent) { pInfo->pTimer->Run(pInfo); break; |