Changeset 163283 in webkit
- Timestamp:
- Feb 2, 2014 8:50:00 PM (10 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r163282 r163283 1 2014-02-02 Andreas Kling <akling@apple.com> 2 3 Modernize the toRenderSVGResourceContainer() helper. 4 <https://webkit.org/b/128091> 5 6 Make toRenderSVGResourceContainer() a free function like all the 7 other casting helpers. Use references instead of pointers where 8 applicable. 9 10 Reviewed by Anders Carlsson. 11 12 * rendering/RenderLayerFilterInfo.cpp: 13 (WebCore::RenderLayer::FilterInfo::updateReferenceFilterClients): 14 (WebCore::RenderLayer::FilterInfo::removeReferenceFilterClients): 15 * rendering/RenderObject.cpp: 16 * rendering/RenderObject.h: 17 * rendering/svg/RenderSVGGradientStop.cpp: 18 (WebCore::RenderSVGGradientStop::styleDidChange): 19 * rendering/svg/RenderSVGResource.cpp: 20 (WebCore::RenderSVGResource::markForLayoutAndParentResourceInvalidation): 21 * rendering/svg/RenderSVGResourceContainer.cpp: 22 (WebCore::RenderSVGResourceContainer::markAllClientsForInvalidation): 23 * rendering/svg/RenderSVGResourceContainer.h: 24 * rendering/svg/RenderSVGResourceFilter.cpp: 25 (WebCore::RenderSVGResourceFilter::buildPrimitives): 26 * rendering/svg/RenderSVGResourceFilter.h: 27 * rendering/svg/SVGRenderTreeAsText.cpp: 28 (WebCore::writeSVGResourceContainer): 29 * rendering/svg/SVGResourcesCycleSolver.cpp: 30 (WebCore::SVGResourcesCycleSolver::resolveCycles): 31 * svg/SVGElement.cpp: 32 (WebCore::SVGElement::svgAttributeChanged): 33 1 34 2014-02-02 Andreas Kling <akling@apple.com> 2 35 -
trunk/Source/WebCore/rendering/RenderLayerFilterInfo.cpp
r162644 r163283 123 123 if (!filter || !filter->renderer() || !filter->renderer()->isSVGResourceFilter()) 124 124 continue; 125 filter->renderer()->toRenderSVGResourceContainer()->addClientRenderLayer(&m_layer);125 toRenderSVGResourceContainer(*filter->renderer()).addClientRenderLayer(&m_layer); 126 126 m_internalSVGReferences.append(filter); 127 127 } … … 138 138 if (!filter->renderer()) 139 139 continue; 140 filter->renderer()->toRenderSVGResourceContainer()->removeClientRenderLayer(&m_layer);140 toRenderSVGResourceContainer(*filter->renderer()).removeClientRenderLayer(&m_layer); 141 141 } 142 142 m_internalSVGReferences.clear(); -
trunk/Source/WebCore/rendering/RenderObject.cpp
r163272 r163283 2415 2415 #if ENABLE(SVG) 2416 2416 2417 RenderSVGResourceContainer* RenderObject::toRenderSVGResourceContainer()2418 {2419 ASSERT_NOT_REACHED();2420 return 0;2421 }2422 2423 2417 void RenderObject::setNeedsBoundariesUpdate() 2424 2418 { -
trunk/Source/WebCore/rendering/RenderObject.h
r163262 r163283 441 441 virtual bool isSVGResourceFilter() const { return false; } 442 442 virtual bool isSVGResourceFilterPrimitive() const { return false; } 443 444 virtual RenderSVGResourceContainer* toRenderSVGResourceContainer();445 443 446 444 // FIXME: Those belong into a SVG specific base-class for all renderers (see above) -
trunk/Source/WebCore/rendering/svg/RenderSVGGradientStop.cpp
r158097 r163283 59 59 return; 60 60 61 ASSERT(renderer->isSVGResourceContainer()); 62 RenderSVGResourceContainer* container = renderer->toRenderSVGResourceContainer(); 63 container->removeAllClientsFromCache(); 61 toRenderSVGResourceContainer(*renderer).removeAllClientsFromCache(); 64 62 } 65 63 -
trunk/Source/WebCore/rendering/svg/RenderSVGResource.cpp
r162907 r163283 198 198 if (current->isSVGResourceContainer()) { 199 199 // This will process the rest of the ancestors. 200 current->toRenderSVGResourceContainer()->removeAllClientsFromCache();200 toRenderSVGResourceContainer(*current).removeAllClientsFromCache(); 201 201 break; 202 202 } -
trunk/Source/WebCore/rendering/svg/RenderSVGResourceContainer.cpp
r163279 r163283 101 101 for (auto client : m_clients) { 102 102 if (client->isSVGResourceContainer()) { 103 client->toRenderSVGResourceContainer()->removeAllClientsFromCache(markForInvalidation);103 toRenderSVGResourceContainer(*client).removeAllClientsFromCache(markForInvalidation); 104 104 continue; 105 105 } -
trunk/Source/WebCore/rendering/svg/RenderSVGResourceContainer.h
r163279 r163283 38 38 39 39 virtual bool isSVGResourceContainer() const override final { return true; } 40 virtual RenderSVGResourceContainer* toRenderSVGResourceContainer() override final { return this; }41 40 42 41 static bool shouldTransformOnTextPainting(RenderObject*, AffineTransform&); … … 78 77 }; 79 78 79 RENDER_OBJECT_TYPE_CASTS(RenderSVGResourceContainer, isSVGResourceContainer()) 80 80 81 inline RenderSVGResourceContainer* getRenderSVGResourceContainerById(Document& document, const AtomicString& id) 81 82 { -
trunk/Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp
r163276 r163283 77 77 } 78 78 79 std::unique_ptr<SVGFilterBuilder> RenderSVGResourceFilter::buildPrimitives(SVGFilter* filter) 79 std::unique_ptr<SVGFilterBuilder> RenderSVGResourceFilter::buildPrimitives(SVGFilter* filter) const 80 80 { 81 81 FloatRect targetBoundingBox = filter->targetBoundingBox(); -
trunk/Source/WebCore/rendering/svg/RenderSVGResourceFilter.h
r162198 r163283 77 77 virtual FloatRect resourceBoundingBox(const RenderObject&) override; 78 78 79 std::unique_ptr<SVGFilterBuilder> buildPrimitives(SVGFilter*) ;79 std::unique_ptr<SVGFilterBuilder> buildPrimitives(SVGFilter*) const; 80 80 81 81 SVGUnitTypes::SVGUnitType filterUnits() const { return filterElement().filterUnits(); } -
trunk/Source/WebCore/rendering/svg/SVGRenderTreeAsText.cpp
r161418 r163283 477 477 writeNameAndQuotedValue(ts, "id", id); 478 478 479 RenderSVGResourceContainer* resource = const_cast<RenderObject&>(object).toRenderSVGResourceContainer(); 480 ASSERT(resource); 481 482 if (resource->resourceType() == MaskerResourceType) { 483 RenderSVGResourceMasker* masker = static_cast<RenderSVGResourceMasker*>(resource); 484 writeNameValuePair(ts, "maskUnits", masker->maskUnits()); 485 writeNameValuePair(ts, "maskContentUnits", masker->maskContentUnits()); 479 const auto& resource = toRenderSVGResourceContainer(object); 480 481 if (resource.resourceType() == MaskerResourceType) { 482 const auto& masker = static_cast<const RenderSVGResourceMasker&>(resource); 483 writeNameValuePair(ts, "maskUnits", masker.maskUnits()); 484 writeNameValuePair(ts, "maskContentUnits", masker.maskContentUnits()); 486 485 ts << "\n"; 487 486 #if ENABLE(FILTERS) 488 } else if (resource ->resourceType() == FilterResourceType) {489 RenderSVGResourceFilter* filter = static_cast<RenderSVGResourceFilter*>(resource);490 writeNameValuePair(ts, "filterUnits", filter ->filterUnits());491 writeNameValuePair(ts, "primitiveUnits", filter ->primitiveUnits());487 } else if (resource.resourceType() == FilterResourceType) { 488 const auto& filter = static_cast<const RenderSVGResourceFilter&>(resource); 489 writeNameValuePair(ts, "filterUnits", filter.filterUnits()); 490 writeNameValuePair(ts, "primitiveUnits", filter.primitiveUnits()); 492 491 ts << "\n"; 493 492 // Creating a placeholder filter which is passed to the builder. 494 493 FloatRect dummyRect; 495 494 RefPtr<SVGFilter> dummyFilter = SVGFilter::create(AffineTransform(), dummyRect, dummyRect, dummyRect, true); 496 if (auto builder = filter ->buildPrimitives(dummyFilter.get())) {495 if (auto builder = filter.buildPrimitives(dummyFilter.get())) { 497 496 if (FilterEffect* lastEffect = builder->lastEffect()) 498 497 lastEffect->externalRepresentation(ts, indent + 1); 499 498 } 500 499 #endif 501 } else if (resource ->resourceType() == ClipperResourceType) {502 RenderSVGResourceClipper* clipper = static_cast<RenderSVGResourceClipper*>(resource);503 writeNameValuePair(ts, "clipPathUnits", clipper ->clipPathUnits());500 } else if (resource.resourceType() == ClipperResourceType) { 501 const auto& clipper = static_cast<const RenderSVGResourceClipper&>(resource); 502 writeNameValuePair(ts, "clipPathUnits", clipper.clipPathUnits()); 504 503 ts << "\n"; 505 } else if (resource ->resourceType() == MarkerResourceType) {506 RenderSVGResourceMarker* marker = static_cast<RenderSVGResourceMarker*>(resource);507 writeNameValuePair(ts, "markerUnits", marker ->markerUnits());508 ts << " [ref at " << marker ->referencePoint() << "]";504 } else if (resource.resourceType() == MarkerResourceType) { 505 const auto& marker = static_cast<const RenderSVGResourceMarker&>(resource); 506 writeNameValuePair(ts, "markerUnits", marker.markerUnits()); 507 ts << " [ref at " << marker.referencePoint() << "]"; 509 508 ts << " [angle="; 510 if (marker ->angle() == -1)509 if (marker.angle() == -1) 511 510 ts << "auto" << "]\n"; 512 511 else 513 ts << marker ->angle() << "]\n";514 } else if (resource ->resourceType() == PatternResourceType) {515 RenderSVGResourcePattern* pattern = static_cast<RenderSVGResourcePattern*>(resource);512 ts << marker.angle() << "]\n"; 513 } else if (resource.resourceType() == PatternResourceType) { 514 const auto& pattern = static_cast<const RenderSVGResourcePattern&>(resource); 516 515 517 516 // Dump final results that are used for rendering. No use in asking SVGPatternElement for its patternUnits(), as it may 518 517 // link to other patterns using xlink:href, we need to build the full inheritance chain, aka. collectPatternProperties() 519 518 PatternAttributes attributes; 520 pattern ->patternElement().collectPatternAttributes(attributes);519 pattern.patternElement().collectPatternAttributes(attributes); 521 520 522 521 writeNameValuePair(ts, "patternUnits", attributes.patternUnits()); … … 527 526 ts << " [patternTransform=" << transform << "]"; 528 527 ts << "\n"; 529 } else if (resource ->resourceType() == LinearGradientResourceType) {530 RenderSVGResourceLinearGradient* gradient = static_cast<RenderSVGResourceLinearGradient*>(resource);528 } else if (resource.resourceType() == LinearGradientResourceType) { 529 const auto& gradient = static_cast<const RenderSVGResourceLinearGradient&>(resource); 531 530 532 531 // Dump final results that are used for rendering. No use in asking SVGGradientElement for its gradientUnits(), as it may 533 532 // link to other gradients using xlink:href, we need to build the full inheritance chain, aka. collectGradientProperties() 534 533 LinearGradientAttributes attributes; 535 gradient ->linearGradientElement().collectGradientAttributes(attributes);534 gradient.linearGradientElement().collectGradientAttributes(attributes); 536 535 writeCommonGradientProperties(ts, attributes.spreadMethod(), attributes.gradientTransform(), attributes.gradientUnits()); 537 536 538 ts << " [start=" << gradient ->startPoint(attributes) << "] [end=" << gradient->endPoint(attributes) << "]\n";539 } else if (resource ->resourceType() == RadialGradientResourceType) {540 RenderSVGResourceRadialGradient* gradient = static_cast<RenderSVGResourceRadialGradient*>(resource);537 ts << " [start=" << gradient.startPoint(attributes) << "] [end=" << gradient.endPoint(attributes) << "]\n"; 538 } else if (resource.resourceType() == RadialGradientResourceType) { 539 const auto& gradient = static_cast<const RenderSVGResourceRadialGradient&>(resource); 541 540 542 541 // Dump final results that are used for rendering. No use in asking SVGGradientElement for its gradientUnits(), as it may 543 542 // link to other gradients using xlink:href, we need to build the full inheritance chain, aka. collectGradientProperties() 544 543 RadialGradientAttributes attributes; 545 gradient ->radialGradientElement().collectGradientAttributes(attributes);544 gradient.radialGradientElement().collectGradientAttributes(attributes); 546 545 writeCommonGradientProperties(ts, attributes.spreadMethod(), attributes.gradientTransform(), attributes.gradientUnits()); 547 546 548 FloatPoint focalPoint = gradient ->focalPoint(attributes);549 FloatPoint centerPoint = gradient ->centerPoint(attributes);550 float radius = gradient ->radius(attributes);551 float focalRadius = gradient ->focalRadius(attributes);547 FloatPoint focalPoint = gradient.focalPoint(attributes); 548 FloatPoint centerPoint = gradient.centerPoint(attributes); 549 float radius = gradient.radius(attributes); 550 float focalRadius = gradient.focalRadius(attributes); 552 551 553 552 ts << " [center=" << centerPoint << "] [focal=" << focalPoint << "] [radius=" << radius << "] [focalRadius=" << focalRadius << "]\n"; -
trunk/Source/WebCore/rendering/svg/SVGResourcesCycleSolver.cpp
r161418 r163283 109 109 while (parent) { 110 110 if (parent->isSVGResourceContainer()) 111 parentResources.add( parent->toRenderSVGResourceContainer());111 parentResources.add(toRenderSVGResourceContainer(parent)); 112 112 parent = parent->parent(); 113 113 } … … 133 133 // If we're a resource, add ourselves to the HashSet. 134 134 if (m_renderer.isSVGResourceContainer()) 135 m_allResources.add( m_renderer.toRenderSVGResourceContainer());135 m_allResources.add(&toRenderSVGResourceContainer(m_renderer)); 136 136 137 137 ASSERT(!m_allResources.isEmpty()); -
trunk/Source/WebCore/svg/SVGElement.cpp
r162274 r163283 1011 1011 1012 1012 if (isIdAttributeName(attrName)) { 1013 RenderObject* object =renderer();1013 auto renderer = this->renderer(); 1014 1014 // Notify resources about id changes, this is important as we cache resources by id in SVGDocumentExtensions 1015 if ( object && object->isSVGResourceContainer())1016 object->toRenderSVGResourceContainer()->idChanged();1015 if (renderer && renderer->isSVGResourceContainer()) 1016 toRenderSVGResourceContainer(*renderer).idChanged(); 1017 1017 if (inDocument()) 1018 1018 buildPendingResourcesIfNeeded();
Note: See TracChangeset
for help on using the changeset viewer.