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

Side by Side Diff: fpdfsdk/cba_annotiterator.cpp

Issue 2384323005: Cleanup some CPDFSDK_PageView annotation code. (Closed)
Patch Set: Created 4 years, 2 months 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
« no previous file with comments | « no previous file | fpdfsdk/cpdfsdk_document.h » ('j') | fpdfsdk/cpdfsdk_pageview.h » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/cba_annotiterator.h" 7 #include "fpdfsdk/cba_annotiterator.h"
8 8
9 #include "core/fpdfapi/page/cpdf_page.h" 9 #include "core/fpdfapi/page/cpdf_page.h"
10 #include "fpdfsdk/cpdfsdk_annot.h" 10 #include "fpdfsdk/cpdfsdk_annot.h"
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 CPDFSDK_Annot* CBA_AnnotIterator::GetPrevAnnot(CPDFSDK_Annot* pAnnot) { 60 CPDFSDK_Annot* CBA_AnnotIterator::GetPrevAnnot(CPDFSDK_Annot* pAnnot) {
61 auto iter = std::find(m_Annots.begin(), m_Annots.end(), pAnnot); 61 auto iter = std::find(m_Annots.begin(), m_Annots.end(), pAnnot);
62 if (iter == m_Annots.end()) 62 if (iter == m_Annots.end())
63 return nullptr; 63 return nullptr;
64 if (iter == m_Annots.begin()) 64 if (iter == m_Annots.begin())
65 iter = m_Annots.end(); 65 iter = m_Annots.end();
66 return *(--iter); 66 return *(--iter);
67 } 67 }
68 68
69 void CBA_AnnotIterator::GenerateResults() { 69 void CBA_AnnotIterator::GenerateResults() {
70 switch (m_eTabOrder) { 70 if (m_eTabOrder == STRUCTURE) {
Tom Sepez 2016/10/05 17:08:28 Dunno, I kinda like the switch and pulling the com
dsinclair 2016/10/05 17:52:51 Done.
71 case STRUCTURE: { 71 for (auto pAnnot : m_pPageView->GetAnnotList()) {
72 for (size_t i = 0; i < m_pPageView->CountAnnots(); ++i) { 72 if (pAnnot->GetAnnotSubtype() == m_nAnnotSubtype &&
73 CPDFSDK_Annot* pAnnot = m_pPageView->GetAnnot(i); 73 !pAnnot->IsSignatureWidget()) {
74 if (pAnnot->GetAnnotSubtype() == m_nAnnotSubtype && 74 m_Annots.push_back(pAnnot);
75 !pAnnot->IsSignatureWidget())
76 m_Annots.push_back(pAnnot);
77 } 75 }
78 break;
79 } 76 }
80 case ROW: { 77 return;
81 std::vector<CPDFSDK_Annot*> sa; 78 }
82 for (size_t i = 0; i < m_pPageView->CountAnnots(); ++i) {
83 CPDFSDK_Annot* pAnnot = m_pPageView->GetAnnot(i);
84 if (pAnnot->GetAnnotSubtype() == m_nAnnotSubtype &&
85 !pAnnot->IsSignatureWidget())
86 sa.push_back(pAnnot);
87 }
88 79
89 std::sort(sa.begin(), sa.end(), CompareByLeftAscending); 80 std::vector<CPDFSDK_Annot*> sa;
dsinclair 2016/10/05 14:06:47 This chunk of code was the same between ROW and CO
Tom Sepez 2016/10/05 17:08:28 Can we have a helper method like void CBA_AnnotIt
dsinclair 2016/10/05 17:52:51 Done.
90 while (!sa.empty()) { 81 for (auto pAnnot : m_pPageView->GetAnnotList()) {
91 int nLeftTopIndex = -1; 82 if (pAnnot->GetAnnotSubtype() == m_nAnnotSubtype &&
92 FX_FLOAT fTop = 0.0f; 83 !pAnnot->IsSignatureWidget()) {
93 for (int i = sa.size() - 1; i >= 0; i--) { 84 sa.push_back(pAnnot);
94 CFX_FloatRect rcAnnot = GetAnnotRect(sa[i]); 85 }
95 if (rcAnnot.top > fTop) { 86 }
96 nLeftTopIndex = i; 87 if (sa.empty())
97 fTop = rcAnnot.top; 88 return;
98 }
99 }
100 if (nLeftTopIndex >= 0) {
101 CPDFSDK_Annot* pLeftTopAnnot = sa[nLeftTopIndex];
102 CFX_FloatRect rcLeftTop = GetAnnotRect(pLeftTopAnnot);
103 m_Annots.push_back(pLeftTopAnnot);
104 sa.erase(sa.begin() + nLeftTopIndex);
105 89
106 std::vector<int> aSelect; 90 if (m_eTabOrder == ROW) {
107 for (size_t i = 0; i < sa.size(); ++i) { 91 std::sort(sa.begin(), sa.end(), CompareByLeftAscending);
108 CFX_FloatRect rcAnnot = GetAnnotRect(sa[i]); 92 while (!sa.empty()) {
109 FX_FLOAT fCenterY = (rcAnnot.top + rcAnnot.bottom) / 2.0f; 93 int nLeftTopIndex = -1;
Tom Sepez 2016/10/05 17:08:28 Maybe code from 93-100 becomes a function GetLeftT
dsinclair 2016/10/05 17:52:51 The actual comparisons done at ~97 are different b
Tom Sepez 2016/10/05 17:59:52 Ah, ok. nevermind.
110 if (fCenterY > rcLeftTop.bottom && fCenterY < rcLeftTop.top) 94 FX_FLOAT fTop = 0.0f;
111 aSelect.push_back(i); 95 for (int i = sa.size() - 1; i >= 0; i--) {
112 } 96 CFX_FloatRect rcAnnot = GetAnnotRect(sa[i]);
113 for (size_t i = 0; i < aSelect.size(); ++i) 97 if (rcAnnot.top > fTop) {
114 m_Annots.push_back(sa[aSelect[i]]); 98 nLeftTopIndex = i;
115 99 fTop = rcAnnot.top;
116 for (int i = aSelect.size() - 1; i >= 0; --i)
117 sa.erase(sa.begin() + aSelect[i]);
118 } 100 }
119 } 101 }
120 break; 102 if (nLeftTopIndex >= 0) {
103 CPDFSDK_Annot* pLeftTopAnnot = sa[nLeftTopIndex];
104 CFX_FloatRect rcLeftTop = GetAnnotRect(pLeftTopAnnot);
105 m_Annots.push_back(pLeftTopAnnot);
106 sa.erase(sa.begin() + nLeftTopIndex);
107
108 std::vector<int> aSelect;
109 for (size_t i = 0; i < sa.size(); ++i) {
110 CFX_FloatRect rcAnnot = GetAnnotRect(sa[i]);
111 FX_FLOAT fCenterY = (rcAnnot.top + rcAnnot.bottom) / 2.0f;
112 if (fCenterY > rcLeftTop.bottom && fCenterY < rcLeftTop.top)
113 aSelect.push_back(i);
114 }
115 for (size_t i = 0; i < aSelect.size(); ++i)
116 m_Annots.push_back(sa[aSelect[i]]);
117
118 for (int i = aSelect.size() - 1; i >= 0; --i)
119 sa.erase(sa.begin() + aSelect[i]);
120 }
121 } 121 }
122 case COLUMN: { 122 return;
123 std::vector<CPDFSDK_Annot*> sa; 123 }
124 for (size_t i = 0; i < m_pPageView->CountAnnots(); ++i) { 124
125 CPDFSDK_Annot* pAnnot = m_pPageView->GetAnnot(i); 125 std::sort(sa.begin(), sa.end(), CompareByTopDescending);
126 if (pAnnot->GetAnnotSubtype() == m_nAnnotSubtype && 126 while (!sa.empty()) {
127 !pAnnot->IsSignatureWidget()) 127 int nLeftTopIndex = -1;
128 sa.push_back(pAnnot); 128 FX_FLOAT fLeft = -1.0f;
129 for (int i = sa.size() - 1; i >= 0; --i) {
130 CFX_FloatRect rcAnnot = GetAnnotRect(sa[i]);
131 if (fLeft < 0) {
132 nLeftTopIndex = 0;
133 fLeft = rcAnnot.left;
134 } else if (rcAnnot.left < fLeft) {
135 nLeftTopIndex = i;
136 fLeft = rcAnnot.left;
129 } 137 }
138 }
130 139
131 std::sort(sa.begin(), sa.end(), CompareByTopDescending); 140 if (nLeftTopIndex >= 0) {
132 while (!sa.empty()) { 141 CPDFSDK_Annot* pLeftTopAnnot = sa[nLeftTopIndex];
133 int nLeftTopIndex = -1; 142 CFX_FloatRect rcLeftTop = GetAnnotRect(pLeftTopAnnot);
134 FX_FLOAT fLeft = -1.0f; 143 m_Annots.push_back(pLeftTopAnnot);
135 for (int i = sa.size() - 1; i >= 0; --i) { 144 sa.erase(sa.begin() + nLeftTopIndex);
136 CFX_FloatRect rcAnnot = GetAnnotRect(sa[i]);
137 if (fLeft < 0) {
138 nLeftTopIndex = 0;
139 fLeft = rcAnnot.left;
140 } else if (rcAnnot.left < fLeft) {
141 nLeftTopIndex = i;
142 fLeft = rcAnnot.left;
143 }
144 }
145 145
146 if (nLeftTopIndex >= 0) { 146 std::vector<int> aSelect;
147 CPDFSDK_Annot* pLeftTopAnnot = sa[nLeftTopIndex]; 147 for (size_t i = 0; i < sa.size(); ++i) {
148 CFX_FloatRect rcLeftTop = GetAnnotRect(pLeftTopAnnot); 148 CFX_FloatRect rcAnnot = GetAnnotRect(sa[i]);
149 m_Annots.push_back(pLeftTopAnnot); 149 FX_FLOAT fCenterX = (rcAnnot.left + rcAnnot.right) / 2.0f;
150 sa.erase(sa.begin() + nLeftTopIndex); 150 if (fCenterX > rcLeftTop.left && fCenterX < rcLeftTop.right)
151 aSelect.push_back(i);
152 }
153 for (size_t i = 0; i < aSelect.size(); ++i)
154 m_Annots.push_back(sa[aSelect[i]]);
151 155
152 std::vector<int> aSelect; 156 for (int i = aSelect.size() - 1; i >= 0; --i)
153 for (size_t i = 0; i < sa.size(); ++i) { 157 sa.erase(sa.begin() + aSelect[i]);
154 CFX_FloatRect rcAnnot = GetAnnotRect(sa[i]);
155 FX_FLOAT fCenterX = (rcAnnot.left + rcAnnot.right) / 2.0f;
156 if (fCenterX > rcLeftTop.left && fCenterX < rcLeftTop.right)
157 aSelect.push_back(i);
158 }
159 for (size_t i = 0; i < aSelect.size(); ++i)
160 m_Annots.push_back(sa[aSelect[i]]);
161
162 for (int i = aSelect.size() - 1; i >= 0; --i)
163 sa.erase(sa.begin() + aSelect[i]);
164 }
165 }
166 break;
167 } 158 }
168 } 159 }
169 } 160 }
170 161
171 CFX_FloatRect CBA_AnnotIterator::GetAnnotRect(const CPDFSDK_Annot* pAnnot) { 162 CFX_FloatRect CBA_AnnotIterator::GetAnnotRect(const CPDFSDK_Annot* pAnnot) {
172 return pAnnot->GetPDFAnnot()->GetRect(); 163 return pAnnot->GetPDFAnnot()->GetRect();
173 } 164 }
OLDNEW
« no previous file with comments | « no previous file | fpdfsdk/cpdfsdk_document.h » ('j') | fpdfsdk/cpdfsdk_pageview.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698