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

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

Issue 2166833002: Move CSSRuleCollection class to its own file (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Created 4 years, 5 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
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 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 0x00100000, 0x01000000}; 98 0x00100000, 0x01000000};
99 for (; pSel; pSel = pSel->GetNextSelector()) { 99 for (; pSel; pSel = pSel->GetNextSelector()) {
100 FDE_CSSSELECTORTYPE eType = pSel->GetType(); 100 FDE_CSSSELECTORTYPE eType = pSel->GetType();
101 if (eType > FDE_CSSSELECTORTYPE_Descendant || 101 if (eType > FDE_CSSSELECTORTYPE_Descendant ||
102 pSel->GetNameHash() != FDE_CSSUNIVERSALHASH) { 102 pSel->GetNameHash() != FDE_CSSUNIVERSALHASH) {
103 dwPriority += s_Specific[eType]; 103 dwPriority += s_Specific[eType];
104 } 104 }
105 } 105 }
106 } 106 }
107 107
108 void CFDE_CSSRuleCollection::Clear() {
109 m_IDRules.RemoveAll();
110 m_TagRules.RemoveAll();
111 m_ClassRules.RemoveAll();
112 m_pUniversalRules = nullptr;
113 m_pStaticStore = nullptr;
114 m_iSelectors = 0;
115 }
116
117 CFDE_CSSRuleCollection::CFDE_CSSRuleCollection()
118 : m_pStaticStore(nullptr),
119 m_pUniversalRules(nullptr),
120 m_pPersudoRules(nullptr),
121 m_iSelectors(0) {}
122
123 CFDE_CSSRuleCollection::~CFDE_CSSRuleCollection() {
124 Clear();
125 }
126
127 void CFDE_CSSRuleCollection::AddRulesFrom(const CFDE_CSSStyleSheetArray& sheets,
128 uint32_t dwMediaList,
129 IFGAS_FontMgr* pFontMgr) {
130 int32_t iSheets = sheets.GetSize();
131 for (int32_t i = 0; i < iSheets; ++i) {
132 IFDE_CSSStyleSheet* pSheet = sheets.GetAt(i);
133 if (uint32_t dwMatchMedia = pSheet->GetMediaList() & dwMediaList) {
134 int32_t iRules = pSheet->CountRules();
135 for (int32_t j = 0; j < iRules; j++) {
136 AddRulesFrom(pSheet, pSheet->GetRule(j), dwMatchMedia, pFontMgr);
137 }
138 }
139 }
140 }
141
142 void CFDE_CSSRuleCollection::AddRulesFrom(IFDE_CSSStyleSheet* pStyleSheet,
143 IFDE_CSSRule* pRule,
144 uint32_t dwMediaList,
145 IFGAS_FontMgr* pFontMgr) {
146 switch (pRule->GetType()) {
147 case FDE_CSSRULETYPE_Style: {
148 IFDE_CSSStyleRule* pStyleRule = static_cast<IFDE_CSSStyleRule*>(pRule);
149 CFDE_CSSDeclaration* pDeclaration = pStyleRule->GetDeclaration();
150 int32_t iSelectors = pStyleRule->CountSelectorLists();
151 for (int32_t i = 0; i < iSelectors; ++i) {
152 CFDE_CSSSelector* pSelector = pStyleRule->GetSelectorList(i);
153 if (pSelector->GetType() == FDE_CSSSELECTORTYPE_Persudo) {
154 FDE_CSSRuleData* pData = NewRuleData(pSelector, pDeclaration);
155 AddRuleTo(m_pPersudoRules, pData);
156 continue;
157 }
158 if (pSelector->GetNameHash() != FDE_CSSUNIVERSALHASH) {
159 AddRuleTo(m_TagRules, pSelector->GetNameHash(), pSelector,
160 pDeclaration);
161 continue;
162 }
163 CFDE_CSSSelector* pNext = pSelector->GetNextSelector();
164 if (!pNext) {
165 FDE_CSSRuleData* pData = NewRuleData(pSelector, pDeclaration);
166 AddRuleTo(m_pUniversalRules, pData);
167 continue;
168 }
169 switch (pNext->GetType()) {
170 case FDE_CSSSELECTORTYPE_ID:
171 AddRuleTo(m_IDRules, pNext->GetNameHash(), pSelector, pDeclaration);
172 break;
173 case FDE_CSSSELECTORTYPE_Class:
174 AddRuleTo(m_ClassRules, pNext->GetNameHash(), pSelector,
175 pDeclaration);
176 break;
177 case FDE_CSSSELECTORTYPE_Descendant:
178 case FDE_CSSSELECTORTYPE_Element:
179 AddRuleTo(m_pUniversalRules, NewRuleData(pSelector, pDeclaration));
180 break;
181 default:
182 ASSERT(FALSE);
183 break;
184 }
185 }
186 } break;
187 case FDE_CSSRULETYPE_Media: {
188 IFDE_CSSMediaRule* pMediaRule = static_cast<IFDE_CSSMediaRule*>(pRule);
189 if (pMediaRule->GetMediaList() & dwMediaList) {
190 int32_t iRules = pMediaRule->CountRules();
191 for (int32_t i = 0; i < iRules; ++i) {
192 AddRulesFrom(pStyleSheet, pMediaRule->GetRule(i), dwMediaList,
193 pFontMgr);
194 }
195 }
196 } break;
197 default:
198 break;
199 }
200 }
201
202 void CFDE_CSSRuleCollection::AddRuleTo(CFX_MapPtrToPtr& map,
203 uint32_t dwKey,
204 CFDE_CSSSelector* pSel,
205 CFDE_CSSDeclaration* pDecl) {
206 void* pKey = (void*)(uintptr_t)dwKey;
207 FDE_CSSRuleData* pData = NewRuleData(pSel, pDecl);
208 FDE_CSSRuleData* pList = nullptr;
209 if (!map.Lookup(pKey, (void*&)pList)) {
210 map.SetAt(pKey, pData);
211 } else if (AddRuleTo(pList, pData)) {
212 map.SetAt(pKey, pList);
213 }
214 }
215
216 FX_BOOL CFDE_CSSRuleCollection::AddRuleTo(FDE_CSSRuleData*& pList,
217 FDE_CSSRuleData* pData) {
218 if (pList) {
219 pData->pNext = pList->pNext;
220 pList->pNext = pData;
221 return FALSE;
222 }
223
224 pList = pData;
225 return TRUE;
226 }
227
228 FDE_CSSRuleData* CFDE_CSSRuleCollection::NewRuleData(
229 CFDE_CSSSelector* pSel,
230 CFDE_CSSDeclaration* pDecl) {
231 return FXTARGET_NewWith(m_pStaticStore)
232 FDE_CSSRuleData(pSel, pDecl, ++m_iSelectors);
233 }
234
235 CFDE_CSSStyleSelector::CFDE_CSSStyleSelector() 108 CFDE_CSSStyleSelector::CFDE_CSSStyleSelector()
236 : m_pFontMgr(nullptr), 109 : m_pFontMgr(nullptr),
237 m_fDefFontSize(12.0f), 110 m_fDefFontSize(12.0f),
238 m_pRuleDataStore(nullptr), 111 m_pRuleDataStore(nullptr),
239 m_pInlineStyleStore(nullptr), 112 m_pInlineStyleStore(nullptr),
240 m_pFixedStyleStore(nullptr), 113 m_pFixedStyleStore(nullptr),
241 m_pAccelerator(nullptr) { 114 m_pAccelerator(nullptr) {
242 m_ePriorities[FDE_CSSSTYLESHEETPRIORITY_High] = FDE_CSSSTYLESHEETGROUP_Author; 115 m_ePriorities[FDE_CSSSTYLESHEETPRIORITY_High] = FDE_CSSSTYLESHEETGROUP_Author;
243 m_ePriorities[FDE_CSSSTYLESHEETPRIORITY_Mid] = FDE_CSSSTYLESHEETGROUP_User; 116 m_ePriorities[FDE_CSSSTYLESHEETPRIORITY_Mid] = FDE_CSSSTYLESHEETGROUP_User;
244 m_ePriorities[FDE_CSSSTYLESHEETPRIORITY_Low] = 117 m_ePriorities[FDE_CSSSTYLESHEETPRIORITY_Low] =
(...skipping 1781 matching lines...) Expand 10 before | Expand all | Expand 10 after
2026 m_MaxBoxSize.Set(FDE_CSSLENGTHUNIT_None); 1899 m_MaxBoxSize.Set(FDE_CSSLENGTHUNIT_None);
2027 m_eDisplay = FDE_CSSDISPLAY_Inline; 1900 m_eDisplay = FDE_CSSDISPLAY_Inline;
2028 m_fVerticalAlign = 0.0f; 1901 m_fVerticalAlign = 0.0f;
2029 m_ColumnCount.Set(FDE_CSSLENGTHUNIT_Auto); 1902 m_ColumnCount.Set(FDE_CSSLENGTHUNIT_Auto);
2030 m_ColumnGap.Set(FDE_CSSLENGTHUNIT_Normal); 1903 m_ColumnGap.Set(FDE_CSSLENGTHUNIT_Normal);
2031 m_bColumnRuleColorSame = TRUE; 1904 m_bColumnRuleColorSame = TRUE;
2032 m_ColumnWidth.Set(FDE_CSSLENGTHUNIT_Auto); 1905 m_ColumnWidth.Set(FDE_CSSLENGTHUNIT_Auto);
2033 m_ColumnRuleWidth.Set(FDE_CSSLENGTHUNIT_Auto); 1906 m_ColumnRuleWidth.Set(FDE_CSSLENGTHUNIT_Auto);
2034 m_eTextCombine = FDE_CSSTEXTCOMBINE_None; 1907 m_eTextCombine = FDE_CSSTEXTCOMBINE_None;
2035 } 1908 }
OLDNEW
« xfa/fde/css/fde_cssrulecollection.cpp ('K') | « xfa/fde/css/fde_cssrulecollection.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698