| 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_pageview.h" |    7 #include "fpdfsdk/cpdfsdk_pageview.h" | 
|    8  |    8  | 
|    9 #include <memory> |    9 #include <memory> | 
|   10 #include <vector> |   10 #include <vector> | 
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   60 CPDFSDK_PageView::~CPDFSDK_PageView() { |   60 CPDFSDK_PageView::~CPDFSDK_PageView() { | 
|   61 #ifndef PDF_ENABLE_XFA |   61 #ifndef PDF_ENABLE_XFA | 
|   62   // The call to |ReleaseAnnot| can cause the page pointed to by |m_page| to |   62   // The call to |ReleaseAnnot| can cause the page pointed to by |m_page| to | 
|   63   // be freed, which will cause issues if we try to cleanup the pageview pointer |   63   // be freed, which will cause issues if we try to cleanup the pageview pointer | 
|   64   // in |m_page|. So, reset the pageview pointer before doing anything else. |   64   // in |m_page|. So, reset the pageview pointer before doing anything else. | 
|   65   m_page->SetView(nullptr); |   65   m_page->SetView(nullptr); | 
|   66 #endif  // PDF_ENABLE_XFA |   66 #endif  // PDF_ENABLE_XFA | 
|   67  |   67  | 
|   68   CPDFSDK_Environment* pEnv = m_pSDKDoc->GetEnv(); |   68   CPDFSDK_Environment* pEnv = m_pSDKDoc->GetEnv(); | 
|   69   CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr(); |   69   CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr(); | 
|   70   for (CPDFSDK_Annot* pAnnot : m_fxAnnotArray) |   70   for (CPDFSDK_Annot* pAnnot : m_SDKAnnotArray) | 
|   71     pAnnotHandlerMgr->ReleaseAnnot(pAnnot); |   71     pAnnotHandlerMgr->ReleaseAnnot(pAnnot); | 
|   72  |   72  | 
|   73   m_fxAnnotArray.clear(); |   73   m_SDKAnnotArray.clear(); | 
|   74   m_pAnnotList.reset(); |   74   m_pAnnotList.reset(); | 
|   75  |   75  | 
|   76 #ifndef PDF_ENABLE_XFA |   76 #ifndef PDF_ENABLE_XFA | 
|   77   if (m_bOwnsPage) |   77   if (m_bOwnsPage) | 
|   78     delete m_page; |   78     delete m_page; | 
|   79 #endif  // PDF_ENABLE_XFA |   79 #endif  // PDF_ENABLE_XFA | 
|   80 } |   80 } | 
|   81  |   81  | 
|   82 void CPDFSDK_PageView::PageView_OnDraw(CFX_RenderDevice* pDevice, |   82 void CPDFSDK_PageView::PageView_OnDraw(CFX_RenderDevice* pDevice, | 
|   83                                        CFX_Matrix* pUser2Device, |   83                                        CFX_Matrix* pUser2Device, | 
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  126  |  126  | 
|  127   // for pdf/static xfa. |  127   // for pdf/static xfa. | 
|  128   CPDFSDK_AnnotIterator annotIterator(this, true); |  128   CPDFSDK_AnnotIterator annotIterator(this, true); | 
|  129   while (CPDFSDK_Annot* pSDKAnnot = annotIterator.Next()) { |  129   while (CPDFSDK_Annot* pSDKAnnot = annotIterator.Next()) { | 
|  130     CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr(); |  130     CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr(); | 
|  131     pAnnotHandlerMgr->Annot_OnDraw(this, pSDKAnnot, pDevice, pUser2Device, |  131     pAnnotHandlerMgr->Annot_OnDraw(this, pSDKAnnot, pDevice, pUser2Device, | 
|  132                                    pOptions->m_bDrawAnnots); |  132                                    pOptions->m_bDrawAnnots); | 
|  133   } |  133   } | 
|  134 } |  134 } | 
|  135  |  135  | 
|  136 const CPDF_Annot* CPDFSDK_PageView::GetPDFAnnotAtPoint(FX_FLOAT pageX, |  | 
|  137                                                        FX_FLOAT pageY) { |  | 
|  138   for (const auto& pAnnot : m_pAnnotList->All()) { |  | 
|  139     CFX_FloatRect annotRect = pAnnot->GetRect(); |  | 
|  140     if (annotRect.Contains(pageX, pageY)) |  | 
|  141       return pAnnot.get(); |  | 
|  142   } |  | 
|  143   return nullptr; |  | 
|  144 } |  | 
|  145  |  | 
|  146 const CPDF_Annot* CPDFSDK_PageView::GetPDFWidgetAtPoint(FX_FLOAT pageX, |  | 
|  147                                                         FX_FLOAT pageY) { |  | 
|  148   for (const auto& pAnnot : m_pAnnotList->All()) { |  | 
|  149     if (pAnnot->GetSubtype() == CPDF_Annot::Subtype::WIDGET) { |  | 
|  150       CFX_FloatRect annotRect = pAnnot->GetRect(); |  | 
|  151       if (annotRect.Contains(pageX, pageY)) |  | 
|  152         return pAnnot.get(); |  | 
|  153     } |  | 
|  154   } |  | 
|  155   return nullptr; |  | 
|  156 } |  | 
|  157  |  | 
|  158 CPDFSDK_Annot* CPDFSDK_PageView::GetFXAnnotAtPoint(FX_FLOAT pageX, |  136 CPDFSDK_Annot* CPDFSDK_PageView::GetFXAnnotAtPoint(FX_FLOAT pageX, | 
|  159                                                    FX_FLOAT pageY) { |  137                                                    FX_FLOAT pageY) { | 
|  160   CPDFSDK_Environment* pEnv = m_pSDKDoc->GetEnv(); |  138   CPDFSDK_Environment* pEnv = m_pSDKDoc->GetEnv(); | 
|  161   CPDFSDK_AnnotHandlerMgr* pAnnotMgr = pEnv->GetAnnotHandlerMgr(); |  139   CPDFSDK_AnnotHandlerMgr* pAnnotMgr = pEnv->GetAnnotHandlerMgr(); | 
|  162   CPDFSDK_AnnotIterator annotIterator(this, false); |  140   CPDFSDK_AnnotIterator annotIterator(this, false); | 
|  163   while (CPDFSDK_Annot* pSDKAnnot = annotIterator.Next()) { |  141   while (CPDFSDK_Annot* pSDKAnnot = annotIterator.Next()) { | 
|  164     CFX_FloatRect rc = pAnnotMgr->Annot_OnGetViewBBox(this, pSDKAnnot); |  142     CFX_FloatRect rc = pAnnotMgr->Annot_OnGetViewBBox(this, pSDKAnnot); | 
|  165     if (pSDKAnnot->GetAnnotSubtype() == CPDF_Annot::Subtype::POPUP) |  143     if (pSDKAnnot->GetAnnotSubtype() == CPDF_Annot::Subtype::POPUP) | 
|  166       continue; |  144       continue; | 
|  167     if (rc.Contains(pageX, pageY)) |  145     if (rc.Contains(pageX, pageY)) | 
| (...skipping 18 matching lines...) Expand all  Loading... | 
|  186       pAnnotMgr->Annot_OnGetViewBBox(this, pSDKAnnot); |  164       pAnnotMgr->Annot_OnGetViewBBox(this, pSDKAnnot); | 
|  187       CFX_FloatPoint point(pageX, pageY); |  165       CFX_FloatPoint point(pageX, pageY); | 
|  188       if (pAnnotMgr->Annot_OnHitTest(this, pSDKAnnot, point)) |  166       if (pAnnotMgr->Annot_OnHitTest(this, pSDKAnnot, point)) | 
|  189         return pSDKAnnot; |  167         return pSDKAnnot; | 
|  190     } |  168     } | 
|  191   } |  169   } | 
|  192  |  170  | 
|  193   return nullptr; |  171   return nullptr; | 
|  194 } |  172 } | 
|  195  |  173  | 
|  196 void CPDFSDK_PageView::KillFocusAnnotIfNeeded() { |  | 
|  197   // if there is a focused annot on the page, we should kill the focus first. |  | 
|  198   if (CPDFSDK_Annot* focusedAnnot = m_pSDKDoc->GetFocusAnnot()) { |  | 
|  199     if (pdfium::ContainsValue(m_fxAnnotArray, focusedAnnot)) |  | 
|  200       KillFocusAnnot(); |  | 
|  201   } |  | 
|  202 } |  | 
|  203  |  | 
|  204 CPDFSDK_Annot* CPDFSDK_PageView::AddAnnot(CPDF_Annot* pPDFAnnot) { |  | 
|  205   CPDFSDK_Environment* pEnv = m_pSDKDoc->GetEnv(); |  | 
|  206   ASSERT(pEnv); |  | 
|  207   CPDFSDK_AnnotHandlerMgr* pAnnotHandler = pEnv->GetAnnotHandlerMgr(); |  | 
|  208   CPDFSDK_Annot* pSDKAnnot = pAnnotHandler->NewAnnot(pPDFAnnot, this); |  | 
|  209   if (!pSDKAnnot) |  | 
|  210     return nullptr; |  | 
|  211  |  | 
|  212   m_fxAnnotArray.push_back(pSDKAnnot); |  | 
|  213   pAnnotHandler->Annot_OnCreate(pSDKAnnot); |  | 
|  214   return pSDKAnnot; |  | 
|  215 } |  | 
|  216  |  | 
|  217 #ifdef PDF_ENABLE_XFA |  174 #ifdef PDF_ENABLE_XFA | 
|  218 CPDFSDK_Annot* CPDFSDK_PageView::AddAnnot(CXFA_FFWidget* pPDFAnnot) { |  175 CPDFSDK_Annot* CPDFSDK_PageView::AddAnnot(CXFA_FFWidget* pPDFAnnot) { | 
|  219   if (!pPDFAnnot) |  176   if (!pPDFAnnot) | 
|  220     return nullptr; |  177     return nullptr; | 
|  221  |  178  | 
|  222   CPDFSDK_Annot* pSDKAnnot = GetAnnotByXFAWidget(pPDFAnnot); |  179   CPDFSDK_Annot* pSDKAnnot = GetAnnotByXFAWidget(pPDFAnnot); | 
|  223   if (pSDKAnnot) |  180   if (pSDKAnnot) | 
|  224     return pSDKAnnot; |  181     return pSDKAnnot; | 
|  225  |  182  | 
|  226   CPDFSDK_Environment* pEnv = m_pSDKDoc->GetEnv(); |  183   CPDFSDK_Environment* pEnv = m_pSDKDoc->GetEnv(); | 
|  227   CPDFSDK_AnnotHandlerMgr* pAnnotHandler = pEnv->GetAnnotHandlerMgr(); |  184   CPDFSDK_AnnotHandlerMgr* pAnnotHandler = pEnv->GetAnnotHandlerMgr(); | 
|  228   pSDKAnnot = pAnnotHandler->NewAnnot(pPDFAnnot, this); |  185   pSDKAnnot = pAnnotHandler->NewAnnot(pPDFAnnot, this); | 
|  229   if (!pSDKAnnot) |  186   if (!pSDKAnnot) | 
|  230     return nullptr; |  187     return nullptr; | 
|  231  |  188  | 
|  232   m_fxAnnotArray.push_back(pSDKAnnot); |  189   m_SDKAnnotArray.push_back(pSDKAnnot); | 
|  233   return pSDKAnnot; |  190   return pSDKAnnot; | 
|  234 } |  191 } | 
|  235 #endif  // PDF_ENABLE_XFA |  | 
|  236  |  | 
|  237 CPDFSDK_Annot* CPDFSDK_PageView::AddAnnot(CPDF_Dictionary* pDict) { |  | 
|  238   return pDict ? AddAnnot(pDict->GetStringFor("Subtype").c_str(), pDict) |  | 
|  239                : nullptr; |  | 
|  240 } |  | 
|  241  |  | 
|  242 CPDFSDK_Annot* CPDFSDK_PageView::AddAnnot(const FX_CHAR* lpSubType, |  | 
|  243                                           CPDF_Dictionary* pDict) { |  | 
|  244   return nullptr; |  | 
|  245 } |  | 
|  246  |  192  | 
|  247 FX_BOOL CPDFSDK_PageView::DeleteAnnot(CPDFSDK_Annot* pAnnot) { |  193 FX_BOOL CPDFSDK_PageView::DeleteAnnot(CPDFSDK_Annot* pAnnot) { | 
|  248 #ifdef PDF_ENABLE_XFA |  | 
|  249   if (!pAnnot) |  194   if (!pAnnot) | 
|  250     return FALSE; |  195     return FALSE; | 
|  251   CPDFXFA_Page* pPage = pAnnot->GetPDFXFAPage(); |  196   CPDFXFA_Page* pPage = pAnnot->GetPDFXFAPage(); | 
|  252   if (!pPage || (pPage->GetDocument()->GetDocType() != DOCTYPE_STATIC_XFA && |  197   if (!pPage || (pPage->GetDocument()->GetDocType() != DOCTYPE_STATIC_XFA && | 
|  253                  pPage->GetDocument()->GetDocType() != DOCTYPE_DYNAMIC_XFA)) |  198                  pPage->GetDocument()->GetDocType() != DOCTYPE_DYNAMIC_XFA)) | 
|  254     return FALSE; |  199     return FALSE; | 
|  255  |  200  | 
|  256   if (GetFocusAnnot() == pAnnot) |  201   if (GetFocusAnnot() == pAnnot) | 
|  257     KillFocusAnnot(); |  202     m_pSDKDoc->KillFocusAnnot(0); | 
|  258   CPDFSDK_Environment* pEnv = m_pSDKDoc->GetEnv(); |  203   CPDFSDK_Environment* pEnv = m_pSDKDoc->GetEnv(); | 
|  259   CPDFSDK_AnnotHandlerMgr* pAnnotHandler = pEnv->GetAnnotHandlerMgr(); |  204   CPDFSDK_AnnotHandlerMgr* pAnnotHandler = pEnv->GetAnnotHandlerMgr(); | 
|  260   if (pAnnotHandler) |  205   if (pAnnotHandler) | 
|  261     pAnnotHandler->ReleaseAnnot(pAnnot); |  206     pAnnotHandler->ReleaseAnnot(pAnnot); | 
|  262  |  207  | 
|  263   auto it = std::find(m_fxAnnotArray.begin(), m_fxAnnotArray.end(), pAnnot); |  208   auto it = std::find(m_SDKAnnotArray.begin(), m_SDKAnnotArray.end(), pAnnot); | 
|  264   if (it != m_fxAnnotArray.end()) |  209   if (it != m_SDKAnnotArray.end()) | 
|  265     m_fxAnnotArray.erase(it); |  210     m_SDKAnnotArray.erase(it); | 
|  266   if (m_pCaptureWidget.Get() == pAnnot) |  211   if (m_pCaptureWidget.Get() == pAnnot) | 
|  267     m_pCaptureWidget.Reset(); |  212     m_pCaptureWidget.Reset(); | 
|  268  |  213  | 
|  269   return TRUE; |  214   return TRUE; | 
|  270 #else   // PDF_ENABLE_XFA |  215 } | 
|  271   return FALSE; |  | 
|  272 #endif  // PDF_ENABLE_XFA |  216 #endif  // PDF_ENABLE_XFA | 
|  273 } |  | 
|  274  |  217  | 
|  275 CPDF_Document* CPDFSDK_PageView::GetPDFDocument() { |  218 CPDF_Document* CPDFSDK_PageView::GetPDFDocument() { | 
|  276   if (m_page) { |  219   if (m_page) { | 
|  277 #ifdef PDF_ENABLE_XFA |  220 #ifdef PDF_ENABLE_XFA | 
|  278     return m_page->GetDocument()->GetPDFDoc(); |  221     return m_page->GetDocument()->GetPDFDoc(); | 
|  279 #else   // PDF_ENABLE_XFA |  222 #else   // PDF_ENABLE_XFA | 
|  280     return m_page->m_pDocument; |  223     return m_page->m_pDocument; | 
|  281 #endif  // PDF_ENABLE_XFA |  224 #endif  // PDF_ENABLE_XFA | 
|  282   } |  225   } | 
|  283   return nullptr; |  226   return nullptr; | 
|  284 } |  227 } | 
|  285  |  228  | 
|  286 CPDF_Page* CPDFSDK_PageView::GetPDFPage() const { |  229 CPDF_Page* CPDFSDK_PageView::GetPDFPage() const { | 
|  287 #ifdef PDF_ENABLE_XFA |  230 #ifdef PDF_ENABLE_XFA | 
|  288   return m_page ? m_page->GetPDFPage() : nullptr; |  231   return m_page ? m_page->GetPDFPage() : nullptr; | 
|  289 #else   // PDF_ENABLE_XFA |  232 #else   // PDF_ENABLE_XFA | 
|  290   return m_page; |  233   return m_page; | 
|  291 #endif  // PDF_ENABLE_XFA |  234 #endif  // PDF_ENABLE_XFA | 
|  292 } |  235 } | 
|  293  |  236  | 
|  294 size_t CPDFSDK_PageView::CountAnnots() const { |  | 
|  295   return m_fxAnnotArray.size(); |  | 
|  296 } |  | 
|  297  |  | 
|  298 CPDFSDK_Annot* CPDFSDK_PageView::GetAnnot(size_t nIndex) { |  | 
|  299   return nIndex < m_fxAnnotArray.size() ? m_fxAnnotArray[nIndex] : nullptr; |  | 
|  300 } |  | 
|  301  |  | 
|  302 CPDFSDK_Annot* CPDFSDK_PageView::GetAnnotByDict(CPDF_Dictionary* pDict) { |  237 CPDFSDK_Annot* CPDFSDK_PageView::GetAnnotByDict(CPDF_Dictionary* pDict) { | 
|  303   for (CPDFSDK_Annot* pAnnot : m_fxAnnotArray) { |  238   for (CPDFSDK_Annot* pAnnot : m_SDKAnnotArray) { | 
|  304     if (pAnnot->GetPDFAnnot()->GetAnnotDict() == pDict) |  239     if (pAnnot->GetPDFAnnot()->GetAnnotDict() == pDict) | 
|  305       return pAnnot; |  240       return pAnnot; | 
|  306   } |  241   } | 
|  307   return nullptr; |  242   return nullptr; | 
|  308 } |  243 } | 
|  309  |  244  | 
|  310 #ifdef PDF_ENABLE_XFA |  245 #ifdef PDF_ENABLE_XFA | 
|  311 CPDFSDK_Annot* CPDFSDK_PageView::GetAnnotByXFAWidget(CXFA_FFWidget* hWidget) { |  246 CPDFSDK_Annot* CPDFSDK_PageView::GetAnnotByXFAWidget(CXFA_FFWidget* hWidget) { | 
|  312   if (!hWidget) |  247   if (!hWidget) | 
|  313     return nullptr; |  248     return nullptr; | 
|  314  |  249  | 
|  315   for (CPDFSDK_Annot* pAnnot : m_fxAnnotArray) { |  250   for (CPDFSDK_Annot* pAnnot : m_SDKAnnotArray) { | 
|  316     if (pAnnot->GetXFAWidget() == hWidget) |  251     if (pAnnot->GetXFAWidget() == hWidget) | 
|  317       return pAnnot; |  252       return pAnnot; | 
|  318   } |  253   } | 
|  319   return nullptr; |  254   return nullptr; | 
|  320 } |  255 } | 
|  321 #endif  // PDF_ENABLE_XFA |  256 #endif  // PDF_ENABLE_XFA | 
|  322  |  257  | 
|  323 FX_BOOL CPDFSDK_PageView::OnLButtonDown(const CFX_FloatPoint& point, |  258 FX_BOOL CPDFSDK_PageView::OnLButtonDown(const CFX_FloatPoint& point, | 
|  324                                         uint32_t nFlag) { |  259                                         uint32_t nFlag) { | 
|  325   CPDFSDK_Annot::ObservedPtr pAnnot(GetFXWidgetAtPoint(point.x, point.y)); |  260   CPDFSDK_Annot::ObservedPtr pAnnot(GetFXWidgetAtPoint(point.x, point.y)); | 
|  326   if (!pAnnot) { |  261   if (!pAnnot) { | 
|  327     KillFocusAnnot(nFlag); |  262     m_pSDKDoc->KillFocusAnnot(nFlag); | 
|  328     return FALSE; |  263     return FALSE; | 
|  329   } |  264   } | 
|  330  |  265  | 
|  331   CPDFSDK_Environment* pEnv = m_pSDKDoc->GetEnv(); |  266   CPDFSDK_Environment* pEnv = m_pSDKDoc->GetEnv(); | 
|  332   CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr(); |  267   CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr(); | 
|  333   if (!pAnnotHandlerMgr->Annot_OnLButtonDown(this, &pAnnot, nFlag, point)) |  268   if (!pAnnotHandlerMgr->Annot_OnLButtonDown(this, &pAnnot, nFlag, point)) | 
|  334     return FALSE; |  269     return FALSE; | 
|  335  |  270  | 
|  336   if (!pAnnot) |  271   if (!pAnnot) | 
|  337     return FALSE; |  272     return FALSE; | 
|  338  |  273  | 
|  339   SetFocusAnnot(&pAnnot); |  274   m_pSDKDoc->SetFocusAnnot(&pAnnot); | 
|  340   return TRUE; |  275   return TRUE; | 
|  341 } |  276 } | 
|  342  |  277  | 
|  343 #ifdef PDF_ENABLE_XFA |  278 #ifdef PDF_ENABLE_XFA | 
|  344 FX_BOOL CPDFSDK_PageView::OnRButtonDown(const CFX_FloatPoint& point, |  279 FX_BOOL CPDFSDK_PageView::OnRButtonDown(const CFX_FloatPoint& point, | 
|  345                                         uint32_t nFlag) { |  280                                         uint32_t nFlag) { | 
|  346   CPDFSDK_Annot::ObservedPtr pAnnot(GetFXWidgetAtPoint(point.x, point.y)); |  281   CPDFSDK_Annot::ObservedPtr pAnnot(GetFXWidgetAtPoint(point.x, point.y)); | 
|  347   if (!pAnnot) |  282   if (!pAnnot) | 
|  348     return FALSE; |  283     return FALSE; | 
|  349  |  284  | 
|  350   CPDFSDK_Environment* pEnv = m_pSDKDoc->GetEnv(); |  285   CPDFSDK_Environment* pEnv = m_pSDKDoc->GetEnv(); | 
|  351   CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr(); |  286   CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr(); | 
|  352   FX_BOOL ok = |  287   FX_BOOL ok = | 
|  353       pAnnotHandlerMgr->Annot_OnRButtonDown(this, &pAnnot, nFlag, point); |  288       pAnnotHandlerMgr->Annot_OnRButtonDown(this, &pAnnot, nFlag, point); | 
|  354   if (!pAnnot) |  289   if (!pAnnot) | 
|  355     return FALSE; |  290     return FALSE; | 
|  356  |  291  | 
|  357   if (ok) |  292   if (ok) | 
|  358     SetFocusAnnot(&pAnnot); |  293     m_pSDKDoc->SetFocusAnnot(&pAnnot); | 
|  359  |  294  | 
|  360   return TRUE; |  295   return TRUE; | 
|  361 } |  296 } | 
|  362  |  297  | 
|  363 FX_BOOL CPDFSDK_PageView::OnRButtonUp(const CFX_FloatPoint& point, |  298 FX_BOOL CPDFSDK_PageView::OnRButtonUp(const CFX_FloatPoint& point, | 
|  364                                       uint32_t nFlag) { |  299                                       uint32_t nFlag) { | 
|  365   CPDFSDK_Environment* pEnv = m_pSDKDoc->GetEnv(); |  300   CPDFSDK_Environment* pEnv = m_pSDKDoc->GetEnv(); | 
|  366   CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr(); |  301   CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr(); | 
|  367   CPDFSDK_Annot::ObservedPtr pFXAnnot(GetFXWidgetAtPoint(point.x, point.y)); |  302   CPDFSDK_Annot::ObservedPtr pFXAnnot(GetFXWidgetAtPoint(point.x, point.y)); | 
|  368   if (!pFXAnnot) |  303   if (!pFXAnnot) | 
|  369     return FALSE; |  304     return FALSE; | 
|  370  |  305  | 
|  371   if (pAnnotHandlerMgr->Annot_OnRButtonUp(this, &pFXAnnot, nFlag, point)) |  306   if (pAnnotHandlerMgr->Annot_OnRButtonUp(this, &pFXAnnot, nFlag, point)) | 
|  372     SetFocusAnnot(&pFXAnnot); |  307     m_pSDKDoc->SetFocusAnnot(&pFXAnnot); | 
|  373  |  308  | 
|  374   return TRUE; |  309   return TRUE; | 
|  375 } |  310 } | 
|  376 #endif  // PDF_ENABLE_XFA |  311 #endif  // PDF_ENABLE_XFA | 
|  377  |  312  | 
|  378 FX_BOOL CPDFSDK_PageView::OnLButtonUp(const CFX_FloatPoint& point, |  313 FX_BOOL CPDFSDK_PageView::OnLButtonUp(const CFX_FloatPoint& point, | 
|  379                                       uint32_t nFlag) { |  314                                       uint32_t nFlag) { | 
|  380   CPDFSDK_Environment* pEnv = m_pSDKDoc->GetEnv(); |  315   CPDFSDK_Environment* pEnv = m_pSDKDoc->GetEnv(); | 
|  381   CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr(); |  316   CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr(); | 
|  382   CPDFSDK_Annot::ObservedPtr pFXAnnot(GetFXWidgetAtPoint(point.x, point.y)); |  317   CPDFSDK_Annot::ObservedPtr pFXAnnot(GetFXWidgetAtPoint(point.x, point.y)); | 
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  475             XFA_WidgetStatus_Visible | XFA_WidgetStatus_Viewable)); |  410             XFA_WidgetStatus_Visible | XFA_WidgetStatus_Viewable)); | 
|  476     if (!pWidgetHander) { |  411     if (!pWidgetHander) { | 
|  477       SetLock(FALSE); |  412       SetLock(FALSE); | 
|  478       return; |  413       return; | 
|  479     } |  414     } | 
|  480  |  415  | 
|  481     while (CXFA_FFWidget* pXFAAnnot = pWidgetHander->MoveToNext()) { |  416     while (CXFA_FFWidget* pXFAAnnot = pWidgetHander->MoveToNext()) { | 
|  482       CPDFSDK_Annot* pAnnot = pAnnotHandlerMgr->NewAnnot(pXFAAnnot, this); |  417       CPDFSDK_Annot* pAnnot = pAnnotHandlerMgr->NewAnnot(pXFAAnnot, this); | 
|  483       if (!pAnnot) |  418       if (!pAnnot) | 
|  484         continue; |  419         continue; | 
|  485       m_fxAnnotArray.push_back(pAnnot); |  420       m_SDKAnnotArray.push_back(pAnnot); | 
|  486       pAnnotHandlerMgr->Annot_OnLoad(pAnnot); |  421       pAnnotHandlerMgr->Annot_OnLoad(pAnnot); | 
|  487     } |  422     } | 
|  488  |  423  | 
|  489     SetLock(FALSE); |  424     SetLock(FALSE); | 
|  490     return; |  425     return; | 
|  491   } |  426   } | 
|  492 #endif  // PDF_ENABLE_XFA |  427 #endif  // PDF_ENABLE_XFA | 
|  493  |  428  | 
|  494   CPDF_Page* pPage = GetPDFPage(); |  429   CPDF_Page* pPage = GetPDFPage(); | 
|  495   ASSERT(pPage); |  430   ASSERT(pPage); | 
|  496   bool bUpdateAP = CPDF_InterForm::IsUpdateAPEnabled(); |  431   bool bUpdateAP = CPDF_InterForm::IsUpdateAPEnabled(); | 
|  497   // Disable the default AP construction. |  432   // Disable the default AP construction. | 
|  498   CPDF_InterForm::SetUpdateAP(false); |  433   CPDF_InterForm::SetUpdateAP(false); | 
|  499   m_pAnnotList = pdfium::MakeUnique<CPDF_AnnotList>(pPage); |  434   m_pAnnotList = pdfium::MakeUnique<CPDF_AnnotList>(pPage); | 
|  500   CPDF_InterForm::SetUpdateAP(bUpdateAP); |  435   CPDF_InterForm::SetUpdateAP(bUpdateAP); | 
|  501  |  436  | 
|  502   const size_t nCount = m_pAnnotList->Count(); |  437   const size_t nCount = m_pAnnotList->Count(); | 
|  503   for (size_t i = 0; i < nCount; ++i) { |  438   for (size_t i = 0; i < nCount; ++i) { | 
|  504     CPDF_Annot* pPDFAnnot = m_pAnnotList->GetAt(i); |  439     CPDF_Annot* pPDFAnnot = m_pAnnotList->GetAt(i); | 
|  505     CheckUnSupportAnnot(GetPDFDocument(), pPDFAnnot); |  440     CheckUnSupportAnnot(GetPDFDocument(), pPDFAnnot); | 
|  506     CPDFSDK_Annot* pAnnot = pAnnotHandlerMgr->NewAnnot(pPDFAnnot, this); |  441     CPDFSDK_Annot* pAnnot = pAnnotHandlerMgr->NewAnnot(pPDFAnnot, this); | 
|  507     if (!pAnnot) |  442     if (!pAnnot) | 
|  508       continue; |  443       continue; | 
|  509     m_fxAnnotArray.push_back(pAnnot); |  444     m_SDKAnnotArray.push_back(pAnnot); | 
|  510     pAnnotHandlerMgr->Annot_OnLoad(pAnnot); |  445     pAnnotHandlerMgr->Annot_OnLoad(pAnnot); | 
|  511   } |  446   } | 
|  512  |  447  | 
|  513   SetLock(FALSE); |  448   SetLock(FALSE); | 
|  514 } |  449 } | 
|  515  |  450  | 
|  516 void CPDFSDK_PageView::UpdateRects(const std::vector<CFX_FloatRect>& rects) { |  451 void CPDFSDK_PageView::UpdateRects(const std::vector<CFX_FloatRect>& rects) { | 
|  517   CPDFSDK_Environment* pEnv = m_pSDKDoc->GetEnv(); |  452   CPDFSDK_Environment* pEnv = m_pSDKDoc->GetEnv(); | 
|  518   for (const auto& rc : rects) |  453   for (const auto& rc : rects) | 
|  519     pEnv->Invalidate(m_page, rc.left, rc.top, rc.right, rc.bottom); |  454     pEnv->Invalidate(m_page, rc.left, rc.top, rc.right, rc.bottom); | 
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  553     return false; |  488     return false; | 
|  554  |  489  | 
|  555   const auto& annots = m_pAnnotList->All(); |  490   const auto& annots = m_pAnnotList->All(); | 
|  556   auto it = std::find_if(annots.begin(), annots.end(), |  491   auto it = std::find_if(annots.begin(), annots.end(), | 
|  557                          [p](const std::unique_ptr<CPDF_Annot>& annot) { |  492                          [p](const std::unique_ptr<CPDF_Annot>& annot) { | 
|  558                            return annot.get() == p; |  493                            return annot.get() == p; | 
|  559                          }); |  494                          }); | 
|  560   return it != annots.end(); |  495   return it != annots.end(); | 
|  561 } |  496 } | 
|  562  |  497  | 
 |  498 bool CPDFSDK_PageView::IsValidSDKAnnot(const CPDFSDK_Annot* p) const { | 
 |  499   if (!p) | 
 |  500     return false; | 
 |  501   return pdfium::ContainsValue(m_SDKAnnotArray, p); | 
 |  502 } | 
 |  503  | 
