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/cpdfsdk_annothandlermgr.h" | 7 #include "fpdfsdk/cpdfsdk_annothandlermgr.h" |
8 | 8 |
9 #include "core/fpdfdoc/cpdf_annot.h" | 9 #include "core/fpdfdoc/cpdf_annot.h" |
10 #include "fpdfsdk/cba_annotiterator.h" | 10 #include "fpdfsdk/cba_annotiterator.h" |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
92 void CPDFSDK_AnnotHandlerMgr::Annot_OnDraw(CPDFSDK_PageView* pPageView, | 92 void CPDFSDK_AnnotHandlerMgr::Annot_OnDraw(CPDFSDK_PageView* pPageView, |
93 CPDFSDK_Annot* pAnnot, | 93 CPDFSDK_Annot* pAnnot, |
94 CFX_RenderDevice* pDevice, | 94 CFX_RenderDevice* pDevice, |
95 CFX_Matrix* pUser2Device, | 95 CFX_Matrix* pUser2Device, |
96 bool bDrawAnnots) { | 96 bool bDrawAnnots) { |
97 ASSERT(pAnnot); | 97 ASSERT(pAnnot); |
98 GetAnnotHandler(pAnnot)->OnDraw(pPageView, pAnnot, pDevice, pUser2Device, | 98 GetAnnotHandler(pAnnot)->OnDraw(pPageView, pAnnot, pDevice, pUser2Device, |
99 bDrawAnnots); | 99 bDrawAnnots); |
100 } | 100 } |
101 | 101 |
102 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnLButtonDown( | 102 bool CPDFSDK_AnnotHandlerMgr::Annot_OnLButtonDown( |
103 CPDFSDK_PageView* pPageView, | 103 CPDFSDK_PageView* pPageView, |
104 CPDFSDK_Annot::ObservedPtr* pAnnot, | 104 CPDFSDK_Annot::ObservedPtr* pAnnot, |
105 uint32_t nFlags, | 105 uint32_t nFlags, |
106 const CFX_FloatPoint& point) { | 106 const CFX_FloatPoint& point) { |
107 ASSERT(*pAnnot); | 107 ASSERT(*pAnnot); |
108 return GetAnnotHandler(pAnnot->Get()) | 108 return GetAnnotHandler(pAnnot->Get()) |
109 ->OnLButtonDown(pPageView, pAnnot, nFlags, point); | 109 ->OnLButtonDown(pPageView, pAnnot, nFlags, point); |
110 } | 110 } |
111 | 111 |
112 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnLButtonUp( | 112 bool CPDFSDK_AnnotHandlerMgr::Annot_OnLButtonUp( |
113 CPDFSDK_PageView* pPageView, | 113 CPDFSDK_PageView* pPageView, |
114 CPDFSDK_Annot::ObservedPtr* pAnnot, | 114 CPDFSDK_Annot::ObservedPtr* pAnnot, |
115 uint32_t nFlags, | 115 uint32_t nFlags, |
116 const CFX_FloatPoint& point) { | 116 const CFX_FloatPoint& point) { |
117 ASSERT(*pAnnot); | 117 ASSERT(*pAnnot); |
118 return GetAnnotHandler(pAnnot->Get()) | 118 return GetAnnotHandler(pAnnot->Get()) |
119 ->OnLButtonUp(pPageView, pAnnot, nFlags, point); | 119 ->OnLButtonUp(pPageView, pAnnot, nFlags, point); |
120 } | 120 } |
121 | 121 |
122 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnLButtonDblClk( | 122 bool CPDFSDK_AnnotHandlerMgr::Annot_OnLButtonDblClk( |
123 CPDFSDK_PageView* pPageView, | 123 CPDFSDK_PageView* pPageView, |
124 CPDFSDK_Annot::ObservedPtr* pAnnot, | 124 CPDFSDK_Annot::ObservedPtr* pAnnot, |
125 uint32_t nFlags, | 125 uint32_t nFlags, |
126 const CFX_FloatPoint& point) { | 126 const CFX_FloatPoint& point) { |
127 ASSERT(*pAnnot); | 127 ASSERT(*pAnnot); |
128 return GetAnnotHandler(pAnnot->Get()) | 128 return GetAnnotHandler(pAnnot->Get()) |
129 ->OnLButtonDblClk(pPageView, pAnnot, nFlags, point); | 129 ->OnLButtonDblClk(pPageView, pAnnot, nFlags, point); |
130 } | 130 } |
131 | 131 |
132 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnMouseMove( | 132 bool CPDFSDK_AnnotHandlerMgr::Annot_OnMouseMove( |
133 CPDFSDK_PageView* pPageView, | 133 CPDFSDK_PageView* pPageView, |
134 CPDFSDK_Annot::ObservedPtr* pAnnot, | 134 CPDFSDK_Annot::ObservedPtr* pAnnot, |
135 uint32_t nFlags, | 135 uint32_t nFlags, |
136 const CFX_FloatPoint& point) { | 136 const CFX_FloatPoint& point) { |
137 ASSERT(*pAnnot); | 137 ASSERT(*pAnnot); |
138 return GetAnnotHandler(pAnnot->Get()) | 138 return GetAnnotHandler(pAnnot->Get()) |
139 ->OnMouseMove(pPageView, pAnnot, nFlags, point); | 139 ->OnMouseMove(pPageView, pAnnot, nFlags, point); |
140 } | 140 } |
141 | 141 |
142 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnMouseWheel( | 142 bool CPDFSDK_AnnotHandlerMgr::Annot_OnMouseWheel( |
143 CPDFSDK_PageView* pPageView, | 143 CPDFSDK_PageView* pPageView, |
144 CPDFSDK_Annot::ObservedPtr* pAnnot, | 144 CPDFSDK_Annot::ObservedPtr* pAnnot, |
145 uint32_t nFlags, | 145 uint32_t nFlags, |
146 short zDelta, | 146 short zDelta, |
147 const CFX_FloatPoint& point) { | 147 const CFX_FloatPoint& point) { |
148 ASSERT(*pAnnot); | 148 ASSERT(*pAnnot); |
149 return GetAnnotHandler(pAnnot->Get()) | 149 return GetAnnotHandler(pAnnot->Get()) |
150 ->OnMouseWheel(pPageView, pAnnot, nFlags, zDelta, point); | 150 ->OnMouseWheel(pPageView, pAnnot, nFlags, zDelta, point); |
151 } | 151 } |
152 | 152 |
153 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnRButtonDown( | 153 bool CPDFSDK_AnnotHandlerMgr::Annot_OnRButtonDown( |
154 CPDFSDK_PageView* pPageView, | 154 CPDFSDK_PageView* pPageView, |
155 CPDFSDK_Annot::ObservedPtr* pAnnot, | 155 CPDFSDK_Annot::ObservedPtr* pAnnot, |
156 uint32_t nFlags, | 156 uint32_t nFlags, |
157 const CFX_FloatPoint& point) { | 157 const CFX_FloatPoint& point) { |
158 ASSERT(*pAnnot); | 158 ASSERT(*pAnnot); |
159 return GetAnnotHandler(pAnnot->Get()) | 159 return GetAnnotHandler(pAnnot->Get()) |
160 ->OnRButtonDown(pPageView, pAnnot, nFlags, point); | 160 ->OnRButtonDown(pPageView, pAnnot, nFlags, point); |
161 } | 161 } |
162 | 162 |
163 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnRButtonUp( | 163 bool CPDFSDK_AnnotHandlerMgr::Annot_OnRButtonUp( |
164 CPDFSDK_PageView* pPageView, | 164 CPDFSDK_PageView* pPageView, |
165 CPDFSDK_Annot::ObservedPtr* pAnnot, | 165 CPDFSDK_Annot::ObservedPtr* pAnnot, |
166 uint32_t nFlags, | 166 uint32_t nFlags, |
167 const CFX_FloatPoint& point) { | 167 const CFX_FloatPoint& point) { |
168 ASSERT(*pAnnot); | 168 ASSERT(*pAnnot); |
169 return GetAnnotHandler(pAnnot->Get()) | 169 return GetAnnotHandler(pAnnot->Get()) |
170 ->OnRButtonUp(pPageView, pAnnot, nFlags, point); | 170 ->OnRButtonUp(pPageView, pAnnot, nFlags, point); |
171 } | 171 } |
172 | 172 |
173 void CPDFSDK_AnnotHandlerMgr::Annot_OnMouseEnter( | 173 void CPDFSDK_AnnotHandlerMgr::Annot_OnMouseEnter( |
174 CPDFSDK_PageView* pPageView, | 174 CPDFSDK_PageView* pPageView, |
175 CPDFSDK_Annot::ObservedPtr* pAnnot, | 175 CPDFSDK_Annot::ObservedPtr* pAnnot, |
176 uint32_t nFlag) { | 176 uint32_t nFlag) { |
177 ASSERT(*pAnnot); | 177 ASSERT(*pAnnot); |
178 GetAnnotHandler(pAnnot->Get())->OnMouseEnter(pPageView, pAnnot, nFlag); | 178 GetAnnotHandler(pAnnot->Get())->OnMouseEnter(pPageView, pAnnot, nFlag); |
179 } | 179 } |
180 | 180 |
181 void CPDFSDK_AnnotHandlerMgr::Annot_OnMouseExit( | 181 void CPDFSDK_AnnotHandlerMgr::Annot_OnMouseExit( |
182 CPDFSDK_PageView* pPageView, | 182 CPDFSDK_PageView* pPageView, |
183 CPDFSDK_Annot::ObservedPtr* pAnnot, | 183 CPDFSDK_Annot::ObservedPtr* pAnnot, |
184 uint32_t nFlag) { | 184 uint32_t nFlag) { |
185 ASSERT(*pAnnot); | 185 ASSERT(*pAnnot); |
186 GetAnnotHandler(pAnnot->Get())->OnMouseExit(pPageView, pAnnot, nFlag); | 186 GetAnnotHandler(pAnnot->Get())->OnMouseExit(pPageView, pAnnot, nFlag); |
187 } | 187 } |
188 | 188 |
189 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnChar(CPDFSDK_Annot* pAnnot, | 189 bool CPDFSDK_AnnotHandlerMgr::Annot_OnChar(CPDFSDK_Annot* pAnnot, |
190 uint32_t nChar, | 190 uint32_t nChar, |
191 uint32_t nFlags) { | 191 uint32_t nFlags) { |
192 return GetAnnotHandler(pAnnot)->OnChar(pAnnot, nChar, nFlags); | 192 return GetAnnotHandler(pAnnot)->OnChar(pAnnot, nChar, nFlags); |
193 } | 193 } |
194 | 194 |
195 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnKeyDown(CPDFSDK_Annot* pAnnot, | 195 bool CPDFSDK_AnnotHandlerMgr::Annot_OnKeyDown(CPDFSDK_Annot* pAnnot, |
196 int nKeyCode, | 196 int nKeyCode, |
197 int nFlag) { | 197 int nFlag) { |
198 if (m_pFormFillEnv->IsCTRLKeyDown(nFlag) || | 198 if (m_pFormFillEnv->IsCTRLKeyDown(nFlag) || |
199 m_pFormFillEnv->IsALTKeyDown(nFlag)) | 199 m_pFormFillEnv->IsALTKeyDown(nFlag)) |
200 return GetAnnotHandler(pAnnot)->OnKeyDown(pAnnot, nKeyCode, nFlag); | 200 return GetAnnotHandler(pAnnot)->OnKeyDown(pAnnot, nKeyCode, nFlag); |
201 | 201 |
202 CPDFSDK_PageView* pPage = pAnnot->GetPageView(); | 202 CPDFSDK_PageView* pPage = pAnnot->GetPageView(); |
203 CPDFSDK_Annot* pFocusAnnot = pPage->GetFocusAnnot(); | 203 CPDFSDK_Annot* pFocusAnnot = pPage->GetFocusAnnot(); |
204 if (pFocusAnnot && (nKeyCode == FWL_VKEY_Tab)) { | 204 if (pFocusAnnot && (nKeyCode == FWL_VKEY_Tab)) { |
205 CPDFSDK_Annot::ObservedPtr pNext( | 205 CPDFSDK_Annot::ObservedPtr pNext( |
206 GetNextAnnot(pFocusAnnot, !m_pFormFillEnv->IsSHIFTKeyDown(nFlag))); | 206 GetNextAnnot(pFocusAnnot, !m_pFormFillEnv->IsSHIFTKeyDown(nFlag))); |
207 if (pNext && pNext.Get() != pFocusAnnot) { | 207 if (pNext && pNext.Get() != pFocusAnnot) { |
208 pPage->GetFormFillEnv()->SetFocusAnnot(&pNext); | 208 pPage->GetFormFillEnv()->SetFocusAnnot(&pNext); |
209 return TRUE; | 209 return true; |
210 } | 210 } |
211 } | 211 } |
212 | 212 |
213 return FALSE; | 213 return false; |
214 } | 214 } |
215 | 215 |
216 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnKeyUp(CPDFSDK_Annot* pAnnot, | 216 bool CPDFSDK_AnnotHandlerMgr::Annot_OnKeyUp(CPDFSDK_Annot* pAnnot, |
217 int nKeyCode, | 217 int nKeyCode, |
218 int nFlag) { | 218 int nFlag) { |
219 return FALSE; | 219 return false; |
220 } | 220 } |
221 | 221 |
222 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnSetFocus( | 222 bool CPDFSDK_AnnotHandlerMgr::Annot_OnSetFocus( |
223 CPDFSDK_Annot::ObservedPtr* pAnnot, | 223 CPDFSDK_Annot::ObservedPtr* pAnnot, |
224 uint32_t nFlag) { | 224 uint32_t nFlag) { |
225 ASSERT(*pAnnot); | 225 ASSERT(*pAnnot); |
226 return GetAnnotHandler(pAnnot->Get())->OnSetFocus(pAnnot, nFlag); | 226 return GetAnnotHandler(pAnnot->Get())->OnSetFocus(pAnnot, nFlag); |
227 } | 227 } |
228 | 228 |
229 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnKillFocus( | 229 bool CPDFSDK_AnnotHandlerMgr::Annot_OnKillFocus( |
230 CPDFSDK_Annot::ObservedPtr* pAnnot, | 230 CPDFSDK_Annot::ObservedPtr* pAnnot, |
231 uint32_t nFlag) { | 231 uint32_t nFlag) { |
232 ASSERT(*pAnnot); | 232 ASSERT(*pAnnot); |
233 return GetAnnotHandler(pAnnot->Get())->OnKillFocus(pAnnot, nFlag); | 233 return GetAnnotHandler(pAnnot->Get())->OnKillFocus(pAnnot, nFlag); |
234 } | 234 } |
235 | 235 |
236 #ifdef PDF_ENABLE_XFA | 236 #ifdef PDF_ENABLE_XFA |
237 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnChangeFocus( | 237 bool CPDFSDK_AnnotHandlerMgr::Annot_OnChangeFocus( |
238 CPDFSDK_Annot::ObservedPtr* pSetAnnot, | 238 CPDFSDK_Annot::ObservedPtr* pSetAnnot, |
239 CPDFSDK_Annot::ObservedPtr* pKillAnnot) { | 239 CPDFSDK_Annot::ObservedPtr* pKillAnnot) { |
240 FX_BOOL bXFA = (*pSetAnnot && (*pSetAnnot)->GetXFAWidget()) || | 240 bool bXFA = (*pSetAnnot && (*pSetAnnot)->GetXFAWidget()) || |
241 (*pKillAnnot && (*pKillAnnot)->GetXFAWidget()); | 241 (*pKillAnnot && (*pKillAnnot)->GetXFAWidget()); |
242 | 242 |
243 if (bXFA) { | 243 if (bXFA) { |
244 if (IPDFSDK_AnnotHandler* pXFAAnnotHandler = | 244 if (IPDFSDK_AnnotHandler* pXFAAnnotHandler = |
245 GetAnnotHandler(CPDF_Annot::Subtype::XFAWIDGET)) | 245 GetAnnotHandler(CPDF_Annot::Subtype::XFAWIDGET)) |
246 return pXFAAnnotHandler->OnXFAChangedFocus(pKillAnnot, pSetAnnot); | 246 return pXFAAnnotHandler->OnXFAChangedFocus(pKillAnnot, pSetAnnot); |
247 } | 247 } |
248 | 248 |
249 return TRUE; | 249 return true; |
250 } | 250 } |
251 #endif // PDF_ENABLE_XFA | 251 #endif // PDF_ENABLE_XFA |
252 | 252 |
253 CFX_FloatRect CPDFSDK_AnnotHandlerMgr::Annot_OnGetViewBBox( | 253 CFX_FloatRect CPDFSDK_AnnotHandlerMgr::Annot_OnGetViewBBox( |
254 CPDFSDK_PageView* pPageView, | 254 CPDFSDK_PageView* pPageView, |
255 CPDFSDK_Annot* pAnnot) { | 255 CPDFSDK_Annot* pAnnot) { |
256 ASSERT(pAnnot); | 256 ASSERT(pAnnot); |
257 return GetAnnotHandler(pAnnot)->GetViewBBox(pPageView, pAnnot); | 257 return GetAnnotHandler(pAnnot)->GetViewBBox(pPageView, pAnnot); |
258 } | 258 } |
259 | 259 |
260 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnHitTest(CPDFSDK_PageView* pPageView, | 260 bool CPDFSDK_AnnotHandlerMgr::Annot_OnHitTest(CPDFSDK_PageView* pPageView, |
261 CPDFSDK_Annot* pAnnot, | 261 CPDFSDK_Annot* pAnnot, |
262 const CFX_FloatPoint& point) { | 262 const CFX_FloatPoint& point) { |
263 ASSERT(pAnnot); | 263 ASSERT(pAnnot); |
264 IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot); | 264 IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot); |
265 if (pAnnotHandler->CanAnswer(pAnnot)) | 265 if (pAnnotHandler->CanAnswer(pAnnot)) |
266 return pAnnotHandler->HitTest(pPageView, pAnnot, point); | 266 return pAnnotHandler->HitTest(pPageView, pAnnot, point); |
267 | 267 |
268 return FALSE; | 268 return false; |
269 } | 269 } |
270 | 270 |
271 CPDFSDK_Annot* CPDFSDK_AnnotHandlerMgr::GetNextAnnot(CPDFSDK_Annot* pSDKAnnot, | 271 CPDFSDK_Annot* CPDFSDK_AnnotHandlerMgr::GetNextAnnot(CPDFSDK_Annot* pSDKAnnot, |
272 FX_BOOL bNext) { | 272 bool bNext) { |
273 #ifdef PDF_ENABLE_XFA | 273 #ifdef PDF_ENABLE_XFA |
274 CPDFSDK_PageView* pPageView = pSDKAnnot->GetPageView(); | 274 CPDFSDK_PageView* pPageView = pSDKAnnot->GetPageView(); |
275 CPDFXFA_Page* pPage = pPageView->GetPDFXFAPage(); | 275 CPDFXFA_Page* pPage = pPageView->GetPDFXFAPage(); |
276 if (!pPage) | 276 if (!pPage) |
277 return nullptr; | 277 return nullptr; |
278 if (pPage->GetPDFPage()) { // for pdf annots. | 278 if (pPage->GetPDFPage()) { // for pdf annots. |
279 CBA_AnnotIterator ai(pSDKAnnot->GetPageView(), | 279 CBA_AnnotIterator ai(pSDKAnnot->GetPageView(), |
280 pSDKAnnot->GetAnnotSubtype()); | 280 pSDKAnnot->GetAnnotSubtype()); |
281 CPDFSDK_Annot* pNext = | 281 CPDFSDK_Annot* pNext = |
282 bNext ? ai.GetNextAnnot(pSDKAnnot) : ai.GetPrevAnnot(pSDKAnnot); | 282 bNext ? ai.GetNextAnnot(pSDKAnnot) : ai.GetPrevAnnot(pSDKAnnot); |
(...skipping 13 matching lines...) Expand all Loading... |
296 bNext ? pWidgetIterator->MoveToNext() : pWidgetIterator->MoveToPrevious(); | 296 bNext ? pWidgetIterator->MoveToNext() : pWidgetIterator->MoveToPrevious(); |
297 if (!hNextFocus && pSDKAnnot) | 297 if (!hNextFocus && pSDKAnnot) |
298 hNextFocus = pWidgetIterator->MoveToFirst(); | 298 hNextFocus = pWidgetIterator->MoveToFirst(); |
299 | 299 |
300 return pPageView->GetAnnotByXFAWidget(hNextFocus); | 300 return pPageView->GetAnnotByXFAWidget(hNextFocus); |
301 #else // PDF_ENABLE_XFA | 301 #else // PDF_ENABLE_XFA |
302 CBA_AnnotIterator ai(pSDKAnnot->GetPageView(), CPDF_Annot::Subtype::WIDGET); | 302 CBA_AnnotIterator ai(pSDKAnnot->GetPageView(), CPDF_Annot::Subtype::WIDGET); |
303 return bNext ? ai.GetNextAnnot(pSDKAnnot) : ai.GetPrevAnnot(pSDKAnnot); | 303 return bNext ? ai.GetNextAnnot(pSDKAnnot) : ai.GetPrevAnnot(pSDKAnnot); |
304 #endif // PDF_ENABLE_XFA | 304 #endif // PDF_ENABLE_XFA |
305 } | 305 } |
OLD | NEW |