Changeset 163283 in webkit


Ignore:
Timestamp:
Feb 2, 2014 8:50:00 PM (10 years ago)
Author:
akling@apple.com
Message:

Modernize the toRenderSVGResourceContainer() helper.
<https://webkit.org/b/128091>

Make toRenderSVGResourceContainer() a free function like all the
other casting helpers. Use references instead of pointers where
applicable.

Reviewed by Anders Carlsson.

  • rendering/RenderLayerFilterInfo.cpp:

(WebCore::RenderLayer::FilterInfo::updateReferenceFilterClients):
(WebCore::RenderLayer::FilterInfo::removeReferenceFilterClients):

  • rendering/RenderObject.cpp:
  • rendering/RenderObject.h:
  • rendering/svg/RenderSVGGradientStop.cpp:

(WebCore::RenderSVGGradientStop::styleDidChange):

  • rendering/svg/RenderSVGResource.cpp:

(WebCore::RenderSVGResource::markForLayoutAndParentResourceInvalidation):

  • rendering/svg/RenderSVGResourceContainer.cpp:

(WebCore::RenderSVGResourceContainer::markAllClientsForInvalidation):

  • rendering/svg/RenderSVGResourceContainer.h:
  • rendering/svg/RenderSVGResourceFilter.cpp:

(WebCore::RenderSVGResourceFilter::buildPrimitives):

  • rendering/svg/RenderSVGResourceFilter.h:
  • rendering/svg/SVGRenderTreeAsText.cpp:

(WebCore::writeSVGResourceContainer):

  • rendering/svg/SVGResourcesCycleSolver.cpp:

(WebCore::SVGResourcesCycleSolver::resolveCycles):

  • svg/SVGElement.cpp:

(WebCore::SVGElement::svgAttributeChanged):