|  563 CPDFSDK_Annot* CPDFSDK_PageView::GetFocusAnnot() { |  504 CPDFSDK_Annot* CPDFSDK_PageView::GetFocusAnnot() { | 
|  564   CPDFSDK_Annot* pFocusAnnot = m_pSDKDoc->GetFocusAnnot(); |  505   CPDFSDK_Annot* pFocusAnnot = m_pSDKDoc->GetFocusAnnot(); | 
|  565   if (!pFocusAnnot) |  506   return IsValidSDKAnnot(pFocusAnnot) ? pFocusAnnot : nullptr; | 
|  566     return nullptr; |  | 
|  567  |  | 
|  568   for (CPDFSDK_Annot* pAnnot : m_fxAnnotArray) { |  | 
|  569     if (pAnnot == pFocusAnnot) |  | 
|  570       return pAnnot; |  | 
|  571   } |  | 
|  572   return nullptr; |  | 
|  573 } |  507 } | 
|  574  |  508  | 
|  575 int CPDFSDK_PageView::GetPageIndexForStaticPDF() const { |  509 int CPDFSDK_PageView::GetPageIndexForStaticPDF() const { | 
|  576   CPDF_Dictionary* pDict = GetPDFPage()->m_pFormDict; |  510   CPDF_Dictionary* pDict = GetPDFPage()->m_pFormDict; | 
|  577   CPDF_Document* pDoc = m_pSDKDoc->GetPDFDocument(); |  511   CPDF_Document* pDoc = m_pSDKDoc->GetPDFDocument(); | 
|  578   return (pDoc && pDict) ? pDoc->GetPageIndex(pDict->GetObjNum()) : -1; |  512   return (pDoc && pDict) ? pDoc->GetPageIndex(pDict->GetObjNum()) : -1; | 
|  579 } |  513 } | 
| OLD | NEW |