f5788480fa1be51b25011ead95a985faf6ae258c
[WebKit-https.git] / WebCore / platform / graphics / svg / SVGPaintServerPattern.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 SVGPaintServerPattern_H
27 #define SVGPaintServerPattern_H
28
29 #ifdef SVG_SUPPORT
30
31 #include "AffineTransform.h"
32 #include "FloatRect.h"
33 #include "SVGPaintServer.h"
34
35 namespace WebCore {
36
37     class SVGResourceImage;
38
39     class SVGPaintServerPattern : public SVGPaintServer {
40     public:
41         SVGPaintServerPattern();
42         virtual ~SVGPaintServerPattern();
43
44         virtual SVGPaintServerType type() const { return PatternPaintServer; }
45
46         // Pattern bounding box
47         void setBbox(const FloatRect&);
48         FloatRect bbox() const;
49
50         // Pattern x, y phase points are relative when in boundingBoxMode
51         // BoundingBox mode is enabled by default.
52         bool boundingBoxMode() const;
53         void setBoundingBoxMode(bool mode = true);
54
55         SVGResourceImage* tile() const;
56         void setTile(const PassRefPtr<SVGResourceImage>&);
57
58         AffineTransform patternTransform() const;
59         void setPatternTransform(const AffineTransform&);
60
61         SVGResourceListener* listener() const;
62         void setListener(SVGResourceListener*);
63
64         virtual TextStream& externalRepresentation(TextStream&) const;
65
66 #if PLATFORM(CG)
67         virtual bool setup(KRenderingDeviceContext*, const RenderObject*, SVGPaintTargetType) const;
68         virtual void teardown(KRenderingDeviceContext*, const RenderObject*, SVGPaintTargetType) const; 
69 #endif
70
71 #if PLATFORM(QT)
72         virtual bool setup(KRenderingDeviceContext*, const RenderObject*, SVGPaintTargetType) const;
73 #endif
74
75     private:
76         RefPtr<SVGResourceImage> m_tile;
77         AffineTransform m_patternTransform;
78         FloatRect m_bbox;
79         bool m_boundingBoxMode;
80         SVGResourceListener* m_listener;
81
82 #if PLATFORM(CG)
83         mutable CGColorSpaceRef m_patternSpace;
84         mutable CGPatternRef m_pattern;
85 #endif                
86     };
87
88 } // namespace WebCore
89
90 #endif
91
92 #endif // SVGPaintServerPattern_H