0ed62a98461a82f8489ffc6282a31c6b4ed8bf03
[WebKit-https.git] / Source / WebCore / svg / SVGDocumentExtensions.h
1 /*
2  * Copyright (C) 2006 Apple Inc. All rights reserved.
3  * Copyright (C) 2006, 2008 Nikolas Zimmermann <zimmermann@kde.org>
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Library General Public
7  * License as published by the Free Software Foundation; either
8  * version 2 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Library General Public License for more details.
14  *
15  * You should have received a copy of the GNU Library General Public License
16  * along with this library; see the file COPYING.LIB.  If not, write to
17  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18  * Boston, MA 02110-1301, USA.
19  */
20
21 #ifndef SVGDocumentExtensions_h
22 #define SVGDocumentExtensions_h
23
24 #if ENABLE(SVG)
25 #include "SVGResourcesCache.h"
26 #include <wtf/Forward.h>
27 #include <wtf/HashMap.h>
28 #include <wtf/HashSet.h>
29 #include <wtf/PassOwnPtr.h>
30 #include <wtf/text/AtomicStringHash.h>
31 #include <wtf/text/StringImpl.h>
32
33 namespace WebCore {
34
35 class Document;
36 class RenderSVGResourceContainer;
37 class SVGStyledElement;
38 class SVGSMILElement;
39 class SVGSVGElement;
40
41 class SVGDocumentExtensions {
42     WTF_MAKE_NONCOPYABLE(SVGDocumentExtensions); WTF_MAKE_FAST_ALLOCATED;
43 public:
44     typedef HashSet<RefPtr<SVGStyledElement> > SVGPendingElements;
45     SVGDocumentExtensions(Document*);
46     ~SVGDocumentExtensions();
47     
48     void addTimeContainer(SVGSVGElement*);
49     void removeTimeContainer(SVGSVGElement*);
50
51     void addResource(const AtomicString& id, RenderSVGResourceContainer*);
52     void removeResource(const AtomicString& id);
53     RenderSVGResourceContainer* resourceById(const AtomicString& id) const;
54
55     void startAnimations();
56     void pauseAnimations();
57     void unpauseAnimations();
58     bool sampleAnimationAtTime(const String& elementId, SVGSMILElement*, double time);
59
60     void reportWarning(const String&);
61     void reportError(const String&);
62
63     SVGResourcesCache* resourcesCache() const { return m_resourcesCache.get(); }
64
65 private:
66     Document* m_document; // weak reference
67     HashSet<SVGSVGElement*> m_timeContainers; // For SVG 1.2 support this will need to be made more general.
68     HashMap<AtomicString, RenderSVGResourceContainer*> m_resources;
69     HashMap<AtomicString, SVGPendingElements*> m_pendingResources;
70     OwnPtr<SVGResourcesCache> m_resourcesCache;
71
72 public:
73     // This HashMap contains a list of pending resources. Pending resources, are such
74     // which are referenced by any object in the SVG document, but do NOT exist yet.
75     // For instance, dynamically build gradients / patterns / clippers...
76     void addPendingResource(const AtomicString& id, PassRefPtr<SVGStyledElement>);
77     bool isPendingResource(const AtomicString& id) const;
78     PassOwnPtr<SVGPendingElements> removePendingResource(const AtomicString& id);
79 };
80
81 }
82
83 #endif
84 #endif