| OLD | NEW |
| 1 // Copyright 2016 PDFium Authors. All rights reserved. | 1 // Copyright 2016 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "fpdfsdk/include/cpdfsdk_annothandlermgr.h" | 7 #include "fpdfsdk/include/cpdfsdk_annothandlermgr.h" |
| 8 | 8 |
| 9 #include "core/fpdfdoc/include/cpdf_annot.h" | 9 #include "core/fpdfdoc/include/cpdf_annot.h" |
| 10 #include "fpdfsdk/include/cba_annotiterator.h" | 10 #include "fpdfsdk/include/cba_annotiterator.h" |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 97 CFX_RenderDevice* pDevice, | 97 CFX_RenderDevice* pDevice, |
| 98 CFX_Matrix* pUser2Device, | 98 CFX_Matrix* pUser2Device, |
| 99 bool bDrawAnnots) { | 99 bool bDrawAnnots) { |
| 100 ASSERT(pAnnot); | 100 ASSERT(pAnnot); |
| 101 GetAnnotHandler(pAnnot)->OnDraw(pPageView, pAnnot, pDevice, pUser2Device, | 101 GetAnnotHandler(pAnnot)->OnDraw(pPageView, pAnnot, pDevice, pUser2Device, |
| 102 bDrawAnnots); | 102 bDrawAnnots); |
| 103 } | 103 } |
| 104 | 104 |
| 105 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnLButtonDown( | 105 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnLButtonDown( |
| 106 CPDFSDK_PageView* pPageView, | 106 CPDFSDK_PageView* pPageView, |
| 107 CPDFSDK_Annot* pAnnot, | 107 CPDFSDK_Annot::ObservedPtr* pAnnot, |
| 108 uint32_t nFlags, | 108 uint32_t nFlags, |
| 109 const CFX_FloatPoint& point) { | 109 const CFX_FloatPoint& point) { |
| 110 ASSERT(pAnnot); | 110 ASSERT(*pAnnot); |
| 111 return GetAnnotHandler(pAnnot)->OnLButtonDown(pPageView, pAnnot, nFlags, | 111 return GetAnnotHandler(pAnnot->Get()) |
| 112 point); | 112 ->OnLButtonDown(pPageView, pAnnot, nFlags, point); |
| 113 } | 113 } |
| 114 | 114 |
| 115 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnLButtonUp( | 115 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnLButtonUp( |
| 116 CPDFSDK_PageView* pPageView, | 116 CPDFSDK_PageView* pPageView, |
| 117 CPDFSDK_Annot* pAnnot, | 117 CPDFSDK_Annot::ObservedPtr* pAnnot, |
| 118 uint32_t nFlags, | 118 uint32_t nFlags, |
| 119 const CFX_FloatPoint& point) { | 119 const CFX_FloatPoint& point) { |
| 120 ASSERT(pAnnot); | 120 ASSERT(*pAnnot); |
| 121 return GetAnnotHandler(pAnnot)->OnLButtonUp(pPageView, pAnnot, nFlags, point); | 121 return GetAnnotHandler(pAnnot->Get()) |
| 122 ->OnLButtonUp(pPageView, pAnnot, nFlags, point); |
| 122 } | 123 } |
| 123 | 124 |
| 124 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnLButtonDblClk( | 125 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnLButtonDblClk( |
| 125 CPDFSDK_PageView* pPageView, | 126 CPDFSDK_PageView* pPageView, |
| 126 CPDFSDK_Annot* pAnnot, | 127 CPDFSDK_Annot::ObservedPtr* pAnnot, |
| 127 uint32_t nFlags, | 128 uint32_t nFlags, |
| 128 const CFX_FloatPoint& point) { | 129 const CFX_FloatPoint& point) { |
| 129 ASSERT(pAnnot); | 130 ASSERT(*pAnnot); |
| 130 return GetAnnotHandler(pAnnot)->OnLButtonDblClk(pPageView, pAnnot, nFlags, | 131 return GetAnnotHandler(pAnnot->Get()) |
| 131 point); | 132 ->OnLButtonDblClk(pPageView, pAnnot, nFlags, point); |
| 132 } | 133 } |
| 133 | 134 |
| 134 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnMouseMove( | 135 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnMouseMove( |
| 135 CPDFSDK_PageView* pPageView, | 136 CPDFSDK_PageView* pPageView, |
| 136 CPDFSDK_Annot* pAnnot, | 137 CPDFSDK_Annot::ObservedPtr* pAnnot, |
| 137 uint32_t nFlags, | 138 uint32_t nFlags, |
| 138 const CFX_FloatPoint& point) { | 139 const CFX_FloatPoint& point) { |
| 139 ASSERT(pAnnot); | 140 ASSERT(*pAnnot); |
| 140 return GetAnnotHandler(pAnnot)->OnMouseMove(pPageView, pAnnot, nFlags, point); | 141 return GetAnnotHandler(pAnnot->Get()) |
| 142 ->OnMouseMove(pPageView, pAnnot, nFlags, point); |
| 141 } | 143 } |
| 142 | 144 |
| 143 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnMouseWheel( | 145 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnMouseWheel( |
| 144 CPDFSDK_PageView* pPageView, | 146 CPDFSDK_PageView* pPageView, |
| 145 CPDFSDK_Annot* pAnnot, | 147 CPDFSDK_Annot::ObservedPtr* pAnnot, |
| 146 uint32_t nFlags, | 148 uint32_t nFlags, |
| 147 short zDelta, | 149 short zDelta, |
| 148 const CFX_FloatPoint& point) { | 150 const CFX_FloatPoint& point) { |
| 149 ASSERT(pAnnot); | 151 ASSERT(*pAnnot); |
| 150 return GetAnnotHandler(pAnnot)->OnMouseWheel(pPageView, pAnnot, nFlags, | 152 return GetAnnotHandler(pAnnot->Get()) |
| 151 zDelta, point); | 153 ->OnMouseWheel(pPageView, pAnnot, nFlags, zDelta, point); |
| 152 } | 154 } |
| 153 | 155 |
| 154 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnRButtonDown( | 156 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnRButtonDown( |
| 155 CPDFSDK_PageView* pPageView, | 157 CPDFSDK_PageView* pPageView, |
| 156 CPDFSDK_Annot* pAnnot, | 158 CPDFSDK_Annot::ObservedPtr* pAnnot, |
| 157 uint32_t nFlags, | 159 uint32_t nFlags, |
| 158 const CFX_FloatPoint& point) { | 160 const CFX_FloatPoint& point) { |
| 159 ASSERT(pAnnot); | 161 ASSERT(*pAnnot); |
| 160 return GetAnnotHandler(pAnnot)->OnRButtonDown(pPageView, pAnnot, nFlags, | 162 return GetAnnotHandler(pAnnot->Get()) |
| 161 point); | 163 ->OnRButtonDown(pPageView, pAnnot, nFlags, point); |
| 162 } | 164 } |
| 163 | 165 |
| 164 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnRButtonUp( | 166 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnRButtonUp( |
| 165 CPDFSDK_PageView* pPageView, | 167 CPDFSDK_PageView* pPageView, |
| 166 CPDFSDK_Annot* pAnnot, | 168 CPDFSDK_Annot::ObservedPtr* pAnnot, |
| 167 uint32_t nFlags, | 169 uint32_t nFlags, |
| 168 const CFX_FloatPoint& point) { | 170 const CFX_FloatPoint& point) { |
| 169 ASSERT(pAnnot); | 171 ASSERT(*pAnnot); |
| 170 return GetAnnotHandler(pAnnot)->OnRButtonUp(pPageView, pAnnot, nFlags, point); | 172 return GetAnnotHandler(pAnnot->Get()) |
| 173 ->OnRButtonUp(pPageView, pAnnot, nFlags, point); |
| 171 } | 174 } |
| 172 | 175 |
| 173 void CPDFSDK_AnnotHandlerMgr::Annot_OnMouseEnter(CPDFSDK_PageView* pPageView, | 176 void CPDFSDK_AnnotHandlerMgr::Annot_OnMouseEnter( |
| 174 CPDFSDK_Annot* pAnnot, | 177 CPDFSDK_PageView* pPageView, |
| 175 uint32_t nFlag) { | 178 CPDFSDK_Annot::ObservedPtr* pAnnot, |
| 176 ASSERT(pAnnot); | 179 uint32_t nFlag) { |
| 177 GetAnnotHandler(pAnnot)->OnMouseEnter(pPageView, pAnnot, nFlag); | 180 ASSERT(*pAnnot); |
| 181 GetAnnotHandler(pAnnot->Get())->OnMouseEnter(pPageView, pAnnot, nFlag); |
| 178 } | 182 } |
| 179 | 183 |
| 180 void CPDFSDK_AnnotHandlerMgr::Annot_OnMouseExit(CPDFSDK_PageView* pPageView, | 184 void CPDFSDK_AnnotHandlerMgr::Annot_OnMouseExit( |
| 181 CPDFSDK_Annot* pAnnot, | 185 CPDFSDK_PageView* pPageView, |
| 182 uint32_t nFlag) { | 186 CPDFSDK_Annot::ObservedPtr* pAnnot, |
| 183 ASSERT(pAnnot); | 187 uint32_t nFlag) { |
| 184 GetAnnotHandler(pAnnot)->OnMouseExit(pPageView, pAnnot, nFlag); | 188 ASSERT(*pAnnot); |
| 189 GetAnnotHandler(pAnnot->Get())->OnMouseExit(pPageView, pAnnot, nFlag); |
| 185 } | 190 } |
| 186 | 191 |
| 187 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnChar(CPDFSDK_Annot* pAnnot, | 192 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnChar(CPDFSDK_Annot* pAnnot, |
| 188 uint32_t nChar, | 193 uint32_t nChar, |
| 189 uint32_t nFlags) { | 194 uint32_t nFlags) { |
| 190 return GetAnnotHandler(pAnnot)->OnChar(pAnnot, nChar, nFlags); | 195 return GetAnnotHandler(pAnnot)->OnChar(pAnnot, nChar, nFlags); |
| 191 } | 196 } |
| 192 | 197 |
| 193 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnKeyDown(CPDFSDK_Annot* pAnnot, | 198 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnKeyDown(CPDFSDK_Annot* pAnnot, |
| 194 int nKeyCode, | 199 int nKeyCode, |
| 195 int nFlag) { | 200 int nFlag) { |
| 196 if (m_pEnv->IsCTRLKeyDown(nFlag) || m_pEnv->IsALTKeyDown(nFlag)) | 201 if (m_pEnv->IsCTRLKeyDown(nFlag) || m_pEnv->IsALTKeyDown(nFlag)) |
| 197 return GetAnnotHandler(pAnnot)->OnKeyDown(pAnnot, nKeyCode, nFlag); | 202 return GetAnnotHandler(pAnnot)->OnKeyDown(pAnnot, nKeyCode, nFlag); |
| 198 | 203 |
| 199 CPDFSDK_PageView* pPage = pAnnot->GetPageView(); | 204 CPDFSDK_PageView* pPage = pAnnot->GetPageView(); |
| 200 CPDFSDK_Annot* pFocusAnnot = pPage->GetFocusAnnot(); | 205 CPDFSDK_Annot* pFocusAnnot = pPage->GetFocusAnnot(); |
| 201 if (pFocusAnnot && (nKeyCode == FWL_VKEY_Tab)) { | 206 if (pFocusAnnot && (nKeyCode == FWL_VKEY_Tab)) { |
| 202 CPDFSDK_Annot* pNext = | 207 CPDFSDK_Annot::ObservedPtr pNext( |
| 203 GetNextAnnot(pFocusAnnot, !m_pEnv->IsSHIFTKeyDown(nFlag)); | 208 GetNextAnnot(pFocusAnnot, !m_pEnv->IsSHIFTKeyDown(nFlag))); |
| 204 | 209 if (pNext && pNext.Get() != pFocusAnnot) { |
| 205 if (pNext && pNext != pFocusAnnot) { | 210 pPage->GetSDKDocument()->SetFocusAnnot(&pNext); |
| 206 CPDFSDK_Document* pDocument = pPage->GetSDKDocument(); | |
| 207 pDocument->SetFocusAnnot(pNext); | |
| 208 return TRUE; | 211 return TRUE; |
| 209 } | 212 } |
| 210 } | 213 } |
| 211 | 214 |
| 212 return FALSE; | 215 return FALSE; |
| 213 } | 216 } |
| 214 | 217 |
| 215 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnKeyUp(CPDFSDK_Annot* pAnnot, | 218 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnKeyUp(CPDFSDK_Annot* pAnnot, |
| 216 int nKeyCode, | 219 int nKeyCode, |
| 217 int nFlag) { | 220 int nFlag) { |
| 218 return FALSE; | 221 return FALSE; |
| 219 } | 222 } |
| 220 | 223 |
| 221 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnSetFocus(CPDFSDK_Annot* pAnnot, | 224 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnSetFocus( |
| 222 uint32_t nFlag) { | 225 CPDFSDK_Annot::ObservedPtr* pAnnot, |
| 223 ASSERT(pAnnot); | 226 uint32_t nFlag) { |
| 224 | 227 ASSERT(*pAnnot); |
| 225 if (!GetAnnotHandler(pAnnot)->OnSetFocus(pAnnot, nFlag)) | 228 if (!GetAnnotHandler(pAnnot->Get())->OnSetFocus(pAnnot, nFlag)) |
| 226 return FALSE; | 229 return FALSE; |
| 227 | 230 |
| 228 CPDFSDK_PageView* pPage = pAnnot->GetPageView(); | 231 (*pAnnot)->GetPageView()->GetSDKDocument(); |
| 229 pPage->GetSDKDocument(); | |
| 230 return TRUE; | 232 return TRUE; |
| 231 } | 233 } |
| 232 | 234 |
| 233 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnKillFocus(CPDFSDK_Annot* pAnnot, | 235 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnKillFocus( |
| 234 uint32_t nFlag) { | 236 CPDFSDK_Annot::ObservedPtr* pAnnot, |
| 235 ASSERT(pAnnot); | 237 uint32_t nFlag) { |
| 236 return GetAnnotHandler(pAnnot)->OnKillFocus(pAnnot, nFlag); | 238 ASSERT(*pAnnot); |
| 239 return GetAnnotHandler(pAnnot->Get())->OnKillFocus(pAnnot, nFlag); |
| 237 } | 240 } |
| 238 | 241 |
| 239 #ifdef PDF_ENABLE_XFA | 242 #ifdef PDF_ENABLE_XFA |
| 240 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnChangeFocus( | 243 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnChangeFocus( |
| 241 CPDFSDK_Annot* pSetAnnot, | 244 CPDFSDK_Annot::ObservedPtr* pSetAnnot, |
| 242 CPDFSDK_Annot* pKillAnnot) { | 245 CPDFSDK_Annot::ObservedPtr* pKillAnnot) { |
| 243 FX_BOOL bXFA = (pSetAnnot && pSetAnnot->GetXFAWidget()) || | 246 FX_BOOL bXFA = (*pSetAnnot && (*pSetAnnot)->GetXFAWidget()) || |
| 244 (pKillAnnot && pKillAnnot->GetXFAWidget()); | 247 (*pKillAnnot && (*pKillAnnot)->GetXFAWidget()); |
| 245 | 248 |
| 246 if (bXFA) { | 249 if (bXFA) { |
| 247 if (IPDFSDK_AnnotHandler* pXFAAnnotHandler = | 250 if (IPDFSDK_AnnotHandler* pXFAAnnotHandler = |
| 248 GetAnnotHandler(CPDF_Annot::Subtype::XFAWIDGET)) | 251 GetAnnotHandler(CPDF_Annot::Subtype::XFAWIDGET)) |
| 249 return pXFAAnnotHandler->OnXFAChangedFocus(pKillAnnot, pSetAnnot); | 252 return pXFAAnnotHandler->OnXFAChangedFocus(pKillAnnot, pSetAnnot); |
| 250 } | 253 } |
| 251 | 254 |
| 252 return TRUE; | 255 return TRUE; |
| 253 } | 256 } |
| 254 #endif // PDF_ENABLE_XFA | 257 #endif // PDF_ENABLE_XFA |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 299 bNext ? pWidgetIterator->MoveToNext() : pWidgetIterator->MoveToPrevious(); | 302 bNext ? pWidgetIterator->MoveToNext() : pWidgetIterator->MoveToPrevious(); |
| 300 if (!hNextFocus && pSDKAnnot) | 303 if (!hNextFocus && pSDKAnnot) |
| 301 hNextFocus = pWidgetIterator->MoveToFirst(); | 304 hNextFocus = pWidgetIterator->MoveToFirst(); |
| 302 | 305 |
| 303 return pPageView->GetAnnotByXFAWidget(hNextFocus); | 306 return pPageView->GetAnnotByXFAWidget(hNextFocus); |
| 304 #else // PDF_ENABLE_XFA | 307 #else // PDF_ENABLE_XFA |
| 305 CBA_AnnotIterator ai(pSDKAnnot->GetPageView(), CPDF_Annot::Subtype::WIDGET); | 308 CBA_AnnotIterator ai(pSDKAnnot->GetPageView(), CPDF_Annot::Subtype::WIDGET); |
| 306 return bNext ? ai.GetNextAnnot(pSDKAnnot) : ai.GetPrevAnnot(pSDKAnnot); | 309 return bNext ? ai.GetNextAnnot(pSDKAnnot) : ai.GetPrevAnnot(pSDKAnnot); |
| 307 #endif // PDF_ENABLE_XFA | 310 #endif // PDF_ENABLE_XFA |
| 308 } | 311 } |
| OLD | NEW |