| Index: Source/core/rendering/svg/RenderSVGContainer.cpp
|
| diff --git a/Source/core/rendering/svg/RenderSVGContainer.cpp b/Source/core/rendering/svg/RenderSVGContainer.cpp
|
| deleted file mode 100644
|
| index ffe5446e1f22f11f3d3a4f63010acde230a9829a..0000000000000000000000000000000000000000
|
| --- a/Source/core/rendering/svg/RenderSVGContainer.cpp
|
| +++ /dev/null
|
| @@ -1,192 +0,0 @@
|
| -/*
|
| - * Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org>
|
| - * Copyright (C) 2004, 2005, 2007, 2008 Rob Buis <buis@kde.org>
|
| - * Copyright (C) 2007 Eric Seidel <eric@webkit.org>
|
| - * Copyright (C) 2009 Google, Inc. All rights reserved.
|
| - * Copyright (C) 2009 Dirk Schulze <krit@webkit.org>
|
| - *
|
| - * This library is free software; you can redistribute it and/or
|
| - * modify it under the terms of the GNU Library General Public
|
| - * License as published by the Free Software Foundation; either
|
| - * version 2 of the License, or (at your option) any later version.
|
| - *
|
| - * This library is distributed in the hope that it will be useful,
|
| - * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
| - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
| - * Library General Public License for more details.
|
| - *
|
| - * You should have received a copy of the GNU Library General Public License
|
| - * along with this library; see the file COPYING.LIB. If not, write to
|
| - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
| - * Boston, MA 02110-1301, USA.
|
| - */
|
| -
|
| -#include "config.h"
|
| -#include "core/rendering/svg/RenderSVGContainer.h"
|
| -
|
| -#include "core/layout/svg/SVGLayoutSupport.h"
|
| -#include "core/layout/svg/SVGResources.h"
|
| -#include "core/layout/svg/SVGResourcesCache.h"
|
| -#include "core/paint/SVGContainerPainter.h"
|
| -
|
| -namespace blink {
|
| -
|
| -RenderSVGContainer::RenderSVGContainer(SVGElement* node)
|
| - : RenderSVGModelObject(node)
|
| - , m_objectBoundingBoxValid(false)
|
| - , m_needsBoundariesUpdate(true)
|
| - , m_hasNonIsolatedBlendingDescendants(false)
|
| - , m_hasNonIsolatedBlendingDescendantsDirty(false)
|
| -{
|
| -}
|
| -
|
| -RenderSVGContainer::~RenderSVGContainer()
|
| -{
|
| -}
|
| -
|
| -void RenderSVGContainer::layout()
|
| -{
|
| - ASSERT(needsLayout());
|
| -
|
| - // Allow RenderSVGViewportContainer to update its viewport.
|
| - calcViewport();
|
| -
|
| - // Allow RenderSVGTransformableContainer to update its transform.
|
| - bool updatedTransform = calculateLocalTransform();
|
| -
|
| - // RenderSVGViewportContainer needs to set the 'layout size changed' flag.
|
| - determineIfLayoutSizeChanged();
|
| -
|
| - SVGLayoutSupport::layoutChildren(this, selfNeedsLayout() || SVGLayoutSupport::filtersForceContainerLayout(this));
|
| -
|
| - // Invalidate all resources of this client if our layout changed.
|
| - if (everHadLayout() && needsLayout())
|
| - SVGResourcesCache::clientLayoutChanged(this);
|
| -
|
| - if (m_needsBoundariesUpdate || updatedTransform) {
|
| - updateCachedBoundaries();
|
| - m_needsBoundariesUpdate = false;
|
| -
|
| - // If our bounds changed, notify the parents.
|
| - RenderSVGModelObject::setNeedsBoundariesUpdate();
|
| - }
|
| -
|
| - clearNeedsLayout();
|
| -}
|
| -
|
| -void RenderSVGContainer::addChild(LayoutObject* child, LayoutObject* beforeChild)
|
| -{
|
| - RenderSVGModelObject::addChild(child, beforeChild);
|
| - SVGResourcesCache::clientWasAddedToTree(child, child->styleRef());
|
| -
|
| - bool shouldIsolateDescendants = (child->isBlendingAllowed() && child->style()->hasBlendMode()) || child->hasNonIsolatedBlendingDescendants();
|
| - if (shouldIsolateDescendants)
|
| - descendantIsolationRequirementsChanged(DescendantIsolationRequired);
|
| -}
|
| -
|
| -void RenderSVGContainer::removeChild(LayoutObject* child)
|
| -{
|
| - SVGResourcesCache::clientWillBeRemovedFromTree(child);
|
| - RenderSVGModelObject::removeChild(child);
|
| -
|
| - bool hadNonIsolatedDescendants = (child->isBlendingAllowed() && child->style()->hasBlendMode()) || child->hasNonIsolatedBlendingDescendants();
|
| - if (hadNonIsolatedDescendants)
|
| - descendantIsolationRequirementsChanged(DescendantIsolationNeedsUpdate);
|
| -}
|
| -
|
| -bool RenderSVGContainer::selfWillPaint()
|
| -{
|
| - SVGResources* resources = SVGResourcesCache::cachedResourcesForLayoutObject(this);
|
| - return resources && resources->filter();
|
| -}
|
| -
|
| -void RenderSVGContainer::styleDidChange(StyleDifference diff, const LayoutStyle* oldStyle)
|
| -{
|
| - RenderSVGModelObject::styleDidChange(diff, oldStyle);
|
| -
|
| - bool hadIsolation = oldStyle && !isSVGHiddenContainer() && SVGLayoutSupport::willIsolateBlendingDescendantsForStyle(*oldStyle);
|
| - bool isolationChanged = hadIsolation == !SVGLayoutSupport::willIsolateBlendingDescendantsForObject(this);
|
| -
|
| - if (!parent() || !isolationChanged)
|
| - return;
|
| -
|
| - if (hasNonIsolatedBlendingDescendants())
|
| - parent()->descendantIsolationRequirementsChanged(SVGLayoutSupport::willIsolateBlendingDescendantsForObject(this) ? DescendantIsolationNeedsUpdate : DescendantIsolationRequired);
|
| -}
|
| -
|
| -bool RenderSVGContainer::hasNonIsolatedBlendingDescendants() const
|
| -{
|
| - if (m_hasNonIsolatedBlendingDescendantsDirty) {
|
| - m_hasNonIsolatedBlendingDescendants = SVGLayoutSupport::computeHasNonIsolatedBlendingDescendants(this);
|
| - m_hasNonIsolatedBlendingDescendantsDirty = false;
|
| - }
|
| - return m_hasNonIsolatedBlendingDescendants;
|
| -}
|
| -
|
| -void RenderSVGContainer::descendantIsolationRequirementsChanged(DescendantIsolationState state)
|
| -{
|
| - switch (state) {
|
| - case DescendantIsolationRequired:
|
| - m_hasNonIsolatedBlendingDescendants = true;
|
| - m_hasNonIsolatedBlendingDescendantsDirty = false;
|
| - break;
|
| - case DescendantIsolationNeedsUpdate:
|
| - if (m_hasNonIsolatedBlendingDescendantsDirty)
|
| - return;
|
| - m_hasNonIsolatedBlendingDescendantsDirty = true;
|
| - break;
|
| - }
|
| - if (SVGLayoutSupport::willIsolateBlendingDescendantsForObject(this))
|
| - return;
|
| - if (parent())
|
| - parent()->descendantIsolationRequirementsChanged(state);
|
| -}
|
| -
|
| -void RenderSVGContainer::paint(const PaintInfo& paintInfo, const LayoutPoint&)
|
| -{
|
| - SVGContainerPainter(*this).paint(paintInfo);
|
| -}
|
| -
|
| -void RenderSVGContainer::addFocusRingRects(Vector<LayoutRect>& rects, const LayoutPoint&) const
|
| -{
|
| - LayoutRect contentRect = LayoutRect(paintInvalidationRectInLocalCoordinates());
|
| - if (!contentRect.isEmpty())
|
| - rects.append(contentRect);
|
| -}
|
| -
|
| -void RenderSVGContainer::updateCachedBoundaries()
|
| -{
|
| - SVGLayoutSupport::computeContainerBoundingBoxes(this, m_objectBoundingBox, m_objectBoundingBoxValid, m_strokeBoundingBox, m_paintInvalidationBoundingBox);
|
| - SVGLayoutSupport::intersectPaintInvalidationRectWithResources(this, m_paintInvalidationBoundingBox);
|
| -}
|
| -
|
| -bool RenderSVGContainer::nodeAtFloatPoint(const HitTestRequest& request, HitTestResult& result, const FloatPoint& pointInParent, HitTestAction hitTestAction)
|
| -{
|
| - // Give RenderSVGViewportContainer a chance to apply its viewport clip
|
| - if (!pointIsInsideViewportClip(pointInParent))
|
| - return false;
|
| -
|
| - FloatPoint localPoint;
|
| - if (!SVGLayoutSupport::transformToUserSpaceAndCheckClipping(this, localToParentTransform(), pointInParent, localPoint))
|
| - return false;
|
| -
|
| - for (LayoutObject* child = lastChild(); child; child = child->previousSibling()) {
|
| - if (child->nodeAtFloatPoint(request, result, localPoint, hitTestAction)) {
|
| - updateHitTestResult(result, roundedLayoutPoint(localPoint));
|
| - return true;
|
| - }
|
| - }
|
| -
|
| - // pointer-events=boundingBox makes it possible for containers to be direct targets
|
| - if (style()->pointerEvents() == PE_BOUNDINGBOX) {
|
| - ASSERT(isObjectBoundingBoxValid());
|
| - if (objectBoundingBox().contains(localPoint)) {
|
| - updateHitTestResult(result, roundedLayoutPoint(localPoint));
|
| - return true;
|
| - }
|
| - }
|
| - // 16.4: "If there are no graphics elements whose relevant graphics content is under the pointer (i.e., there is no target element), the event is not dispatched."
|
| - return false;
|
| -}
|
| -
|
| -}
|
|
|