Reviewed by Eric. Rubber stamped by Oliver.
[WebKit-https.git] / WebCore / platform / graphics / svg / SVGResource.h
1 /*
2  * Copyright (C) 2006 Nikolas Zimmermann <zimmermann@kde.org>
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24  */
25
26 #ifndef SVGResource_H
27 #define SVGResource_H
28
29 #ifdef SVG_SUPPORT
30
31 #include "Shared.h"
32 #include "PlatformString.h"
33
34 namespace WebCore {
35
36     class Document;
37     class RenderPath;
38     class TextStream;
39     class AtomicString;
40
41     typedef Vector<const RenderPath*> RenderPathList;
42
43     enum SVGResourceType {
44         // Painting mode
45         ClipperResourceType = 0,
46         MarkerResourceType = 1,
47         ImageResourceType = 2,
48         FilterResourceType = 3,
49         MaskerResourceType = 4
50     };
51
52     // The SVGResource file represent various graphics resources:
53     // - Filter resource
54     // - Clipper resource
55     // - Masker resource
56     // - Marker resource
57     // - Pattern resource
58     // - Linear/Radial gradient resource
59     //
60     // SVG creates/uses these resources.
61
62     class SVGResource : public Shared<SVGResource> {
63     public:
64         SVGResource();
65         virtual ~SVGResource();
66       
67         virtual void invalidate();
68         void addClient(const RenderPath*);
69
70         const RenderPathList& clients() const;
71
72         virtual bool isPaintServer() const { return false; }
73         virtual bool isFilter() const { return false; }
74         virtual bool isClipper() const { return false; }
75         virtual bool isMarker() const { return false; }
76         virtual bool isMasker() const { return false; }
77
78         virtual TextStream& externalRepresentation(TextStream&) const;
79
80     private:
81         RenderPathList m_clients;
82     };
83
84     // Helper class notifying about changes in the resources
85     class SVGResourceListener
86     {
87     public:
88         virtual ~SVGResourceListener() { }
89         virtual void resourceNotification() const = 0;
90     };
91
92     SVGResource* getResourceById(Document*, const AtomicString&);
93
94     TextStream& operator<<(TextStream&, const SVGResource&);
95
96 } // namespace WebCore
97
98 #endif
99
100 #endif // SVGResource_H