Location:
trunk/Source/WebCore
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r163282 r163283  
     12014-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
    1342014-02-02  Andreas Kling  <akling@apple.com>
    235
  • trunk/Source/WebCore/rendering/RenderLayerFilterInfo.cpp

    r162644 r163283  
    123123            if (!filter || !filter->renderer() || !filter->renderer()->isSVGResourceFilter())
    124124                continue;
    125             filter->renderer()->toRenderSVGResourceContainer()->addClientRenderLayer(&m_layer);
     125            toRenderSVGResourceContainer(*filter->renderer()).addClientRenderLayer(&m_layer);
    126126            m_internalSVGReferences.append(filter);
    127127        }
     
    138138        if (!filter->renderer())
    139139            continue;
    140         filter->renderer()->toRenderSVGResourceContainer()->removeClientRenderLayer(&m_layer);
     140        toRenderSVGResourceContainer(*filter->renderer()).removeClientRenderLayer(&m_layer);
    141141    }
    142142    m_internalSVGReferences.clear();
  • trunk/Source/WebCore/rendering/RenderObject.cpp

    r163272 r163283  
    24152415#if ENABLE(SVG)
    24162416
    2417 RenderSVGResourceContainer* RenderObject::toRenderSVGResourceContainer()
    2418 {
    2419     ASSERT_NOT_REACHED();
    2420     return 0;
    2421 }
    2422 
    24232417void RenderObject::setNeedsBoundariesUpdate()
    24242418{
  • trunk/Source/WebCore/rendering/RenderObject.h

    r163262 r163283  
    441441    virtual bool isSVGResourceFilter() const { return false; }
    442442    virtual bool isSVGResourceFilterPrimitive() const { return false; }
    443 
    444     virtual RenderSVGResourceContainer* toRenderSVGResourceContainer();
    445443
    446444    // FIXME: Those belong into a SVG specific base-class for all renderers (see above)
  • trunk/Source/WebCore/rendering/svg/RenderSVGGradientStop.cpp

    r158097 r163283  
    5959        return;
    6060
    61     ASSERT(renderer->isSVGResourceContainer());
    62     RenderSVGResourceContainer* container = renderer->toRenderSVGResourceContainer();
    63     container->removeAllClientsFromCache();
     61    toRenderSVGResourceContainer(*renderer).removeAllClientsFromCache();
    6462}
    6563
  • trunk/Source/WebCore/rendering/svg/RenderSVGResource.cpp

    r162907 r163283  
    198198        if (current->isSVGResourceContainer()) {
    199199            // This will process the rest of the ancestors.
    200             current->toRenderSVGResourceContainer()->removeAllClientsFromCache();
     200            toRenderSVGResourceContainer(*current).removeAllClientsFromCache();
    201201            break;
    202202        }
  • trunk/Source/WebCore/rendering/svg/RenderSVGResourceContainer.cpp

    r163279 r163283  
    101101    for (auto client : m_clients) {
    102102        if (client->isSVGResourceContainer()) {
    103             client->toRenderSVGResourceContainer()->removeAllClientsFromCache(markForInvalidation);
     103            toRenderSVGResourceContainer(*client).removeAllClientsFromCache(markForInvalidation);
    104104            continue;
    105105        }
  • trunk/Source/WebCore/rendering/svg/RenderSVGResourceContainer.h

    r163279 r163283  
    3838
    3939    virtual bool isSVGResourceContainer() const override final { return true; }
    40     virtual RenderSVGResourceContainer* toRenderSVGResourceContainer() override final { return this; }
    4140
    4241    static bool shouldTransformOnTextPainting(RenderObject*, AffineTransform&);
     
    7877};
    7978
     79RENDER_OBJECT_TYPE_CASTS(RenderSVGResourceContainer, isSVGResourceContainer())
     80
    8081inline RenderSVGResourceContainer* getRenderSVGResourceContainerById(Document& document, const AtomicString& id)
    8182{
  • trunk/Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp

    r163276 r163283  
    7777}
    7878
    79 std::unique_ptr<SVGFilterBuilder> RenderSVGResourceFilter::buildPrimitives(SVGFilter* filter)
     79std::unique_ptr<SVGFilterBuilder> RenderSVGResourceFilter::buildPrimitives(SVGFilter* filter) const
    8080{
    8181    FloatRect targetBoundingBox = filter->targetBoundingBox();
  • trunk/Source/WebCore/rendering/svg/RenderSVGResourceFilter.h

    r162198 r163283  
    7777    virtual FloatRect resourceBoundingBox(const RenderObject&) override;
    7878
    79     std::unique_ptr<SVGFilterBuilder> buildPrimitives(SVGFilter*);
     79    std::unique_ptr<SVGFilterBuilder> buildPrimitives(SVGFilter*) const;
    8080
    8181    SVGUnitTypes::SVGUnitType filterUnits() const { return filterElement().filterUnits(); }
  • trunk/Source/WebCore/rendering/svg/SVGRenderTreeAsText.cpp

    r161418 r163283  
    477477    writeNameAndQuotedValue(ts, "id", id);   
    478478
    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());
    486485        ts << "\n";
    487486#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());
    492491        ts << "\n";
    493492        // Creating a placeholder filter which is passed to the builder.
    494493        FloatRect dummyRect;
    495494        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())) {
    497496            if (FilterEffect* lastEffect = builder->lastEffect())
    498497                lastEffect->externalRepresentation(ts, indent + 1);
    499498        }
    500499#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());
    504503        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() << "]";
    509508        ts << " [angle=";
    510         if (marker->angle() == -1)
     509        if (marker.angle() == -1)
    511510            ts << "auto" << "]\n";
    512511        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);
    516515
    517516        // Dump final results that are used for rendering. No use in asking SVGPatternElement for its patternUnits(), as it may
    518517        // link to other patterns using xlink:href, we need to build the full inheritance chain, aka. collectPatternProperties()
    519518        PatternAttributes attributes;
    520         pattern->patternElement().collectPatternAttributes(attributes);
     519        pattern.patternElement().collectPatternAttributes(attributes);
    521520
    522521        writeNameValuePair(ts, "patternUnits", attributes.patternUnits());
     
    527526            ts << " [patternTransform=" << transform << "]";
    528527        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);
    531530
    532531        // Dump final results that are used for rendering. No use in asking SVGGradientElement for its gradientUnits(), as it may
    533532        // link to other gradients using xlink:href, we need to build the full inheritance chain, aka. collectGradientProperties()
    534533        LinearGradientAttributes attributes;
    535         gradient->linearGradientElement().collectGradientAttributes(attributes);
     534        gradient.linearGradientElement().collectGradientAttributes(attributes);
    536535        writeCommonGradientProperties(ts, attributes.spreadMethod(), attributes.gradientTransform(), attributes.gradientUnits());
    537536
    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);
    541540
    542541        // Dump final results that are used for rendering. No use in asking SVGGradientElement for its gradientUnits(), as it may
    543542        // link to other gradients using xlink:href, we need to build the full inheritance chain, aka. collectGradientProperties()
    544543        RadialGradientAttributes attributes;
    545         gradient->radialGradientElement().collectGradientAttributes(attributes);
     544        gradient.radialGradientElement().collectGradientAttributes(attributes);
    546545        writeCommonGradientProperties(ts, attributes.spreadMethod(), attributes.gradientTransform(), attributes.gradientUnits());
    547546
    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);
    552551
    553552        ts << " [center=" << centerPoint << "] [focal=" << focalPoint << "] [radius=" << radius << "] [focalRadius=" << focalRadius << "]\n";
  • trunk/Source/WebCore/rendering/svg/SVGResourcesCycleSolver.cpp

    r161418 r163283  
    109109    while (parent) {
    110110        if (parent->isSVGResourceContainer())
    111             parentResources.add(parent->toRenderSVGResourceContainer());
     111            parentResources.add(toRenderSVGResourceContainer(parent));
    112112        parent = parent->parent();
    113113    }
     
    133133    // If we're a resource, add ourselves to the HashSet.
    134134    if (m_renderer.isSVGResourceContainer())
    135         m_allResources.add(m_renderer.toRenderSVGResourceContainer());
     135        m_allResources.add(&toRenderSVGResourceContainer(m_renderer));
    136136
    137137    ASSERT(!m_allResources.isEmpty());
  • trunk/Source/WebCore/svg/SVGElement.cpp

    r162274 r163283  
    10111011
    10121012    if (isIdAttributeName(attrName)) {
    1013         RenderObject* object = renderer();
     1013        auto renderer = this->renderer();
    10141014        // 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();
    10171017        if (inDocument())
    10181018            buildPendingResourcesIfNeeded();
Note: See TracChangeset for help on using the changeset viewer.