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

Side by Side Diff: third_party/WebKit/Source/core/layout/svg/SVGResources.cpp

Issue 2708543003: Clean up the getLayoutSVGResource*ById helpers (Closed)
Patch Set: Created 3 years, 10 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 | « third_party/WebKit/Source/core/layout/svg/SVGLayoutTreeAsText.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) Research In Motion Limited 2010. All rights reserved. 2 * Copyright (C) Research In Motion Limited 2010. All rights reserved.
3 * 3 *
4 * This library is free software; you can redistribute it and/or 4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public 5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either 6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version. 7 * version 2 of the License, or (at your option) any later version.
8 * 8 *
9 * This library is distributed in the hope that it will be useful, 9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 TreeScope& treeScope, 140 TreeScope& treeScope,
141 const SVGPaintType& paintType, 141 const SVGPaintType& paintType,
142 const String& paintUri, 142 const String& paintUri,
143 AtomicString& id, 143 AtomicString& id,
144 bool& hasPendingResource) { 144 bool& hasPendingResource) {
145 if (!svgPaintTypeHasURL(paintType)) 145 if (!svgPaintTypeHasURL(paintType))
146 return nullptr; 146 return nullptr;
147 147
148 id = SVGURIReference::fragmentIdentifierFromIRIString(paintUri, treeScope); 148 id = SVGURIReference::fragmentIdentifierFromIRIString(paintUri, treeScope);
149 LayoutSVGResourceContainer* container = 149 LayoutSVGResourceContainer* container =
150 getLayoutSVGResourceContainerById(treeScope, id); 150 treeScope.ensureSVGTreeScopedResources().resourceById(id);
151 if (!container) { 151 if (!container) {
152 hasPendingResource = true; 152 hasPendingResource = true;
153 return nullptr; 153 return nullptr;
154 } 154 }
155 155
156 if (!container->isSVGPaintServer()) 156 if (!container->isSVGPaintServer())
157 return nullptr; 157 return nullptr;
158 158
159 return toLayoutSVGResourcePaintServer(container); 159 return toLayoutSVGResourcePaintServer(container);
160 } 160 }
161 161
162 static inline void registerPendingResource(
163 SVGTreeScopeResources& treeScopeResources,
164 const AtomicString& id,
165 SVGElement* element) {
166 DCHECK(element);
167 treeScopeResources.addPendingResource(id, element);
168 }
169
170 bool SVGResources::hasResourceData() const { 162 bool SVGResources::hasResourceData() const {
171 return m_clipperFilterMaskerData || m_markerData || m_fillStrokeData || 163 return m_clipperFilterMaskerData || m_markerData || m_fillStrokeData ||
172 m_linkedResource; 164 m_linkedResource;
173 } 165 }
174 166
175 static inline SVGResources& ensureResources( 167 static inline SVGResources& ensureResources(
176 std::unique_ptr<SVGResources>& resources) { 168 std::unique_ptr<SVGResources>& resources) {
177 if (!resources) 169 if (!resources)
178 resources = WTF::wrapUnique(new SVGResources); 170 resources = WTF::wrapUnique(new SVGResources);
179 171
(...skipping 24 matching lines...) Expand all
204 std::unique_ptr<SVGResources> resources; 196 std::unique_ptr<SVGResources> resources;
205 if (clipperFilterMaskerTags().contains(tagName)) { 197 if (clipperFilterMaskerTags().contains(tagName)) {
206 if (computedStyle.clipPath() && !object->isSVGRoot()) { 198 if (computedStyle.clipPath() && !object->isSVGRoot()) {
207 ClipPathOperation* clipPathOperation = computedStyle.clipPath(); 199 ClipPathOperation* clipPathOperation = computedStyle.clipPath();
208 if (clipPathOperation->type() == ClipPathOperation::REFERENCE) { 200 if (clipPathOperation->type() == ClipPathOperation::REFERENCE) {
209 const ReferenceClipPathOperation& clipPathReference = 201 const ReferenceClipPathOperation& clipPathReference =
210 toReferenceClipPathOperation(*clipPathOperation); 202 toReferenceClipPathOperation(*clipPathOperation);
211 AtomicString id = SVGURIReference::fragmentIdentifierFromIRIString( 203 AtomicString id = SVGURIReference::fragmentIdentifierFromIRIString(
212 clipPathReference.url(), treeScope); 204 clipPathReference.url(), treeScope);
213 if (!ensureResources(resources).setClipper( 205 if (!ensureResources(resources).setClipper(
214 getLayoutSVGResourceById<LayoutSVGResourceClipper>(treeScope, 206 getLayoutSVGResourceById<LayoutSVGResourceClipper>(
215 id))) 207 treeScopeResources, id)))
216 registerPendingResource(treeScopeResources, id, element); 208 treeScopeResources.addPendingResource(id, element);
217 } 209 }
218 } 210 }
219 211
220 if (computedStyle.hasFilter() && !object->isSVGRoot()) { 212 if (computedStyle.hasFilter() && !object->isSVGRoot()) {
221 const FilterOperations& filterOperations = computedStyle.filter(); 213 const FilterOperations& filterOperations = computedStyle.filter();
222 if (filterOperations.size() == 1) { 214 if (filterOperations.size() == 1) {
223 const FilterOperation& filterOperation = *filterOperations.at(0); 215 const FilterOperation& filterOperation = *filterOperations.at(0);
224 if (filterOperation.type() == FilterOperation::REFERENCE) { 216 if (filterOperation.type() == FilterOperation::REFERENCE) {
225 const auto& referenceFilterOperation = 217 const auto& referenceFilterOperation =
226 toReferenceFilterOperation(filterOperation); 218 toReferenceFilterOperation(filterOperation);
227 AtomicString id = SVGURIReference::fragmentIdentifierFromIRIString( 219 AtomicString id = SVGURIReference::fragmentIdentifierFromIRIString(
228 referenceFilterOperation.url(), treeScope); 220 referenceFilterOperation.url(), treeScope);
229 if (!ensureResources(resources).setFilter( 221 if (!ensureResources(resources).setFilter(
230 getLayoutSVGResourceById<LayoutSVGResourceFilter>(treeScope, 222 getLayoutSVGResourceById<LayoutSVGResourceFilter>(
231 id))) 223 treeScopeResources, id)))
232 registerPendingResource(treeScopeResources, id, element); 224 treeScopeResources.addPendingResource(id, element);
233 } 225 }
234 } 226 }
235 } 227 }
236 228
237 if (style.hasMasker()) { 229 if (style.hasMasker()) {
238 AtomicString id = style.maskerResource(); 230 AtomicString id = style.maskerResource();
239 if (!ensureResources(resources).setMasker( 231 if (!ensureResources(resources).setMasker(
240 getLayoutSVGResourceById<LayoutSVGResourceMasker>(treeScope, id))) 232 getLayoutSVGResourceById<LayoutSVGResourceMasker>(
241 registerPendingResource(treeScopeResources, id, element); 233 treeScopeResources, id)))
234 treeScopeResources.addPendingResource(id, element);
242 } 235 }
243 } 236 }
244 237
245 if (style.hasMarkers() && supportsMarkers(*element)) { 238 if (style.hasMarkers() && supportsMarkers(*element)) {
246 const AtomicString& markerStartId = style.markerStartResource(); 239 const AtomicString& markerStartId = style.markerStartResource();
247 if (!ensureResources(resources).setMarkerStart( 240 if (!ensureResources(resources).setMarkerStart(
248 getLayoutSVGResourceById<LayoutSVGResourceMarker>(treeScope, 241 getLayoutSVGResourceById<LayoutSVGResourceMarker>(
249 markerStartId))) 242 treeScopeResources, markerStartId)))
250 registerPendingResource(treeScopeResources, markerStartId, element); 243 treeScopeResources.addPendingResource(markerStartId, element);
251 244
252 const AtomicString& markerMidId = style.markerMidResource(); 245 const AtomicString& markerMidId = style.markerMidResource();
253 if (!ensureResources(resources).setMarkerMid( 246 if (!ensureResources(resources).setMarkerMid(
254 getLayoutSVGResourceById<LayoutSVGResourceMarker>(treeScope, 247 getLayoutSVGResourceById<LayoutSVGResourceMarker>(
255 markerMidId))) 248 treeScopeResources, markerMidId)))
256 registerPendingResource(treeScopeResources, markerMidId, element); 249 treeScopeResources.addPendingResource(markerMidId, element);
257 250
258 const AtomicString& markerEndId = style.markerEndResource(); 251 const AtomicString& markerEndId = style.markerEndResource();
259 if (!ensureResources(resources).setMarkerEnd( 252 if (!ensureResources(resources).setMarkerEnd(
260 getLayoutSVGResourceById<LayoutSVGResourceMarker>( 253 getLayoutSVGResourceById<LayoutSVGResourceMarker>(
261 treeScope, style.markerEndResource()))) 254 treeScopeResources, markerEndId)))
262 registerPendingResource(treeScopeResources, markerEndId, element); 255 treeScopeResources.addPendingResource(markerEndId, element);
263 } 256 }
264 257
265 if (fillAndStrokeTags().contains(tagName)) { 258 if (fillAndStrokeTags().contains(tagName)) {
266 if (style.hasFill()) { 259 if (style.hasFill()) {
267 bool hasPendingResource = false; 260 bool hasPendingResource = false;
268 AtomicString id; 261 AtomicString id;
269 LayoutSVGResourcePaintServer* resource = paintingResourceFromSVGPaint( 262 LayoutSVGResourcePaintServer* resource = paintingResourceFromSVGPaint(
270 treeScope, style.fillPaintType(), style.fillPaintUri(), id, 263 treeScope, style.fillPaintType(), style.fillPaintUri(), id,
271 hasPendingResource); 264 hasPendingResource);
272 if (!ensureResources(resources).setFill(resource) && hasPendingResource) 265 if (!ensureResources(resources).setFill(resource) && hasPendingResource)
273 registerPendingResource(treeScopeResources, id, element); 266 treeScopeResources.addPendingResource(id, element);
274 } 267 }
275 268
276 if (style.hasStroke()) { 269 if (style.hasStroke()) {
277 bool hasPendingResource = false; 270 bool hasPendingResource = false;
278 AtomicString id; 271 AtomicString id;
279 LayoutSVGResourcePaintServer* resource = paintingResourceFromSVGPaint( 272 LayoutSVGResourcePaintServer* resource = paintingResourceFromSVGPaint(
280 treeScope, style.strokePaintType(), style.strokePaintUri(), id, 273 treeScope, style.strokePaintType(), style.strokePaintUri(), id,
281 hasPendingResource); 274 hasPendingResource);
282 if (!ensureResources(resources).setStroke(resource) && hasPendingResource) 275 if (!ensureResources(resources).setStroke(resource) && hasPendingResource)
283 registerPendingResource(treeScopeResources, id, element); 276 treeScopeResources.addPendingResource(id, element);
284 } 277 }
285 } 278 }
286 279
287 if (chainableResourceTags().contains(tagName)) { 280 if (chainableResourceTags().contains(tagName)) {
288 AtomicString id = targetReferenceFromResource(*element); 281 AtomicString id = targetReferenceFromResource(*element);
289 if (!ensureResources(resources).setLinkedResource( 282 if (!ensureResources(resources).setLinkedResource(
290 getLayoutSVGResourceContainerById(treeScope, id))) 283 treeScopeResources.resourceById(id)))
291 registerPendingResource(treeScopeResources, id, element); 284 treeScopeResources.addPendingResource(id, element);
292 } 285 }
293 286
294 return (!resources || !resources->hasResourceData()) ? nullptr 287 return (!resources || !resources->hasResourceData()) ? nullptr
295 : std::move(resources); 288 : std::move(resources);
296 } 289 }
297 290
298 void SVGResources::layoutIfNeeded() { 291 void SVGResources::layoutIfNeeded() {
299 if (m_clipperFilterMaskerData) { 292 if (m_clipperFilterMaskerData) {
300 if (LayoutSVGResourceClipper* clipper = m_clipperFilterMaskerData->clipper) 293 if (LayoutSVGResourceClipper* clipper = m_clipperFilterMaskerData->clipper)
301 clipper->layoutIfNeeded(); 294 clipper->layoutIfNeeded();
(...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after
678 stroke->element()); 671 stroke->element());
679 } 672 }
680 673
681 if (m_linkedResource) 674 if (m_linkedResource)
682 fprintf(stderr, " |-> xlink:href : %p (node=%p)\n", m_linkedResource, 675 fprintf(stderr, " |-> xlink:href : %p (node=%p)\n", m_linkedResource,
683 m_linkedResource->element()); 676 m_linkedResource->element());
684 } 677 }
685 #endif 678 #endif
686 679
687 } // namespace blink 680 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/layout/svg/SVGLayoutTreeAsText.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698