2 * Copyright (C) Research In Motion Limited 2010. All rights reserved.
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Library General Public License for more details.
14 * You should have received a copy of the GNU Library General Public License
15 * along with this library; see the file COPYING.LIB. If not, write to
16 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 * Boston, MA 02110-1301, USA.
20 #ifndef RenderSVGResourceContainer_h
21 #define RenderSVGResourceContainer_h
23 #include "RenderSVGHiddenContainer.h"
24 #include "RenderSVGResource.h"
30 class RenderSVGResourceContainer : public RenderSVGHiddenContainer,
31 public RenderSVGResource {
33 virtual ~RenderSVGResourceContainer();
35 virtual void layout() override;
36 virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle) override final;
38 virtual bool isSVGResourceContainer() const override final { return true; }
40 static bool shouldTransformOnTextPainting(const RenderElement&, AffineTransform&);
41 static AffineTransform transformOnNonScalingStroke(RenderObject*, const AffineTransform& resourceTransform);
44 void addClientRenderLayer(RenderLayer*);
45 void removeClientRenderLayer(RenderLayer*);
48 RenderSVGResourceContainer(SVGElement&, PassRef<RenderStyle>);
50 enum InvalidationMode {
51 LayoutAndBoundariesInvalidation,
52 BoundariesInvalidation,
54 ParentOnlyInvalidation
57 // Used from the invalidateClient/invalidateClients methods from classes, inheriting from us.
58 void markAllClientsForInvalidation(InvalidationMode);
59 void markAllClientLayersForInvalidation();
60 void markClientForInvalidation(RenderObject&, InvalidationMode);
63 friend class SVGResourcesCache;
64 void addClient(RenderElement&);
65 void removeClient(RenderElement&);
68 virtual void willBeDestroyed() override final;
69 void registerResource();
72 bool m_registered : 1;
73 bool m_isInvalidating : 1;
74 HashSet<RenderElement*> m_clients;
75 HashSet<RenderLayer*> m_clientLayers;
78 RENDER_OBJECT_TYPE_CASTS(RenderSVGResourceContainer, isSVGResourceContainer())
80 inline RenderSVGResourceContainer* getRenderSVGResourceContainerById(Document& document, const AtomicString& id)
85 if (RenderSVGResourceContainer* renderResource = document.accessSVGExtensions().resourceById(id))
86 return renderResource;
91 template<typename Renderer>
92 Renderer* getRenderSVGResourceById(Document& document, const AtomicString& id)
94 if (RenderSVGResourceContainer* container = getRenderSVGResourceContainerById(document, id))
95 return container->cast<Renderer>();