Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(111)

Side by Side Diff: core/src/fpdfdoc/doc_annot.cpp

Issue 1520643002: Replace several more CFX_MapPtrToPtr with std::set or std::map (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 PDFium Authors. All rights reserved. 1 // Copyright 2014 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 "core/include/fpdfapi/fpdf_pageobj.h" 7 #include "core/include/fpdfapi/fpdf_pageobj.h"
8 #include "core/include/fpdfdoc/fpdf_doc.h" 8 #include "core/include/fpdfdoc/fpdf_doc.h"
9 #include "third_party/base/nonstd_unique_ptr.h" 9 #include "third_party/base/nonstd_unique_ptr.h"
10 10
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 } 117 }
118 118
119 CPDF_Annot::CPDF_Annot(CPDF_Dictionary* pDict, CPDF_AnnotList* pList) 119 CPDF_Annot::CPDF_Annot(CPDF_Dictionary* pDict, CPDF_AnnotList* pList)
120 : m_pAnnotDict(pDict), 120 : m_pAnnotDict(pDict),
121 m_pList(pList), 121 m_pList(pList),
122 m_sSubtype(m_pAnnotDict->GetConstString(FX_BSTRC("Subtype"))) {} 122 m_sSubtype(m_pAnnotDict->GetConstString(FX_BSTRC("Subtype"))) {}
123 CPDF_Annot::~CPDF_Annot() { 123 CPDF_Annot::~CPDF_Annot() {
124 ClearCachedAP(); 124 ClearCachedAP();
125 } 125 }
126 void CPDF_Annot::ClearCachedAP() { 126 void CPDF_Annot::ClearCachedAP() {
127 FX_POSITION pos = m_APMap.GetStartPosition(); 127 for (const auto& pair : m_APMap) {
128 while (pos) { 128 delete pair.second;
129 void* pForm;
130 void* pObjects;
131 m_APMap.GetNextAssoc(pos, pForm, pObjects);
132 delete (CPDF_PageObjects*)pObjects;
133 } 129 }
134 m_APMap.RemoveAll(); 130 m_APMap.clear();
135 } 131 }
136 CFX_ByteString CPDF_Annot::GetSubType() const { 132 CFX_ByteString CPDF_Annot::GetSubType() const {
137 return m_sSubtype; 133 return m_sSubtype;
138 } 134 }
139 135
140 void CPDF_Annot::GetRect(CPDF_Rect& rect) const { 136 void CPDF_Annot::GetRect(CPDF_Rect& rect) const {
141 if (m_pAnnotDict == NULL) { 137 if (m_pAnnotDict == NULL) {
142 return; 138 return;
143 } 139 }
144 rect = m_pAnnotDict->GetRect("Rect"); 140 rect = m_pAnnotDict->GetRect("Rect");
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 return pDict->GetStream(as); 181 return pDict->GetStream(as);
186 } 182 }
187 return nullptr; 183 return nullptr;
188 } 184 }
189 185
190 CPDF_Form* CPDF_Annot::GetAPForm(const CPDF_Page* pPage, AppearanceMode mode) { 186 CPDF_Form* CPDF_Annot::GetAPForm(const CPDF_Page* pPage, AppearanceMode mode) {
191 CPDF_Stream* pStream = FPDFDOC_GetAnnotAP(m_pAnnotDict, mode); 187 CPDF_Stream* pStream = FPDFDOC_GetAnnotAP(m_pAnnotDict, mode);
192 if (!pStream) 188 if (!pStream)
193 return nullptr; 189 return nullptr;
194 190
195 void* pForm; 191 auto it = m_APMap.find(pStream);
196 if (m_APMap.Lookup(pStream, pForm)) 192 if (it != m_APMap.end())
197 return static_cast<CPDF_Form*>(pForm); 193 return it->second;
198 194
199 CPDF_Form* pNewForm = 195 CPDF_Form* pNewForm =
200 new CPDF_Form(m_pList->GetDocument(), pPage->m_pResources, pStream); 196 new CPDF_Form(m_pList->GetDocument(), pPage->m_pResources, pStream);
201 pNewForm->ParseContent(nullptr, nullptr, nullptr, nullptr); 197 pNewForm->ParseContent(nullptr, nullptr, nullptr, nullptr);
202 m_APMap.SetAt(pStream, pNewForm); 198 m_APMap[pStream] = pNewForm;
203 return pNewForm; 199 return pNewForm;
204 } 200 }
205 201
206 static CPDF_Form* FPDFDOC_Annot_GetMatrix(const CPDF_Page* pPage, 202 static CPDF_Form* FPDFDOC_Annot_GetMatrix(const CPDF_Page* pPage,
207 CPDF_Annot* pAnnot, 203 CPDF_Annot* pAnnot,
208 CPDF_Annot::AppearanceMode mode, 204 CPDF_Annot::AppearanceMode mode,
209 const CFX_AffineMatrix* pUser2Device, 205 const CFX_AffineMatrix* pUser2Device,
210 CFX_Matrix& matrix) { 206 CFX_Matrix& matrix) {
211 CPDF_Form* pForm = pAnnot->GetAPForm(pPage, mode); 207 CPDF_Form* pForm = pAnnot->GetAPForm(pPage, mode);
212 if (!pForm) { 208 if (!pForm) {
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 CPDF_PathData path; 339 CPDF_PathData path;
344 width /= 2; 340 width /= 2;
345 path.AppendRect(rect.left + width, rect.bottom + width, rect.right - width, 341 path.AppendRect(rect.left + width, rect.bottom + width, rect.right - width,
346 rect.top - width); 342 rect.top - width);
347 int fill_type = 0; 343 int fill_type = 0;
348 if (pOptions && (pOptions->m_Flags & RENDER_NOPATHSMOOTH)) { 344 if (pOptions && (pOptions->m_Flags & RENDER_NOPATHSMOOTH)) {
349 fill_type |= FXFILL_NOPATHSMOOTH; 345 fill_type |= FXFILL_NOPATHSMOOTH;
350 } 346 }
351 pDevice->DrawPath(&path, pUser2Device, &graph_state, argb, argb, fill_type); 347 pDevice->DrawPath(&path, pUser2Device, &graph_state, argb, argb, fill_type);
352 } 348 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698