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

Side by Side Diff: xfa/fde/css/fde_cssstyleselector.cpp

Issue 2616813002: Remove CFX_MapPtrToPtr from xfa/fde. (Closed)
Patch Set: no FDE_LPC* Created 3 years, 11 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 | « xfa/fde/css/fde_cssstyleselector.h ('k') | xfa/fde/css/fde_cssstylesheet.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "xfa/fde/css/fde_cssstyleselector.h" 7 #include "xfa/fde/css/fde_cssstyleselector.h"
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <memory> 10 #include <memory>
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 void CFDE_CSSStyleSelector::Reset() { 191 void CFDE_CSSStyleSelector::Reset() {
192 for (int32_t iGroup = 0; iGroup < FDE_CSSSTYLESHEETGROUP_MAX; ++iGroup) { 192 for (int32_t iGroup = 0; iGroup < FDE_CSSSTYLESHEETGROUP_MAX; ++iGroup) {
193 m_RuleCollection[iGroup].Clear(); 193 m_RuleCollection[iGroup].Clear();
194 } 194 }
195 m_pRuleDataStore.reset(); 195 m_pRuleDataStore.reset();
196 } 196 }
197 197
198 int32_t CFDE_CSSStyleSelector::MatchDeclarations( 198 int32_t CFDE_CSSStyleSelector::MatchDeclarations(
199 CXFA_CSSTagProvider* pTag, 199 CXFA_CSSTagProvider* pTag,
200 CFDE_CSSDeclarationArray& matchedDecls, 200 CFDE_CSSDeclarationArray& matchedDecls,
201 FDE_CSSPERSUDO ePersudoType) { 201 FDE_CSSPSEUDO ePseudoType) {
202 ASSERT(m_pAccelerator && pTag); 202 ASSERT(pTag);
203
204 FDE_CSSTagCache* pCache = m_pAccelerator->GetTopElement(); 203 FDE_CSSTagCache* pCache = m_pAccelerator->GetTopElement();
205 ASSERT(pCache && pCache->GetTag() == pTag); 204 ASSERT(pCache && pCache->GetTag() == pTag);
206 205
207 matchedDecls.RemoveAt(0, matchedDecls.GetSize()); 206 matchedDecls.RemoveAt(0, matchedDecls.GetSize());
208 for (int32_t ePriority = FDE_CSSSTYLESHEETPRIORITY_MAX - 1; ePriority >= 0; 207 for (int32_t ePriority = FDE_CSSSTYLESHEETPRIORITY_MAX - 1; ePriority >= 0;
209 --ePriority) { 208 --ePriority) {
210 FDE_CSSSTYLESHEETGROUP eGroup = m_ePriorities[ePriority]; 209 FDE_CSSSTYLESHEETGROUP eGroup = m_ePriorities[ePriority];
211 CFDE_CSSRuleCollection& rules = m_RuleCollection[eGroup]; 210 CFDE_CSSRuleCollection& rules = m_RuleCollection[eGroup];
212 if (rules.CountSelectors() == 0) 211 if (rules.CountSelectors() == 0)
213 continue; 212 continue;
214 213
215 if (ePersudoType == FDE_CSSPERSUDO_NONE) { 214 if (ePseudoType == FDE_CSSPSEUDO_NONE) {
216 MatchRules(pCache, rules.GetUniversalRuleData(), ePersudoType); 215 MatchRules(pCache, rules.GetUniversalRuleData(), ePseudoType);
217 if (pCache->HashTag()) { 216 if (pCache->HashTag()) {
218 MatchRules(pCache, rules.GetTagRuleData(pCache->HashTag()), 217 MatchRules(pCache, rules.GetTagRuleData(pCache->HashTag()),
219 ePersudoType); 218 ePseudoType);
220 } 219 }
221 int32_t iCount = pCache->CountHashClass(); 220 int32_t iCount = pCache->CountHashClass();
222 for (int32_t i = 0; i < iCount; i++) { 221 for (int32_t i = 0; i < iCount; i++) {
223 pCache->SetClassIndex(i); 222 pCache->SetClassIndex(i);
224 MatchRules(pCache, rules.GetClassRuleData(pCache->HashClass()), 223 MatchRules(pCache, rules.GetClassRuleData(pCache->HashClass()),
225 ePersudoType); 224 ePseudoType);
226 } 225 }
227 } else { 226 } else {
228 MatchRules(pCache, rules.GetPersudoRuleData(), ePersudoType); 227 MatchRules(pCache, rules.GetPseudoRuleData(), ePseudoType);
229 } 228 }
230 229
231 std::sort(m_MatchedRules.begin(), m_MatchedRules.end(), 230 std::sort(m_MatchedRules.begin(), m_MatchedRules.end(),
232 [](const FDE_CSSRuleData* p1, const FDE_CSSRuleData* p2) { 231 [](const FDE_CSSRuleData* p1, const FDE_CSSRuleData* p2) {
233 return p1->dwPriority < p2->dwPriority; 232 return p1->dwPriority < p2->dwPriority;
234 }); 233 });
235 for (const auto& rule : m_MatchedRules) 234 for (const auto& rule : m_MatchedRules)
236 matchedDecls.Add(rule->pDeclaration); 235 matchedDecls.Add(rule->pDeclaration);
237 m_MatchedRules.clear(); 236 m_MatchedRules.clear();
238 } 237 }
239 return matchedDecls.GetSize(); 238 return matchedDecls.GetSize();
240 } 239 }
241 240
242 void CFDE_CSSStyleSelector::MatchRules(FDE_CSSTagCache* pCache, 241 void CFDE_CSSStyleSelector::MatchRules(FDE_CSSTagCache* pCache,
243 FDE_CSSRuleData* pList, 242 FDE_CSSRuleData* pList,
244 FDE_CSSPERSUDO ePersudoType) { 243 FDE_CSSPSEUDO ePseudoType) {
245 while (pList) { 244 while (pList) {
246 if (MatchSelector(pCache, pList->pSelector, ePersudoType)) 245 if (MatchSelector(pCache, pList->pSelector, ePseudoType))
247 m_MatchedRules.push_back(pList); 246 m_MatchedRules.push_back(pList);
248 pList = pList->pNext; 247 pList = pList->pNext;
249 } 248 }
250 } 249 }
251 250
252 bool CFDE_CSSStyleSelector::MatchSelector(FDE_CSSTagCache* pCache, 251 bool CFDE_CSSStyleSelector::MatchSelector(FDE_CSSTagCache* pCache,
253 CFDE_CSSSelector* pSel, 252 CFDE_CSSSelector* pSel,
254 FDE_CSSPERSUDO ePersudoType) { 253 FDE_CSSPSEUDO ePseudoType) {
255 uint32_t dwHash; 254 uint32_t dwHash;
256 while (pSel && pCache) { 255 while (pSel && pCache) {
257 switch (pSel->GetType()) { 256 switch (pSel->GetType()) {
258 case FDE_CSSSELECTORTYPE_Descendant: 257 case FDE_CSSSELECTORTYPE_Descendant:
259 dwHash = pSel->GetNameHash(); 258 dwHash = pSel->GetNameHash();
260 while ((pCache = pCache->GetParent()) != nullptr) { 259 while ((pCache = pCache->GetParent()) != nullptr) {
261 if (dwHash != FDE_CSSUNIVERSALHASH && dwHash != pCache->HashTag()) { 260 if (dwHash != FDE_CSSUNIVERSALHASH && dwHash != pCache->HashTag()) {
262 continue; 261 continue;
263 } 262 }
264 if (MatchSelector(pCache, pSel->GetNextSelector(), ePersudoType)) { 263 if (MatchSelector(pCache, pSel->GetNextSelector(), ePseudoType)) {
265 return true; 264 return true;
266 } 265 }
267 } 266 }
268 return false; 267 return false;
269 case FDE_CSSSELECTORTYPE_ID: 268 case FDE_CSSSELECTORTYPE_ID:
270 dwHash = pCache->HashID(); 269 dwHash = pCache->HashID();
271 if (dwHash != pSel->GetNameHash()) { 270 if (dwHash != pSel->GetNameHash()) {
272 return false; 271 return false;
273 } 272 }
274 break; 273 break;
275 case FDE_CSSSELECTORTYPE_Class: 274 case FDE_CSSSELECTORTYPE_Class:
276 dwHash = pCache->HashClass(); 275 dwHash = pCache->HashClass();
277 if (dwHash != pSel->GetNameHash()) { 276 if (dwHash != pSel->GetNameHash()) {
278 return false; 277 return false;
279 } 278 }
280 break; 279 break;
281 case FDE_CSSSELECTORTYPE_Element: 280 case FDE_CSSSELECTORTYPE_Element:
282 dwHash = pSel->GetNameHash(); 281 dwHash = pSel->GetNameHash();
283 if (dwHash != FDE_CSSUNIVERSALHASH && dwHash != pCache->HashTag()) { 282 if (dwHash != FDE_CSSUNIVERSALHASH && dwHash != pCache->HashTag()) {
284 return false; 283 return false;
285 } 284 }
286 break; 285 break;
287 case FDE_CSSSELECTORTYPE_Persudo: 286 case FDE_CSSSELECTORTYPE_Pseudo:
288 dwHash = FDE_GetCSSPersudoByEnum(ePersudoType)->dwHash; 287 dwHash = FDE_GetCSSPseudoByEnum(ePseudoType)->dwHash;
289 if (dwHash != pSel->GetNameHash()) { 288 if (dwHash != pSel->GetNameHash()) {
290 return false; 289 return false;
291 } 290 }
292 break; 291 break;
293 default: 292 default:
294 ASSERT(false); 293 ASSERT(false);
295 break; 294 break;
296 } 295 }
297 pSel = pSel->GetNextSelector(); 296 pSel = pSel->GetNextSelector();
298 } 297 }
(...skipping 1634 matching lines...) Expand 10 before | Expand all | Expand 10 after
1933 m_MaxBoxSize.Set(FDE_CSSLENGTHUNIT_None); 1932 m_MaxBoxSize.Set(FDE_CSSLENGTHUNIT_None);
1934 m_eDisplay = FDE_CSSDISPLAY_Inline; 1933 m_eDisplay = FDE_CSSDISPLAY_Inline;
1935 m_fVerticalAlign = 0.0f; 1934 m_fVerticalAlign = 0.0f;
1936 m_ColumnCount.Set(FDE_CSSLENGTHUNIT_Auto); 1935 m_ColumnCount.Set(FDE_CSSLENGTHUNIT_Auto);
1937 m_ColumnGap.Set(FDE_CSSLENGTHUNIT_Normal); 1936 m_ColumnGap.Set(FDE_CSSLENGTHUNIT_Normal);
1938 m_bColumnRuleColorSame = true; 1937 m_bColumnRuleColorSame = true;
1939 m_ColumnWidth.Set(FDE_CSSLENGTHUNIT_Auto); 1938 m_ColumnWidth.Set(FDE_CSSLENGTHUNIT_Auto);
1940 m_ColumnRuleWidth.Set(FDE_CSSLENGTHUNIT_Auto); 1939 m_ColumnRuleWidth.Set(FDE_CSSLENGTHUNIT_Auto);
1941 m_eTextCombine = FDE_CSSTEXTCOMBINE_None; 1940 m_eTextCombine = FDE_CSSTEXTCOMBINE_None;
1942 } 1941 }
OLDNEW
« no previous file with comments | « xfa/fde/css/fde_cssstyleselector.h ('k') | xfa/fde/css/fde_cssstylesheet.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698